if (packet_metadata(td, fp)) {
ret = ctf_trace_metadata_stream_read(td, &fp, &buf);
if (ret) {
- /* Warn about empty metadata */
- fprintf(stderr, "[warning] Empty metadata.\n");
goto end;
}
td->metadata_string = buf;
struct ctf_file_stream *file_stream)
{
struct ctf_stream_pos *pos;
- struct ctf_packet_index ctf_index;
+ struct ctf_packet_index *ctf_index = NULL;
struct ctf_packet_index_file_hdr index_hdr;
struct packet_index index;
+ uint32_t packet_index_len;
int ret = 0;
int first_packet = 1;
size_t len;
ret = -1;
goto error;
}
- if (index_hdr.packet_index_len == 0) {
+ packet_index_len = be32toh(index_hdr.packet_index_len);
+ if (packet_index_len == 0) {
fprintf(stderr, "[error] Packet index length cannot be 0.\n");
ret = -1;
goto error;
}
-
- while (fread(&ctf_index, index_hdr.packet_index_len, 1,
+ /*
+ * Allocate the index length found in header, not internal
+ * representation.
+ */
+ ctf_index = g_malloc0(packet_index_len);
+ while (fread(ctf_index, packet_index_len, 1,
pos->index_fp) == 1) {
uint64_t stream_id;
struct ctf_stream_declaration *stream = NULL;
memset(&index, 0, sizeof(index));
- index.offset = be64toh(ctf_index.offset);
- index.packet_size = be64toh(ctf_index.packet_size);
- index.content_size = be64toh(ctf_index.content_size);
- index.ts_cycles.timestamp_begin = be64toh(ctf_index.timestamp_begin);
- index.ts_cycles.timestamp_end = be64toh(ctf_index.timestamp_end);
- index.events_discarded = be64toh(ctf_index.events_discarded);
+ index.offset = be64toh(ctf_index->offset);
+ index.packet_size = be64toh(ctf_index->packet_size);
+ index.content_size = be64toh(ctf_index->content_size);
+ index.ts_cycles.timestamp_begin = be64toh(ctf_index->timestamp_begin);
+ index.ts_cycles.timestamp_end = be64toh(ctf_index->timestamp_end);
+ index.events_discarded = be64toh(ctf_index->events_discarded);
index.events_discarded_len = 64;
index.data_offset = -1;
- stream_id = be64toh(ctf_index.stream_id);
+ stream_id = be64toh(ctf_index->stream_id);
if (!first_packet) {
/* add index to packet array */
ret = 0;
error:
+ g_free(ctf_index);
return ret;
}
ret = ctf_trace_metadata_read(td, metadata_fp, scanner, 0);
ctf_scanner_free(scanner);
if (ret) {
+ if (ret == -ENOENT) {
+ fprintf(stderr, "[warning] Empty metadata.\n");
+ }
fprintf(stderr, "[warning] Unable to open trace metadata for path \"%s\".\n", path);
goto error_metadata;
}
}
ret = ctf_trace_metadata_read(td, metadata_fp, td->scanner, 0);
if (ret) {
+ if (ret == -ENOENT) {
+ fprintf(stderr, "[warning] Empty metadata.\n");
+ }
goto error;
}