X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=converter%2Fbabeltrace.c;h=56772674a8d8b629764a5b01e0ccdef49d295ad9;hp=aadeb441cf18ed81fa4a43b14d77e8d27389af72;hb=550cb17d6186e3e3ed2daa1616ceab3da2d86b5d;hpb=ec4c2b5ccbda1625a9011c27994186bf78cc9d72 diff --git a/converter/babeltrace.c b/converter/babeltrace.c index aadeb441..56772674 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -123,8 +123,8 @@ static void usage(FILE *fp) fprintf(fp, " --no-delta Do not print time delta between consecutive events\n"); fprintf(fp, " -n, --names name1<,name2,...> Print field names:\n"); fprintf(fp, " (payload OR args OR arg)\n"); - fprintf(fp, " all, scope, header, (context OR ctx)\n"); - fprintf(fp, " (payload active by default)\n"); + fprintf(fp, " none, all, scope, header, (context OR ctx)\n"); + fprintf(fp, " (default: payload,context)\n"); fprintf(fp, " -f, --fields name1<,name2,...> Print additional fields:\n"); fprintf(fp, " all, trace, trace:domain, trace:procname,\n"); fprintf(fp, " trace:vpid, loglevel.\n"); @@ -145,6 +145,7 @@ static int get_names_args(poptContext *pc) char *str, *strlist, *strctx; opt_payload_field_names = 0; + opt_context_field_names = 0; strlist = (char *) poptGetOptArg(*pc); if (!strlist) { return -EINVAL; @@ -161,7 +162,13 @@ static int get_names_args(poptContext *pc) opt_header_field_names = 1; else if (!strcmp(str, "payload") || !strcmp(str, "args") || !strcmp(str, "arg")) opt_payload_field_names = 1; - else { + else if (!strcmp(str, "none")) { + opt_all_field_names = 0; + opt_scope_field_names = 0; + opt_context_field_names = 0; + opt_header_field_names = 0; + opt_payload_field_names = 0; + } else { fprintf(stderr, "[error] unknown field name type %s\n", str); return -EINVAL; } @@ -217,6 +224,7 @@ static int parse_options(int argc, char **argv) poptReadDefaultConfig(pc, 0); /* set default */ + opt_context_field_names = 1; opt_payload_field_names = 1; while ((opt = poptGetNextOpt(pc)) != -1) { @@ -347,6 +355,7 @@ int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path, while ((node = fts_read(tree))) { int dirfd, metafd; + int closeret; if (!(node->fts_info & FTS_D)) continue; @@ -360,11 +369,13 @@ int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path, } metafd = openat(dirfd, "metadata", O_RDONLY); if (metafd < 0) { - ret = close(dirfd); - if (ret < 0) { + closeret = close(dirfd); + if (closeret < 0) { perror("close"); goto error; } + ret = -1; + continue; } else { int trace_id; @@ -383,19 +394,24 @@ int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path, node->fts_accpath, format_str, packet_seek, NULL, NULL); if (trace_id < 0) { - fprintf(stderr, "[error] [Context] opening trace \"%s\" from %s " + fprintf(stderr, "[warning] [Context] opening trace \"%s\" from %s " "for reading.\n", node->fts_accpath, path); - ret = trace_id; - goto error; + /* Allow to skip erroneous traces. */ + continue; } g_array_append_val(trace_ids, trace_id); } } - g_array_free(trace_ids, TRUE); - return ret; - error: + /* + * Return an error if no trace can be opened. + */ + if (ret == 0 && trace_ids->len == 0) { + fprintf(stderr, "[error] Cannot open any trace for reading.\n\n"); + ret = -ENOENT; + } + g_array_free(trace_ids, TRUE); return ret; } @@ -420,7 +436,7 @@ int convert_trace(struct trace_descriptor *td_write, goto error_iter; } while ((ctf_event = bt_ctf_iter_read_event(iter))) { - ret = sout->parent.event_cb(&sout->parent, ctf_event->stream); + ret = sout->parent.event_cb(&sout->parent, ctf_event->parent->stream); if (ret) { fprintf(stderr, "[error] Writing event failed.\n"); goto end;