X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fctf.c;h=fd05c0ab2301c293db6aa9728e4d69ea0e1d49f2;hb=7fb16836741fe11151da258ad2c93b486e3acfbe;hp=2b2e15185275b68699467ea62f07aa8ef35bca1b;hpb=64fa3fec6c28f1d077812b4bfa06ae73b0f5999d;p=babeltrace.git diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 2b2e1518..fd05c0ab 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -458,12 +458,13 @@ int packet_metadata(struct ctf_trace *td, FILE *fp) if (magic == TSDL_MAGIC) { ret = 1; td->byte_order = BYTE_ORDER; + CTF_TRACE_SET_FIELD(td, byte_order); } else if (magic == GUINT32_SWAP_LE_BE(TSDL_MAGIC)) { ret = 1; td->byte_order = (BYTE_ORDER == BIG_ENDIAN) ? LITTLE_ENDIAN : BIG_ENDIAN; + CTF_TRACE_SET_FIELD(td, byte_order); } - CTF_TRACE_SET_FIELD(td, byte_order); end: rewind(fp); return ret; @@ -475,7 +476,7 @@ int ctf_open_trace_metadata_packet_read(struct ctf_trace *td, FILE *in, { struct metadata_packet_header header; size_t readlen, writelen, toread; - char buf[4096]; + char buf[4096 + 1]; /* + 1 for debug-mode \0 */ int ret = 0; readlen = fread(&header, header_sizeof(header), 1, in); @@ -516,12 +517,13 @@ int ctf_open_trace_metadata_packet_read(struct ctf_trace *td, FILE *in, toread = (header.content_size / CHAR_BIT) - header_sizeof(header); for (;;) { - readlen = fread(buf, sizeof(char), min(sizeof(buf), toread), in); + readlen = fread(buf, sizeof(char), min(sizeof(buf) - 1, toread), in); if (ferror(in)) { ret = -EINVAL; break; } if (babeltrace_debug) { + buf[readlen] = '\0'; fprintf(stdout, "[debug] metadata packet read: %s\n", buf); } @@ -610,6 +612,8 @@ int ctf_open_trace_metadata_read(struct ctf_trace *td) ret = ctf_open_trace_metadata_stream_read(td, &fp, &buf); if (ret) goto end_packet_read; + } else { + td->byte_order = BYTE_ORDER; } scanner = ctf_scanner_alloc(fp); @@ -638,7 +642,7 @@ int ctf_open_trace_metadata_read(struct ctf_trace *td) goto end; } ret = ctf_visitor_construct_metadata(stdout, 0, &scanner->ast->root, - td, BYTE_ORDER); + td, td->byte_order); if (ret) { fprintf(stdout, "[error] Error in CTF metadata constructor %d\n", ret); goto end; @@ -907,13 +911,12 @@ int create_stream_packet_index(struct ctf_trace *td, return -EINVAL; } file_stream->parent.stream_class = stream; + ret = create_stream_definitions(td, &file_stream->parent); + if (ret) + return ret; } first_packet = 0; - ret = create_stream_definitions(td, &file_stream->parent); - if (ret) - return ret; - if (file_stream->parent.stream_packet_context) { /* Read packet context */ ret = generic_rw(&pos->parent, &file_stream->parent.stream_packet_context->p);