X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=converter%2Fbabeltrace.c;h=a34af175f9e817545c3b9ef2cf2863aa487ae151;hp=ed19fa85a5b0fd59baa958be6f5eb3a8ef45d096;hb=888ec52a298af05ca3492e4eae0f1e2b1925e859;hpb=347e42774758b794e25f5c2b452706100cadd54e diff --git a/converter/babeltrace.c b/converter/babeltrace.c index ed19fa85..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 "); @@ -606,7 +671,7 @@ int main(int argc, char **argv) } } fmt_read = bt_lookup_format(g_quark_from_static_string(opt_input_format)); - if (!fmt_read) { + if (!fmt_read || fmt_read->name != g_quark_from_static_string("ctf")) { fprintf(stderr, "[error] Format \"%s\" is not supported.\n\n", opt_input_format); partial_error = 1; @@ -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);