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
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.
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);
(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;
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;
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;
/* 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;
}
}
/* 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;
}
*/
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;
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;
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;
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;
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)
{
* 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");
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;