X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=formats%2Fctf-text%2Fctf-text.c;h=5879cf4f8dfbb2a1f02216332e3dc817217a88c0;hb=b57d9fed69a66a4164994f48dffff0aa6daa8150;hp=f1ddbaf5e77b18f2f3855d9f7f2d23a708efe949;hpb=70bd0a12b09ce7f233189cf07e090fda593ebc48;p=babeltrace.git diff --git a/formats/ctf-text/ctf-text.c b/formats/ctf-text/ctf-text.c index f1ddbaf5..5879cf4f 100644 --- a/formats/ctf-text/ctf-text.c +++ b/formats/ctf-text/ctf-text.c @@ -34,7 +34,22 @@ #include #include -struct trace_descriptor *ctf_text_open_trace(const char *path, int flags); +int opt_all_field_names, + opt_scope_field_names, + opt_header_field_names, + opt_context_field_names, + opt_payload_field_names; + +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); void ctf_text_close_trace(struct trace_descriptor *descriptor); static @@ -92,6 +107,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) @@ -123,6 +172,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 @@ -136,6 +186,7 @@ int ctf_text_write_event(struct stream_pos *ppos, 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)); @@ -148,10 +199,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; @@ -162,10 +215,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; @@ -176,10 +231,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; @@ -190,10 +247,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; @@ -204,10 +263,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; @@ -225,7 +286,9 @@ error: } -struct trace_descriptor *ctf_text_open_trace(const char *path, int flags) +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) { struct ctf_text_stream_pos *pos; FILE *fp; @@ -243,7 +306,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: