X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Ftext%2Fpretty%2Fpretty.c;h=ad76d8237fe503e0cb931e8575bbc744f7319ee1;hb=9d408fcae74602e3591f66623ceb85f482d948ed;hp=ece1f1e6e46db945709a8ce14651c01e1f2ed8d6;hpb=c55a9f585da53ea54ac458155fac3cdec1779d47;p=babeltrace.git diff --git a/plugins/text/pretty/pretty.c b/plugins/text/pretty/pretty.c index ece1f1e6..ad76d823 100644 --- a/plugins/text/pretty/pretty.c +++ b/plugins/text/pretty/pretty.c @@ -27,18 +27,7 @@ * SOFTWARE. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include #include #include @@ -50,6 +39,8 @@ #include "pretty.h" +GQuark stream_packet_context_quarks[STREAM_PACKET_CONTEXT_QUARKS_LEN]; + static const char *plugin_options[] = { "color", @@ -80,7 +71,15 @@ static void destroy_pretty_data(struct pretty_component *pretty) { bt_put(pretty->input_iterator); - (void) g_string_free(pretty->string, TRUE); + + if (pretty->string) { + (void) g_string_free(pretty->string, TRUE); + } + + if (pretty->tmp_string) { + (void) g_string_free(pretty->tmp_string, TRUE); + } + if (pretty->out != stdout) { int ret; @@ -106,6 +105,10 @@ struct pretty_component *create_pretty(void) if (!pretty->string) { goto error; } + pretty->tmp_string = g_string_new(""); + if (!pretty->tmp_string) { + goto error; + } end: return pretty; @@ -130,8 +133,24 @@ enum bt_component_status handle_notification(struct pretty_component *pretty, assert(pretty); - if (bt_notification_get_type(notification) == BT_NOTIFICATION_TYPE_EVENT) { + switch (bt_notification_get_type(notification)) { + case BT_NOTIFICATION_TYPE_EVENT: ret = pretty_print_event(pretty, notification); + break; + case BT_NOTIFICATION_TYPE_INACTIVITY: + fprintf(stderr, "Inactivity notification\n"); + break; + case BT_NOTIFICATION_TYPE_PACKET_BEGIN: + case BT_NOTIFICATION_TYPE_PACKET_END: + case BT_NOTIFICATION_TYPE_STREAM_BEGIN: + case BT_NOTIFICATION_TYPE_STREAM_END: + break; + case BT_NOTIFICATION_TYPE_DISCARDED_PACKETS: + case BT_NOTIFICATION_TYPE_DISCARDED_EVENTS: + ret = pretty_print_discarded_elements(pretty, notification); + break; + default: + fprintf(stderr, "Unhandled notification type\n"); } return ret; @@ -143,10 +162,13 @@ void pretty_port_connected( struct bt_private_port *self_port, struct bt_port *other_port) { + enum bt_connection_status conn_status; struct bt_private_connection *connection; struct pretty_component *pretty; static const enum bt_notification_type notif_types[] = { BT_NOTIFICATION_TYPE_EVENT, + BT_NOTIFICATION_TYPE_DISCARDED_PACKETS, + BT_NOTIFICATION_TYPE_DISCARDED_EVENTS, BT_NOTIFICATION_TYPE_SENTINEL, }; @@ -155,11 +177,9 @@ void pretty_port_connected( assert(!pretty->input_iterator); connection = bt_private_port_get_private_connection(self_port); assert(connection); - pretty->input_iterator = - bt_private_connection_create_notification_iterator(connection, - notif_types); - - if (!pretty->input_iterator) { + conn_status = bt_private_connection_create_notification_iterator( + connection, notif_types, &pretty->input_iterator); + if (conn_status != BT_CONNECTION_STATUS_OK) { pretty->error = true; } @@ -185,9 +205,6 @@ enum bt_component_status pretty_consume(struct bt_private_component *component) it_ret = bt_notification_iterator_next(it); switch (it_ret) { - case BT_NOTIFICATION_ITERATOR_STATUS_ERROR: - ret = BT_COMPONENT_STATUS_ERROR; - goto end; case BT_NOTIFICATION_ITERATOR_STATUS_END: ret = BT_COMPONENT_STATUS_END; BT_PUT(pretty->input_iterator); @@ -713,22 +730,18 @@ enum bt_component_status pretty_init( { enum bt_component_status ret; struct pretty_component *pretty = create_pretty(); - void *priv_port; if (!pretty) { ret = BT_COMPONENT_STATUS_NOMEM; goto end; } - priv_port = bt_private_component_sink_add_input_private_port(component, - "in", NULL); - if (!priv_port) { - ret = BT_COMPONENT_STATUS_NOMEM; + ret = bt_private_component_sink_add_input_private_port(component, + "in", NULL, NULL); + if (ret != BT_COMPONENT_STATUS_OK) { goto end; } - bt_put(priv_port); - pretty->out = stdout; pretty->err = stderr;