X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=converter%2Fbabeltrace.c;h=ef783ed495a3f35295de62f6a0f71261ac216b98;hb=refs%2Fheads%2Fstable-1.5;hp=2e4003ca45807c9acf6c9d6ce0811c487c1941b6;hpb=eb75a494900f763d9daca6a9bab5a8f01ffe552f;p=babeltrace.git diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 2e4003ca..043ac0d5 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -76,6 +76,12 @@ static int opt_stream_intersection; static struct bt_format *fmt_read; +void bt_dummy_hook(void); +void bt_lttng_live_hook(void); +void bt_ctf_hook(void); +void bt_ctf_text_hook(void); +void bt_ctf_metadata_hook(void); + static void strlower(char *str) { @@ -442,8 +448,17 @@ static int parse_options(int argc, char **argv) do { ipath = poptGetArg(pc); - if (ipath) - g_ptr_array_add(opt_input_paths, (gpointer) ipath); + if (ipath) { + gpointer ipath_copy = strdup(ipath); + + if (!ipath_copy) { + perror("Failed to copy input path"); + ret = -1; + goto end; + } + + g_ptr_array_add(opt_input_paths, ipath_copy); + } } while (ipath); if (opt_input_paths->len == 0) { ret = -EINVAL; @@ -663,6 +678,7 @@ int convert_trace(struct bt_trace_descriptor *td_write, struct bt_iter_pos *begin_pos = NULL, *end_pos = NULL; struct bt_ctf_event *ctf_event; int ret; + int error_holder = 0; sout = container_of(td_write, struct ctf_text_stream_pos, trace_descriptor); @@ -689,11 +705,18 @@ int convert_trace(struct bt_trace_descriptor *td_write, goto end; } ret = bt_iter_next(bt_ctf_get_iter(iter)); - if (ret < 0) { + if (ret == -ERANGE) { + /* + * Remember that a range (truncated packet) + * error occurred and continue. + */ + error_holder = 1; + continue; + } else if (ret < 0) { goto end; } } - ret = 0; + ret = error_holder; end: bt_ctf_iter_destroy(iter); @@ -703,6 +726,21 @@ error_iter: return ret; } +void call_plugins_hooks(void) +{ + bt_dummy_hook(); + bt_lttng_live_hook(); + bt_ctf_hook(); + bt_ctf_text_hook(); + bt_ctf_metadata_hook(); +} + +static +void free_ptr_array_element(gpointer ptr, gpointer user_data __attribute__((unused))) +{ + free(ptr); +} + int main(int argc, char **argv) { int ret, partial_error = 0, open_success = 0; @@ -711,6 +749,8 @@ int main(int argc, char **argv) struct bt_context *ctx; int i; + call_plugins_hooks(); + opt_input_paths = g_ptr_array_new(); ret = parse_options(argc, argv); @@ -855,6 +895,7 @@ end: free(opt_output_path); free(opt_debug_info_dir); free(opt_debug_info_target_prefix); + g_ptr_array_foreach(opt_input_paths, free_ptr_array_element, NULL); g_ptr_array_free(opt_input_paths, TRUE); if (partial_error) exit(EXIT_FAILURE);