From 92893b7b98654a16ca098aa820b1f82d927826af Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Fri, 4 Sep 2015 15:24:38 -0400 Subject: [PATCH] Create sink plugins MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- .../plugin/component-class-internal.h | 8 ++- .../plugin/component-factory-internal.h | 2 +- include/babeltrace/plugin/sink-internal.h | 11 ++++ plugins/component-factory.c | 56 ++++++++++++++++--- plugins/ctf/text/text.c | 1 - 5 files changed, 65 insertions(+), 13 deletions(-) diff --git a/include/babeltrace/plugin/component-class-internal.h b/include/babeltrace/plugin/component-class-internal.h index 500d7cf3..48cb3d9d 100644 --- a/include/babeltrace/plugin/component-class-internal.h +++ b/include/babeltrace/plugin/component-class-internal.h @@ -40,8 +40,12 @@ struct bt_component_class { }; BT_HIDDEN -struct bt_component_class *bt_component_class_create( - enum bt_component_type type, const char *name, +int bt_component_class_init( + struct bt_component_class *class, enum bt_component_type type, + const char *name); + +BT_HIDDEN +int bt_component_class_set_plugin(struct bt_component_class *class, struct bt_plugin *plugin); #endif /* BABELTRACE_PLUGIN_COMPONENT_CLASS_INTERNAL_H */ diff --git a/include/babeltrace/plugin/component-factory-internal.h b/include/babeltrace/plugin/component-factory-internal.h index 3ee24f85..d2f14478 100644 --- a/include/babeltrace/plugin/component-factory-internal.h +++ b/include/babeltrace/plugin/component-factory-internal.h @@ -41,7 +41,7 @@ struct bt_component_factory { /** Array of pointers to struct bt_plugin */ GPtrArray *plugins; /** Array of pointers to struct bt_component_class */ - GPtrArray *components; + GPtrArray *component_classes; }; #endif /* BABELTRACE_PLUGIN_COMPONENT_FACTORY_INTERNAL_H */ diff --git a/include/babeltrace/plugin/sink-internal.h b/include/babeltrace/plugin/sink-internal.h index f7b7bc4c..1bcd4ba5 100644 --- a/include/babeltrace/plugin/sink-internal.h +++ b/include/babeltrace/plugin/sink-internal.h @@ -55,4 +55,15 @@ BT_HIDDEN extern struct bt_component *bt_component_sink_create( struct bt_component_class *class, const char *name); +/** + * Allocate a sink component class. + * + * @param name Component instance name (will be copied) + * @returns A sink component class instance + */ +/* FIXME */ +BT_HIDDEN +extern struct bt_component *bt_component_class_sink_create( + struct bt_component_class *class, const char *name); + #endif /* BABELTRACE_PLUGIN_SINK_INTERNAL_H */ diff --git a/plugins/component-factory.c b/plugins/component-factory.c index 28b1e106..8dc6103d 100644 --- a/plugins/component-factory.c +++ b/plugins/component-factory.c @@ -28,6 +28,8 @@ #include #include +#include +#include #include #include #include @@ -70,6 +72,7 @@ bt_component_factory_load_file(struct bt_component_factory *factory, size_t path_len; GModule *module; struct bt_plugin *plugin; + bool is_libtool_wrapper = false, is_shared_object = false; if (!factory || !path) { ret = BT_COMPONENT_FACTORY_STATUS_INVAL; @@ -87,12 +90,13 @@ bt_component_factory_load_file(struct bt_component_factory *factory, * Check if the file ends with a known plugin file type suffix (i.e. .so * or .la on Linux). */ - if (strncmp(NATIVE_PLUGIN_SUFFIX, - path + path_len - NATIVE_PLUGIN_SUFFIX_LEN, - NATIVE_PLUGIN_SUFFIX_LEN) && - strncmp(LIBTOOL_PLUGIN_SUFFIX, + is_libtool_wrapper = !strncmp(LIBTOOL_PLUGIN_SUFFIX, path + path_len - LIBTOOL_PLUGIN_SUFFIX_LEN, - LIBTOOL_PLUGIN_SUFFIX_LEN)) { + LIBTOOL_PLUGIN_SUFFIX_LEN); + is_shared_object = !strncmp(NATIVE_PLUGIN_SUFFIX, + path + path_len - NATIVE_PLUGIN_SUFFIX_LEN, + NATIVE_PLUGIN_SUFFIX_LEN); + if (!is_shared_object && !is_libtool_wrapper) { /* Name indicates that this is not a plugin file. */ ret = BT_COMPONENT_FACTORY_STATUS_INVAL; goto end; @@ -240,8 +244,8 @@ void bt_component_factory_destroy(struct bt_object *obj) if (factory->plugins) { g_ptr_array_free(factory->plugins, TRUE); } - if (factory->components) { - g_ptr_array_free(factory->components, TRUE); + if (factory->component_classes) { + g_ptr_array_free(factory->component_classes, TRUE); } g_free(factory); } @@ -261,9 +265,9 @@ struct bt_component_factory *bt_component_factory_create(void) if (!factory->plugins) { goto error; } - factory->components = g_ptr_array_new_with_free_func( + factory->component_classes = g_ptr_array_new_with_free_func( (GDestroyNotify) bt_put); - if (!factory->components) { + if (!factory->component_classes) { goto error; } end: @@ -273,6 +277,13 @@ error: return factory; } +struct bt_object *bt_component_factory_get_components( + struct bt_component_factory *factory) +{ + assert(0); + return NULL; +} + enum bt_component_factory_status bt_component_factory_load( struct bt_component_factory *factory, const char *path) { @@ -300,3 +311,30 @@ enum bt_component_factory_status bt_component_factory_load( end: return ret; } + +enum bt_component_factory_status +bt_component_factory_register_source_component_class( + struct bt_component_factory *factory, const char *name, + bt_component_source_init_cb init) +{ + assert(0); + return BT_COMPONENT_FACTORY_STATUS_ERROR; +} + +enum bt_component_factory_status +bt_component_factory_register_sink_component_class( + struct bt_component_factory *factory, const char *name, + bt_component_sink_init_cb init) +{ + struct bt_component_class *class; + enum bt_component_factory_status ret = BT_COMPONENT_FACTORY_STATUS_OK; + + if (!factory || !name || !init) { + ret = BT_COMPONENT_FACTORY_STATUS_INVAL; + goto end; + } + + +end: + return ret; +} diff --git a/plugins/ctf/text/text.c b/plugins/ctf/text/text.c index b77c9fcd..49a6335b 100644 --- a/plugins/ctf/text/text.c +++ b/plugins/ctf/text/text.c @@ -99,7 +99,6 @@ struct ctf_text_component { bool opt_print_trace_default_fields : 1; bool opt_print_loglevel_field : 1; bool opt_print_emf_field : 1; - bool opt_print_callsite_field : 1; bool opt_print_delta_field : 1; }; -- 2.34.1