X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Ftext%2Fpretty%2Fpretty.c;h=5b66576475e62f9040a6fe5da94672a44a5d3835;hb=ecd7492f21a492b70569d5ecc1d3a808241b63f0;hp=a68321a841b7af5ebb94a0468391232638a775b6;hpb=920b1c3712f983891943ad0102f6c98cbeab66c3;p=babeltrace.git diff --git a/src/plugins/text/pretty/pretty.c b/src/plugins/text/pretty/pretty.c index a68321a8..5b665764 100644 --- a/src/plugins/text/pretty/pretty.c +++ b/src/plugins/text/pretty/pretty.c @@ -28,6 +28,7 @@ const char * const in_port_name = "in"; static void destroy_pretty_data(struct pretty_component *pretty) { + uint64_t i; if (!pretty) { goto end; } @@ -50,6 +51,13 @@ void destroy_pretty_data(struct pretty_component *pretty) perror("close output file"); } } + + for (i = 0; i < ENUMERATION_MAX_BITFLAGS_COUNT; i++) { + if (pretty->enum_bit_labels[i]) { + g_ptr_array_free(pretty->enum_bit_labels[i], true); + } + } + g_free(pretty->options.output_path); g_free(pretty); @@ -82,7 +90,6 @@ error: return NULL; } -BT_HIDDEN void pretty_finalize(bt_self_component_sink *comp) { destroy_pretty_data( @@ -123,7 +130,6 @@ bt_message_iterator_class_next_method_status handle_message( return ret; } -BT_HIDDEN bt_component_class_sink_graph_is_configured_method_status pretty_graph_is_configured(bt_self_component_sink *self_comp_sink) { @@ -162,7 +168,6 @@ end: return status; } -BT_HIDDEN bt_component_class_sink_consume_method_status pretty_consume( bt_self_component_sink *comp) { @@ -192,6 +197,8 @@ bt_component_class_sink_consume_method_status pretty_consume( bt_message_put_ref(msgs[i]); } + status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_OK; + end: for (; i < count; i++) { bt_message_put_ref(msgs[i]); @@ -310,6 +317,7 @@ struct bt_param_validation_map_value_entry_descr pretty_params[] = { { "field-loglevel", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, { "field-emf", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, { "field-callsite", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, + { "print-enum-flags", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END }; @@ -379,6 +387,9 @@ bt_component_class_initialize_method_status apply_params( apply_one_bool_with_default("verbose", params, &pretty->options.verbose, false); + apply_one_bool_with_default("print-enum-flags", params, + &pretty->options.print_enum_flags, false); + /* Names. */ value = bt_value_map_borrow_entry_value_const(params, "name-default"); if (value) { @@ -529,12 +540,11 @@ void set_use_colors(struct pretty_component *pretty) } } -BT_HIDDEN bt_component_class_initialize_method_status pretty_init( bt_self_component_sink *self_comp_sink, - bt_self_component_sink_configuration *config, + bt_self_component_sink_configuration *config __attribute__((unused)), const bt_value *params, - __attribute__((unused)) void *init_method_data) + void *init_method_data __attribute__((unused))) { bt_component_class_initialize_method_status status; bt_self_component_add_port_status add_port_status; @@ -582,6 +592,18 @@ bt_component_class_initialize_method_status pretty_init( } set_use_colors(pretty); + + if (pretty->options.print_enum_flags) { + uint64_t i; + /* + * Allocate all label arrays during the initialization of the + * component and reuse the same set of arrays for all + * enumerations. + */ + for (i = 0; i < ENUMERATION_MAX_BITFLAGS_COUNT; i++) { + pretty->enum_bit_labels[i] = g_ptr_array_new(); + } + } bt_self_component_set_data(self_comp, pretty); status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;