X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fctf.c;h=098b7eb15d7d4589880243ed7d0ecdc66c7b4152;hp=ce21464e562b0601540f7beacb96c8da3b597c20;hb=01c76b246be85b5d9c8e99813950fb194c9f714f;hpb=2d0bea29e27a0f1a9b651bb98dac7bf0c2550f78 diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index ce21464e..098b7eb1 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -3,7 +3,9 @@ * * Format registration. * - * Copyright 2010, 2011 - Mathieu Desnoyers + * Copyright 2010-2011 EfficiOS Inc. and Linux Foundation + * + * Author: Mathieu Desnoyers * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -156,14 +158,17 @@ int ctf_read_event(struct stream_pos *ppos, struct ctf_stream *stream) } /* lookup timestamp */ + stream->has_timestamp = 0; integer_definition = lookup_integer(&stream->stream_event_header->p, "timestamp", FALSE); if (integer_definition) { ctf_update_timestamp(stream, integer_definition); + stream->has_timestamp = 1; } else { if (variant) { integer_definition = lookup_integer(variant, "timestamp", FALSE); if (integer_definition) { ctf_update_timestamp(stream, integer_definition); + stream->has_timestamp = 1; } } } @@ -470,7 +475,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); @@ -511,12 +516,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); } @@ -902,13 +908,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); @@ -987,7 +992,7 @@ int create_stream_packet_index(struct ctf_trace *td, if (packet_index.packet_size > (filestats.st_size - packet_index.offset) * CHAR_BIT) { fprintf(stdout, "[error] Packet size (%zu bits) is larger than remaining file size (%zu bits).\n", - packet_index.content_size, (filestats.st_size - packet_index.offset) * CHAR_BIT); + packet_index.content_size, (size_t) (filestats.st_size - packet_index.offset) * CHAR_BIT); return -EINVAL; }