Fix reading of empty packets
[babeltrace.git] / formats / ctf / ctf.c
index fd05c0ab2301c293db6aa9728e4d69ea0e1d49f2..7120207ddb5a47dafeb50089b13f1c542563ea7e 100644 (file)
@@ -415,9 +415,9 @@ void ctf_move_pos_slow(struct ctf_stream_pos *pos, size_t offset, int whence)
                file_stream->parent.timestamp = index->timestamp_begin;
                pos->content_size = index->content_size;
                pos->packet_size = index->packet_size;
-               if (index->data_offset < index->content_size)
+               if (index->data_offset <= index->content_size) {
                        pos->offset = 0;        /* will read headers */
-               else {
+               else {
                        pos->offset = EOF;
                        return;
                }
@@ -613,7 +613,17 @@ int ctf_open_trace_metadata_read(struct ctf_trace *td)
                if (ret)
                        goto end_packet_read;
        } else {
+               char buf[sizeof("/* TSDL")];    /* Includes \0 */
+               ssize_t readlen;
+
                td->byte_order = BYTE_ORDER;
+
+               /* Check text-only metadata header */
+               buf[sizeof("/* TSDL") - 1] = '\0';
+               readlen = fread(buf, sizeof("/* TSDL") - 1, 1, fp);
+               if (readlen < 1 || strcmp(buf, "/* TSDL") != 0)
+                       fprintf(stdout, "[warning] Missing \"/* TSDL\" header for text-only metadata.\n");
+               rewind(fp);
        }
 
        scanner = ctf_scanner_alloc(fp);
This page took 0.023433 seconds and 4 git commands to generate.