X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=formats%2Fctf-text%2Fctf-text.c;h=9ad23012d9512cc2fe4c79e8cc999a8a1850ada1;hb=82662ad4362f791f9cd7026652f60708923554f4;hp=f1c1f037a1e979d5301650bae1b39f805a9b44de;hpb=ae23d232404678391ac28a103af7be54be03aa61;p=babeltrace.git diff --git a/formats/ctf-text/ctf-text.c b/formats/ctf-text/ctf-text.c index f1c1f037..9ad23012 100644 --- a/formats/ctf-text/ctf-text.c +++ b/formats/ctf-text/ctf-text.c @@ -34,6 +34,20 @@ #include #include +int opt_all_field_names, + opt_scope_field_names, + opt_header_field_names, + opt_context_field_names, + opt_payload_field_names, + opt_trace_name; + +enum field_item { + ITEM_SCOPE, + ITEM_HEADER, + ITEM_CONTEXT, + ITEM_PAYLOAD, +}; + struct trace_descriptor *ctf_text_open_trace(const char *path, int flags, void (*move_pos_slow)(struct ctf_stream_pos *pos, size_t offset, int whence), FILE *metadata_fp); @@ -94,6 +108,40 @@ int print_field(struct definition *definition) return 1; } +static +void set_field_names_print(struct ctf_text_stream_pos *pos, enum field_item item) +{ + switch (item) { + case ITEM_SCOPE: + if (opt_all_field_names || opt_scope_field_names) + pos->print_names = 1; + else + pos->print_names = 0; + break; + case ITEM_HEADER: + if (opt_all_field_names || opt_header_field_names) + pos->print_names = 1; + else + pos->print_names = 0; + break; + case ITEM_CONTEXT: + if (opt_all_field_names || opt_context_field_names) + pos->print_names = 1; + else + pos->print_names = 0; + break; + case ITEM_PAYLOAD: + if (opt_all_field_names || opt_payload_field_names) + pos->print_names = 1; + else + pos->print_names = 0; + + break; + default: + assert(0); + } +} + static int ctf_text_write_event(struct stream_pos *ppos, struct ctf_stream *stream) @@ -125,6 +173,7 @@ int ctf_text_write_event(struct stream_pos *ppos, } if (stream->has_timestamp) { + set_field_names_print(pos, ITEM_HEADER); if (pos->print_names) fprintf(pos->fp, "timestamp = "); else @@ -138,6 +187,19 @@ int ctf_text_write_event(struct stream_pos *ppos, else fprintf(pos->fp, " "); } + if ((opt_trace_name || opt_all_field_names) && stream_class->trace->path[0] != '\0') { + set_field_names_print(pos, ITEM_HEADER); + if (pos->print_names) + fprintf(pos->fp, "trace = "); + + fprintf(pos->fp, "%s", stream_class->trace->path); + + if (pos->print_names) + fprintf(pos->fp, ", "); + else + fprintf(pos->fp, " "); + } + set_field_names_print(pos, ITEM_HEADER); if (pos->print_names) fprintf(pos->fp, "name = "); fprintf(pos->fp, "%s", g_quark_to_string(event_class->name)); @@ -150,10 +212,12 @@ int ctf_text_write_event(struct stream_pos *ppos, if (stream->stream_packet_context) { if (pos->field_nr++ != 0) fprintf(pos->fp, ","); + set_field_names_print(pos, ITEM_SCOPE); if (pos->print_names) fprintf(pos->fp, " stream.packet.context ="); field_nr_saved = pos->field_nr; pos->field_nr = 0; + set_field_names_print(pos, ITEM_CONTEXT); ret = generic_rw(ppos, &stream->stream_packet_context->p); if (ret) goto error; @@ -164,10 +228,12 @@ int ctf_text_write_event(struct stream_pos *ppos, if (babeltrace_verbose && stream->stream_event_header) { if (pos->field_nr++ != 0) fprintf(pos->fp, ","); + set_field_names_print(pos, ITEM_SCOPE); if (pos->print_names) fprintf(pos->fp, " stream.event.header ="); field_nr_saved = pos->field_nr; pos->field_nr = 0; + set_field_names_print(pos, ITEM_CONTEXT); ret = generic_rw(ppos, &stream->stream_event_header->p); if (ret) goto error; @@ -178,10 +244,12 @@ int ctf_text_write_event(struct stream_pos *ppos, if (stream->stream_event_context) { if (pos->field_nr++ != 0) fprintf(pos->fp, ","); + set_field_names_print(pos, ITEM_SCOPE); if (pos->print_names) fprintf(pos->fp, " stream.event.context ="); field_nr_saved = pos->field_nr; pos->field_nr = 0; + set_field_names_print(pos, ITEM_CONTEXT); ret = generic_rw(ppos, &stream->stream_event_context->p); if (ret) goto error; @@ -192,10 +260,12 @@ int ctf_text_write_event(struct stream_pos *ppos, if (event->event_context) { if (pos->field_nr++ != 0) fprintf(pos->fp, ","); + set_field_names_print(pos, ITEM_SCOPE); if (pos->print_names) fprintf(pos->fp, " event.context ="); field_nr_saved = pos->field_nr; pos->field_nr = 0; + set_field_names_print(pos, ITEM_CONTEXT); ret = generic_rw(ppos, &event->event_context->p); if (ret) goto error; @@ -206,10 +276,12 @@ int ctf_text_write_event(struct stream_pos *ppos, if (event->event_fields) { if (pos->field_nr++ != 0) fprintf(pos->fp, ","); + set_field_names_print(pos, ITEM_SCOPE); if (pos->print_names) fprintf(pos->fp, " event.fields ="); field_nr_saved = pos->field_nr; pos->field_nr = 0; + set_field_names_print(pos, ITEM_PAYLOAD); ret = generic_rw(ppos, &event->event_fields->p); if (ret) goto error; @@ -247,7 +319,7 @@ struct trace_descriptor *ctf_text_open_trace(const char *path, int flags, pos->fp = fp; pos->parent.rw_table = write_dispatch_table; pos->parent.event_cb = ctf_text_write_event; - pos->print_names = opt_field_names; + pos->print_names = 0; break; case O_RDONLY: default: