X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=converter%2Fbabeltrace-lib.c;h=8f29c5a87d8c818c7dca8ffa2d6513bf45380ddd;hp=c96f38904fba89dd2dee7c8b0876d87ec9ec8d82;hb=312623540c466defab45503fbe0ce7ec79dcce85;hpb=b1a2f5806630289aa0b85edbb7f7c581cfa26178 diff --git a/converter/babeltrace-lib.c b/converter/babeltrace-lib.c index c96f3890..8f29c5a8 100644 --- a/converter/babeltrace-lib.c +++ b/converter/babeltrace-lib.c @@ -26,93 +26,6 @@ #include #include -static -int convert_event(struct ctf_text_stream_pos *sout, - struct ctf_file_stream *sin) -{ - struct ctf_stream *stream_class = sin->stream; - struct ctf_event *event_class; - uint64_t id = 0; - int len_index; - int ret; - - if (sin->pos.offset == EOF) - return EOF; - - /* Hide event payload struct brackets */ - sout->depth = -1; - - /* Read and print event header */ - if (stream_class->event_header) { - ret = generic_rw(&sin->pos.parent, &stream_class->event_header->p); - if (ret) - goto error; - /* lookup event id */ - len_index = struct_declaration_lookup_field_index(stream_class->event_header_decl, - g_quark_from_static_string("id")); - if (len_index >= 0) { - struct definition_integer *defint; - struct definition *field; - - field = struct_definition_get_field_from_index(stream_class->event_header, len_index); - assert(field->declaration->id == CTF_TYPE_INTEGER); - defint = container_of(field, struct definition_integer, p); - assert(defint->declaration->signedness == FALSE); - id = defint->value._unsigned; /* set id */ - } - - ret = generic_rw(&sout->parent, &stream_class->event_header->p); - if (ret) - goto error; - } - - /* Read and print stream-declared event context */ - if (stream_class->event_context) { - ret = generic_rw(&sin->pos.parent, &stream_class->event_context->p); - if (ret) - goto error; - ret = generic_rw(&sout->parent, &stream_class->event_context->p); - if (ret) - goto error; - } - - if (id >= stream_class->events_by_id->len) { - fprintf(stdout, "[error] Event id %" PRIu64 " is outside range.\n", id); - return -EINVAL; - } - event_class = g_ptr_array_index(stream_class->events_by_id, id); - if (!event_class) { - fprintf(stdout, "[error] Event id %" PRIu64 " is unknown.\n", id); - return -EINVAL; - } - - /* Read and print event-declared event context */ - if (event_class->context) { - ret = generic_rw(&sin->pos.parent, &event_class->context->p); - if (ret) - goto error; - ret = generic_rw(&sout->parent, &event_class->context->p); - if (ret) - goto error; - } - - /* Read and print event payload */ - if (event_class->fields) { - ret = generic_rw(&sin->pos.parent, &event_class->fields->p); - if (ret) - goto error; - ret = generic_rw(&sout->parent, &event_class->fields->p); - if (ret) - goto error; - } - - return 0; - -error: - fprintf(stdout, "[error] Unexpected end of stream. Either the trace data stream is corrupted or metadata description does not match data layout.\n"); - return ret; -} - static int convert_stream(struct ctf_text_stream_pos *sout, struct ctf_file_stream *sin) @@ -122,11 +35,16 @@ int convert_stream(struct ctf_text_stream_pos *sout, /* For each event, print header, context, payload */ /* TODO: order events by timestamps across streams */ for (;;) { - ret = convert_event(sout, sin); + ret = sin->pos.parent.event_cb(&sin->pos.parent, sin->stream); if (ret == EOF) break; else if (ret) { - fprintf(stdout, "[error] Printing event failed.\n"); + fprintf(stdout, "[error] Reading event failed.\n"); + goto error; + } + ret = sout->parent.event_cb(&sout->parent, sin->stream); + if (ret) { + fprintf(stdout, "[error] Writing event failed.\n"); goto error; } }