#include <sys/stat.h>
#include <gmodule.h>
#include <stdbool.h>
+#include <dirent.h>
#define NATIVE_PLUGIN_SUFFIX ".so"
#define NATIVE_PLUGIN_SUFFIX_LEN sizeof(NATIVE_PLUGIN_SUFFIX)
module = g_module_open(path, 0);
if (!module) {
- printf_error("Module open error: %s", g_module_error());
+ printf_verbose("Module open error: %s\n", g_module_error());
ret = BT_COMPONENT_FACTORY_STATUS_ERROR;
goto end;
}
goto end;
}
- factory->current_plugin = plugin;
- component_status = bt_plugin_register_component_classes(plugin,
- factory);
- factory->current_plugin = NULL;
+ BT_MOVE(factory->current_plugin, plugin);
+ component_status = bt_plugin_register_component_classes(
+ factory->current_plugin, factory);
+ BT_PUT(factory->current_plugin);
if (component_status != BT_COMPONENT_STATUS_OK) {
switch (component_status) {
case BT_COMPONENT_STATUS_NOMEM:
break;
}
- BT_PUT(plugin);
goto end;
}
end:
if (type != BT_COMPONENT_TYPE_UNKNOWN) {
if (type != bt_component_class_get_type(
component_class)) {
+ bt_put(plugin);
continue;
}
}
assert(cur_plugin_name);
if (strcmp(plugin_name, cur_plugin_name)) {
+ bt_put(plugin);
continue;
}
}
assert(cur_cc_name);
if (strcmp(component_name, cur_cc_name)) {
+ bt_put(plugin);
continue;
}
}
+ bt_put(plugin);
/* All criteria met. */
goto match;
}
}
component_class = bt_component_class_create(type, name, description,
- factory->current_plugin);
+ init, factory->current_plugin);
g_ptr_array_add(factory->component_classes, component_class);
end:
return ret;