X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fcallbacks.c;h=0c221f9da684e5dfe58b058548be4263fdbdabc7;hp=6130911fec112da82f429fa60fd676e94883e96c;hb=f60efc0e475b3c2fca3b2afc584615f6c482c9e7;hpb=c716f83b53677d5f2e6a15463408f464006eafb7 diff --git a/formats/ctf/callbacks.c b/formats/ctf/callbacks.c index 6130911f..0c221f9d 100644 --- a/formats/ctf/callbacks.c +++ b/formats/ctf/callbacks.c @@ -73,8 +73,12 @@ int bt_ctf_iter_add_callback(struct bt_ctf_iter *iter, int i, stream_id; gpointer *event_id_ptr; unsigned long event_id; - struct trace_collection *tc = iter->parent.ctx->tc; + struct trace_collection *tc; + if (!iter || !callback) + return -EINVAL; + + tc = iter->parent.ctx->tc; for (i = 0; i < tc->array->len; i++) { struct ctf_trace *tin; struct trace_descriptor *td_read; @@ -146,33 +150,33 @@ int bt_ctf_iter_add_callback(struct bt_ctf_iter *iter, } static -struct ctf_event_definition *extract_ctf_stream_event(struct ctf_stream *stream) +int extract_ctf_stream_event(struct ctf_stream_definition *stream, + struct bt_ctf_event *event) { struct ctf_stream_declaration *stream_class = stream->stream_class; - struct ctf_event *event_class; - struct ctf_event_definition *event; + struct ctf_event_declaration *event_class; uint64_t id = stream->event_id; if (id >= stream_class->events_by_id->len) { fprintf(stderr, "[error] Event id %" PRIu64 " is outside range.\n", id); - return NULL; + return -1; } - event = g_ptr_array_index(stream->events_by_id, id); - if (!event) { + event->parent = g_ptr_array_index(stream->events_by_id, id); + if (!event->parent) { fprintf(stderr, "[error] Event id %" PRIu64 " is unknown.\n", id); - return NULL; + return -1; } event_class = g_ptr_array_index(stream_class->events_by_id, id); if (!event_class) { fprintf(stderr, "[error] Event id %" PRIu64 " is unknown.\n", id); - return NULL; + return -1; } - return event; + return 0; } void process_callbacks(struct bt_ctf_iter *iter, - struct ctf_stream *stream) + struct ctf_stream_definition *stream) { struct bt_stream_callbacks *bt_stream_cb; struct bt_callback_chain *bt_chain; @@ -181,8 +185,9 @@ void process_callbacks(struct bt_ctf_iter *iter, enum bt_cb_ret ret; struct bt_ctf_event ctf_data; - ctf_data.event = extract_ctf_stream_event(stream); - ctf_data.stream = stream; + assert(iter && stream); + + ret = extract_ctf_stream_event(stream, &ctf_data); /* process all events callback first */ if (iter->main_callbacks.callback) {