X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fctf.c;h=8d617bcd620f66b8576a7a40ad2dd01f9f89ad44;hp=80bd37869ed897f947c1b99e3f871b3d93d9692d;hb=d6425aaf6026d168a695268c4aa7539956c0d0ca;hpb=25ccc85ba8fce5fb8402f1c6fc63a75ff7f07d99 diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 80bd3786..8d617bcd 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -65,12 +65,12 @@ extern int yydebug; static struct trace_descriptor *ctf_open_trace(const char *path, int flags, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp); static struct trace_descriptor *ctf_open_mmap_trace( struct mmap_stream_list *mmap_list, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, int whence), + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp); static @@ -229,6 +229,11 @@ int ctf_read_event(struct stream_pos *ppos, struct ctf_stream *stream) ctf_pos_get_event(pos); + /* save the current position as a restore point */ + pos->last_offset = pos->offset; + /* we just read the event, it is consumed when used by the caller */ + stream->consumed = 0; + /* * This is the EOF check after we've advanced the position in * ctf_pos_get_event. @@ -406,7 +411,7 @@ void ctf_init_pos(struct ctf_stream_pos *pos, int fd, int open_flags) pos->parent.rw_table = write_dispatch_table; pos->parent.event_cb = ctf_write_event; if (fd >= 0) - ctf_move_pos_slow(pos, 0, SEEK_SET); /* position for write */ + ctf_move_pos_slow(&pos->parent, 0, SEEK_SET); /* position for write */ break; default: assert(0); @@ -431,8 +436,10 @@ void ctf_fini_pos(struct ctf_stream_pos *pos) (void) g_array_free(pos->packet_index, TRUE); } -void ctf_move_pos_slow(struct ctf_stream_pos *pos, size_t offset, int whence) +void ctf_move_pos_slow(struct stream_pos *stream_pos, size_t offset, int whence) { + struct ctf_stream_pos *pos = + container_of(stream_pos, struct ctf_stream_pos, parent); struct ctf_file_stream *file_stream = container_of(pos, struct ctf_file_stream, pos); int ret; @@ -507,8 +514,8 @@ void ctf_move_pos_slow(struct ctf_stream_pos *pos, size_t offset, int whence) break; } case SEEK_SET: - assert(offset == 0); /* only seek supported for now */ - pos->cur_index = 0; + if (offset == 0) + pos->cur_index = 0; file_stream->parent.prev_timestamp = 0; file_stream->parent.prev_timestamp_end = 0; break; @@ -763,7 +770,7 @@ int ctf_open_trace_metadata_stream_read(struct ctf_trace *td, FILE **fp, static int ctf_open_trace_metadata_read(struct ctf_trace *td, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp) { struct ctf_scanner *scanner; @@ -1180,14 +1187,14 @@ int create_stream_packet_index(struct ctf_trace *td, /* Validate content size and packet size values */ if (packet_index.content_size > packet_index.packet_size) { - fprintf(stderr, "[error] Content size (%zu bits) is larger than packet size (%zu bits).\n", + fprintf(stderr, "[error] Content size (%" PRIu64 " bits) is larger than packet size (%" PRIu64 " bits).\n", packet_index.content_size, packet_index.packet_size); return -EINVAL; } - if (packet_index.packet_size > (filestats.st_size - packet_index.offset) * CHAR_BIT) { - fprintf(stderr, "[error] Packet size (%zu bits) is larger than remaining file size (%zu bits).\n", - packet_index.content_size, (size_t) (filestats.st_size - packet_index.offset) * CHAR_BIT); + if (packet_index.packet_size > ((uint64_t)filestats.st_size - packet_index.offset) * CHAR_BIT) { + fprintf(stderr, "[error] Packet size (%" PRIu64 " bits) is larger than remaining file size (%" PRIu64 " bits).\n", + packet_index.content_size, ((uint64_t)filestats.st_size - packet_index.offset) * CHAR_BIT); return -EINVAL; } @@ -1201,7 +1208,7 @@ int create_stream_packet_index(struct ctf_trace *td, } /* Move pos back to beginning of file */ - ctf_move_pos_slow(pos, 0, SEEK_SET); /* position for write */ + ctf_move_pos_slow(&pos->parent, 0, SEEK_SET); /* position for write */ return 0; } @@ -1236,7 +1243,7 @@ error: */ static int ctf_open_file_stream_read(struct ctf_trace *td, const char *path, int flags, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence)) { int ret; @@ -1287,7 +1294,7 @@ error: static int ctf_open_trace_read(struct ctf_trace *td, const char *path, int flags, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp) { int ret; @@ -1370,7 +1377,7 @@ error: static struct trace_descriptor *ctf_open_trace(const char *path, int flags, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp) { struct ctf_trace *td; @@ -1453,7 +1460,7 @@ end: static int ctf_open_mmap_stream_read(struct ctf_trace *td, struct mmap_stream *mmap_info, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence)) { int ret; @@ -1488,7 +1495,7 @@ error_def: int ctf_open_mmap_trace_read(struct ctf_trace *td, struct mmap_stream_list *mmap_list, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp) { @@ -1504,7 +1511,7 @@ int ctf_open_mmap_trace_read(struct ctf_trace *td, * for each stream, try to open, check magic number, and get the * stream ID to add to the right location in the stream array. */ - cds_list_for_each_entry(mmap_info, &mmap_list->head, list) { + bt_list_for_each_entry(mmap_info, &mmap_list->head, list) { ret = ctf_open_mmap_stream_read(td, mmap_info, move_pos_slow); if (ret) { fprintf(stderr, "[error] Open file mmap stream error.\n"); @@ -1521,7 +1528,7 @@ error: static struct trace_descriptor *ctf_open_mmap_trace( struct mmap_stream_list *mmap_list, - void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, int whence), + void (*move_pos_slow)(struct stream_pos *pos, size_t offset, int whence), FILE *metadata_fp) { struct ctf_trace *td;