X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fcomponent-factory.c;h=8dc6103d9f530ebfa3b90ca0019ad94756b90de2;hb=92893b7b98654a16ca098aa820b1f82d927826af;hp=28b1e10618a4bfd90372d7a1dde44210ec558f50;hpb=33bceaf8b418f6f3e63371e4ba36ed552e8fe2df;p=babeltrace.git 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; +}