X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fctf.c;h=6b292a7e567fff53a00abc1b04f91beae8a7cec3;hb=65923160260ca0d5928db5d8840e76576cb429c4;hp=25f2caff3b5155a033f90363efbcc26a4e9b03ae;hpb=493330cb8cd73be8a598308b78f0fc1d4912843a;p=babeltrace.git diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 25f2caff..6b292a7e 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -77,6 +77,7 @@ int opt_clock_cycles, opt_clock_gmt; uint64_t opt_clock_offset; +uint64_t opt_clock_offset_ns; extern int yydebug; @@ -321,6 +322,9 @@ void ctf_print_timestamp_real(FILE *fp, ts_nsec = timestamp; + /* Add command-line offset in ns*/ + ts_nsec += opt_clock_offset_ns; + /* Add command-line offset */ ts_sec += opt_clock_offset; @@ -426,9 +430,9 @@ void ctf_print_discarded(FILE *fp, struct ctf_stream_definition *stream, } fprintf(fp, "] in trace UUID "); print_uuid(fp, stream->stream_class->trace->uuid); - if (stream->stream_class->trace->path[0]) + if (stream->stream_class->trace->parent.path[0]) fprintf(fp, ", at path: \"%s\"", - stream->stream_class->trace->path); + stream->stream_class->trace->parent.path); fprintf(fp, ", within stream id %" PRIu64, stream->stream_id); if (stream->path[0]) @@ -606,7 +610,8 @@ error: return ret; } -int ctf_init_pos(struct ctf_stream_pos *pos, int fd, int open_flags) +int ctf_init_pos(struct ctf_stream_pos *pos, struct bt_trace_descriptor *trace, + int fd, int open_flags) { pos->fd = fd; if (fd >= 0) { @@ -624,12 +629,14 @@ int ctf_init_pos(struct ctf_stream_pos *pos, int fd, int open_flags) pos->flags = MAP_PRIVATE; pos->parent.rw_table = read_dispatch_table; pos->parent.event_cb = ctf_read_event; + pos->parent.trace = trace; break; case O_RDWR: pos->prot = PROT_WRITE; /* Write has priority */ pos->flags = MAP_SHARED; pos->parent.rw_table = write_dispatch_table; pos->parent.event_cb = ctf_write_event; + pos->parent.trace = trace; if (fd >= 0) ctf_packet_seek(&pos->parent, 0, SEEK_SET); /* position for write */ break; @@ -778,7 +785,7 @@ void ctf_packet_seek(struct bt_stream_pos *stream_pos, size_t index, int whence) * case, the collection is not there, so we * cannot print the timestamps. */ - if ((&file_stream->parent)->stream_class->trace->collection) { + if ((&file_stream->parent)->stream_class->trace->parent.collection) { /* * When a stream reaches the end of the * file, we need to show the number of @@ -1211,6 +1218,8 @@ error: bt_definition_unref(&stream_event->event_fields->p); if (stream_event->event_context) bt_definition_unref(&stream_event->event_context->p); + fprintf(stderr, "[error] Unable to create event definition for event \"%s\".\n", + g_quark_to_string(event->name)); return NULL; } @@ -1271,8 +1280,10 @@ int create_stream_definitions(struct ctf_trace *td, struct ctf_stream_definition if (!event) continue; stream_event = create_event_definitions(td, stream, event); - if (!stream_event) + if (!stream_event) { + ret = -EINVAL; goto error_event; + } g_ptr_array_index(stream->events_by_id, i) = stream_event; } return 0; @@ -1291,6 +1302,8 @@ error: bt_definition_unref(&stream->stream_event_header->p); if (stream->stream_packet_context) bt_definition_unref(&stream->stream_packet_context->p); + fprintf(stderr, "[error] Unable to create stream (%" PRIu64 ") definitions: %s\n", + stream_class->stream_id, strerror(-ret)); return ret; } @@ -1354,6 +1367,7 @@ begin: if (ret) { if (ret == -EFAULT) goto retry; + fprintf(stderr, "[error] Unable to read packet header: %s\n", strerror(-ret)); return ret; } len_index = bt_struct_declaration_lookup_field_index(file_stream->parent.trace_packet_header->declaration, g_quark_from_static_string("magic")); @@ -1436,6 +1450,7 @@ begin: if (ret) { if (ret == -EFAULT) goto retry; + fprintf(stderr, "[error] Unable to read packet context: %s\n", strerror(-ret)); return ret; } /* read content size from header */ @@ -1469,7 +1484,7 @@ begin: field = bt_struct_definition_get_field_from_index(file_stream->parent.stream_packet_context, len_index); packet_index.timestamp_begin = bt_get_unsigned_int(field); - if (file_stream->parent.stream_class->trace->collection) { + if (file_stream->parent.stream_class->trace->parent.collection) { packet_index.timestamp_begin = ctf_get_real_timestamp( &file_stream->parent, @@ -1484,7 +1499,7 @@ begin: field = bt_struct_definition_get_field_from_index(file_stream->parent.stream_packet_context, len_index); packet_index.timestamp_end = bt_get_unsigned_int(field); - if (file_stream->parent.stream_class->trace->collection) { + if (file_stream->parent.stream_class->trace->parent.collection) { packet_index.timestamp_end = ctf_get_real_timestamp( &file_stream->parent, @@ -1544,6 +1559,7 @@ retry: tmp_map_len = packet_map_len << 1; if (tmp_map_len >> 1 != packet_map_len) { /* Overflow */ + fprintf(stderr, "[error] Packet mapping length overflow\n"); return -EFAULT; } packet_map_len = tmp_map_len; @@ -1594,6 +1610,7 @@ int create_trace_definitions(struct ctf_trace *td, struct ctf_stream_definition return 0; error: + fprintf(stderr, "[error] Unable to create trace definitions: %s\n", strerror(-ret)); return ret; } @@ -1643,7 +1660,7 @@ int ctf_open_file_stream_read(struct ctf_trace *td, const char *path, int flags, goto error_def; } - ret = ctf_init_pos(&file_stream->pos, fd, flags); + ret = ctf_init_pos(&file_stream->pos, &td->parent, fd, flags); if (ret) goto error_def; ret = create_trace_definitions(td, &file_stream->parent); @@ -1652,10 +1669,12 @@ int ctf_open_file_stream_read(struct ctf_trace *td, const char *path, int flags, /* * For now, only a single clock per trace is supported. */ - file_stream->parent.current_clock = td->single_clock; + file_stream->parent.current_clock = td->parent.single_clock; ret = create_stream_packet_index(td, file_stream); - if (ret) + if (ret) { + fprintf(stderr, "[error] Stream index creation error.\n"); goto error_index; + } /* Add stream file to stream class */ g_ptr_array_add(file_stream->parent.stream_class->streams, &file_stream->parent); @@ -1708,8 +1727,8 @@ int ctf_open_trace_read(struct ctf_trace *td, ret = -errno; goto error_dirfd; } - strncpy(td->path, path, sizeof(td->path)); - td->path[sizeof(td->path) - 1] = '\0'; + strncpy(td->parent.path, path, sizeof(td->parent.path)); + td->parent.path[sizeof(td->parent.path) - 1] = '\0'; /* * Keep the metadata file separate. @@ -1893,7 +1912,7 @@ int ctf_open_mmap_stream_read(struct ctf_trace *td, /* * For now, only a single clock per trace is supported. */ - file_stream->parent.current_clock = td->single_clock; + file_stream->parent.current_clock = td->parent.single_clock; /* Add stream file to stream class */ g_ptr_array_add(file_stream->parent.stream_class->streams, @@ -2090,7 +2109,7 @@ void ctf_set_context(struct bt_trace_descriptor *descriptor, struct ctf_trace *td = container_of(descriptor, struct ctf_trace, parent); - td->ctx = ctx; + td->parent.ctx = ctx; } static @@ -2100,7 +2119,7 @@ void ctf_set_handle(struct bt_trace_descriptor *descriptor, struct ctf_trace *td = container_of(descriptor, struct ctf_trace, parent); - td->handle = handle; + td->parent.handle = handle; } static