X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Ffs-sink%2Fwriter.c;h=36e35d928819ed5ec2b131c04670f421184d6e54;hb=6ca0eb99012c3c6bbe3da1f45086368403fcac30;hp=a21413635de990c7ebe9e2fc4ef63da7309639e1;hpb=3b41eabaa1cc8171f99efa471ca16a6dc530aeca;p=babeltrace.git diff --git a/plugins/ctf/fs-sink/writer.c b/plugins/ctf/fs-sink/writer.c index a2141363..36e35d92 100644 --- a/plugins/ctf/fs-sink/writer.c +++ b/plugins/ctf/fs-sink/writer.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -46,6 +47,7 @@ #include "writer.h" #include +static gboolean empty_trace_map(gpointer key, gpointer value, gpointer user_data) { struct fs_writer *fs_writer = value; @@ -213,6 +215,7 @@ void writer_component_port_connected( { struct bt_private_connection *connection; struct writer_component *writer; + enum bt_connection_status conn_status; static const enum bt_notification_type notif_types[] = { BT_NOTIFICATION_TYPE_EVENT, BT_NOTIFICATION_TYPE_PACKET_BEGIN, @@ -227,11 +230,9 @@ void writer_component_port_connected( assert(!writer->input_iterator); connection = bt_private_port_get_private_connection(self_port); assert(connection); - writer->input_iterator = - bt_private_connection_create_notification_iterator(connection, - notif_types); - - if (!writer->input_iterator) { + conn_status = bt_private_connection_create_notification_iterator( + connection, notif_types, &writer->input_iterator); + if (conn_status != BT_CONNECTION_STATUS_OK) { writer->error = true; } @@ -280,6 +281,38 @@ end: return ret; } +static +enum bt_component_status apply_one_bool(const char *key, + struct bt_value *params, + bool *option, + bool *found) +{ + enum bt_component_status ret = BT_COMPONENT_STATUS_OK; + struct bt_value *value = NULL; + enum bt_value_status status; + bt_bool bool_val; + + value = bt_value_map_get(params, key); + if (!value) { + goto end; + } + status = bt_value_bool_get(value, &bool_val); + switch (status) { + case BT_VALUE_STATUS_OK: + break; + default: + ret = BT_COMPONENT_STATUS_ERROR; + goto end; + } + *option = (bool) bool_val; + if (found) { + *found = true; + } +end: + bt_put(value); + return ret; +} + BT_HIDDEN enum bt_component_status writer_component_init( struct bt_private_component *component, struct bt_value *params, @@ -290,22 +323,18 @@ enum bt_component_status writer_component_init( struct writer_component *writer_component = create_writer_component(); struct bt_value *value = NULL; const char *path; - void *priv_port; if (!writer_component) { 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); - value = bt_value_map_get(params, "path"); if (!value || bt_value_is_null(value) || !bt_value_is_string(value)) { fprintf(writer_component->err, @@ -327,6 +356,13 @@ enum bt_component_status writer_component_init( goto error; } + writer_component->single_trace = false; + ret = apply_one_bool("single-trace", params, + &writer_component->single_trace, NULL); + if (ret != BT_COMPONENT_STATUS_OK) { + goto end; + } + ret = bt_private_component_set_user_data(component, writer_component); if (ret != BT_COMPONENT_STATUS_OK) { goto error;