X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fcallbacks.c;h=9242a2b98ea57ee123e1cef876054b51c43b4d96;hb=118f5776fcc9e4dc1e79d96d697825bc95174fcb;hp=0b4da9c5599c4e2b995e0c41553f2babda53a231;hpb=4716614abaa127d6d6722c845a413495d9cb2b6f;p=babeltrace.git diff --git a/formats/ctf/callbacks.c b/formats/ctf/callbacks.c index 0b4da9c5..9242a2b9 100644 --- a/formats/ctf/callbacks.c +++ b/formats/ctf/callbacks.c @@ -16,6 +16,14 @@ * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ #include @@ -30,7 +38,7 @@ #include static -struct bt_dependencies *_babeltrace_dependencies_create(const char *first, +struct bt_dependencies *_bt_dependencies_create(const char *first, va_list ap) { const char *iter; @@ -48,13 +56,13 @@ struct bt_dependencies *_babeltrace_dependencies_create(const char *first, return dep; } -struct bt_dependencies *babeltrace_dependencies_create(const char *first, ...) +struct bt_dependencies *bt_dependencies_create(const char *first, ...) { va_list ap; struct bt_dependencies *deps; va_start(ap, first); - deps = _babeltrace_dependencies_create(first, ap); + deps = _bt_dependencies_create(first, ap); va_end(ap); return deps; } @@ -73,11 +81,15 @@ 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; + struct bt_trace_descriptor *td_read; td_read = g_ptr_array_index(tc->array, i); tin = container_of(td_read, struct ctf_trace, parent); @@ -146,29 +158,29 @@ int bt_ctf_iter_add_callback(struct bt_ctf_iter *iter, } static -struct ctf_event_definition *extract_ctf_stream_event(struct ctf_stream_definition *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_declaration *event_class; - struct ctf_event_definition *event; 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, @@ -181,15 +193,16 @@ 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); + if (ret) + goto end; /* process all events callback first */ if (iter->main_callbacks.callback) { for (i = 0; i < iter->main_callbacks.callback->len; i++) { cb = &g_array_index(iter->main_callbacks.callback, struct bt_callback, i); - if (!cb) - goto end; ret = cb->callback(&ctf_data, cb->private_data); switch (ret) { case BT_CB_OK_STOP: @@ -216,8 +229,6 @@ void process_callbacks(struct bt_ctf_iter *iter, for (i = 0; i < bt_chain->callback->len; i++) { cb = &g_array_index(bt_chain->callback, struct bt_callback, i); - if (!cb) - goto end; ret = cb->callback(&ctf_data, cb->private_data); switch (ret) { case BT_CB_OK_STOP: