X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=converter%2Fbabeltrace.c;h=a34af175f9e817545c3b9ef2cf2863aa487ae151;hb=8bd25c2d1df35cd952c1a6423b9fc99096ada748;hp=83f300c5d9b2fa7635614fa477b173621f6a68b2;hpb=05cab52530332c97aca9d8c78a8cae2f82f00896;p=babeltrace.git diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 83f300c5..a34af175 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include /* TODO: fix object model for format-agnostic callbacks */ @@ -515,6 +516,67 @@ int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path, return ret; } +static +int trace_pre_handler(struct bt_trace_descriptor *td_write, + struct bt_context *ctx) +{ + struct ctf_text_stream_pos *sout; + struct trace_collection *tc; + int ret, i; + + sout = container_of(td_write, struct ctf_text_stream_pos, + trace_descriptor); + + if (!sout->parent.pre_trace_cb) + return 0; + + tc = ctx->tc; + for (i = 0; i < tc->array->len; i++) { + struct bt_trace_descriptor *td = + g_ptr_array_index(tc->array, i); + + ret = sout->parent.pre_trace_cb(&sout->parent, td); + if (ret) { + fprintf(stderr, "[error] Writing to trace pre handler failed.\n"); + goto end; + } + } + ret = 0; +end: + return ret; +} + +static +int trace_post_handler(struct bt_trace_descriptor *td_write, + struct bt_context *ctx) +{ + struct ctf_text_stream_pos *sout; + struct trace_collection *tc; + int ret, i; + + sout = container_of(td_write, struct ctf_text_stream_pos, + trace_descriptor); + + if (!sout->parent.post_trace_cb) + return 0; + + tc = ctx->tc; + for (i = 0; i < tc->array->len; i++) { + struct bt_trace_descriptor *td = + g_ptr_array_index(tc->array, i); + + ret = sout->parent.post_trace_cb(&sout->parent, td); + if (ret) { + fprintf(stderr, "[error] Writing to trace post handler failed.\n"); + goto end; + } + } + ret = 0; +end: + return ret; +} + +static int convert_trace(struct bt_trace_descriptor *td_write, struct bt_context *ctx) { @@ -527,6 +589,9 @@ int convert_trace(struct bt_trace_descriptor *td_write, sout = container_of(td_write, struct ctf_text_stream_pos, trace_descriptor); + if (!sout->parent.event_cb) + return 0; + begin_pos.type = BT_SEEK_BEGIN; iter = bt_ctf_iter_create(ctx, &begin_pos, NULL); if (!iter) { @@ -586,7 +651,7 @@ int main(int argc, char **argv) } printf_verbose("Converting from format: %s\n", opt_input_format ? : "ctf "); - printf_verbose("Converting to directory: %s\n", + printf_verbose("Converting to target: %s\n", opt_output_path ? : ""); printf_verbose("Converting to format: %s\n", opt_output_format ? : "text "); @@ -660,12 +725,24 @@ int main(int argc, char **argv) if (partial_error) sleep(PARTIAL_ERROR_SLEEP); + ret = trace_pre_handler(td_write, ctx); + if (ret) { + fprintf(stderr, "Error in trace pre handle.\n\n"); + goto error_copy_trace; + } + ret = convert_trace(td_write, ctx); if (ret) { fprintf(stderr, "Error printing trace.\n\n"); goto error_copy_trace; } + ret = trace_post_handler(td_write, ctx); + if (ret) { + fprintf(stderr, "Error in trace post handle.\n\n"); + goto error_copy_trace; + } + fmt_write->close_trace(td_write); bt_context_put(ctx);