}
static
-struct bt_plugin **bt_plugin_so_create_all_from_sections(
+struct bt_plugin_set *bt_plugin_so_create_all_from_sections(
struct bt_plugin_so_shared_lib_handle *shared_lib_handle,
struct __bt_plugin_descriptor const * const *descriptors_begin,
struct __bt_plugin_descriptor const * const *descriptors_end,
size_t cc_descriptors_count;
size_t cc_descr_attrs_count;
size_t i;
- struct bt_plugin **plugins = NULL;
+ struct bt_plugin_set *plugin_set = NULL;
descriptor_count = descriptors_end - descriptors_begin;
attrs_count = attrs_end - attrs_begin;
cc_descriptors_begin, cc_descriptors_end, cc_descriptors_count);
printf_verbose("Section: Plugin component class descriptor attributes: [%p - %p], (%zu elements)\n",
cc_descr_attrs_begin, cc_descr_attrs_end, cc_descr_attrs_count);
- plugins = calloc(descriptor_count + 1, sizeof(*plugins));
- if (!plugins) {
+ plugin_set = bt_plugin_set_create();
+ if (!plugin_set) {
goto error;
}
goto error;
}
- /* Transfer ownership to the array */
- plugins[i] = plugin;
+ /* Add to plugin set */
+ bt_plugin_set_add_plugin(plugin_set, plugin);
+ bt_put(plugin);
}
goto end;
error:
- g_free(plugins);
- plugins = NULL;
+ BT_PUT(plugin_set);
end:
- return plugins;
+ return plugin_set;
}
BT_HIDDEN
-struct bt_plugin **bt_plugin_so_create_all_from_static(void)
+struct bt_plugin_set *bt_plugin_so_create_all_from_static(void)
{
- struct bt_plugin **plugins = NULL;
+ struct bt_plugin_set *plugin_set = NULL;
struct bt_plugin_so_shared_lib_handle *shared_lib_handle =
bt_plugin_so_shared_lib_handle_create(NULL);
goto end;
}
- plugins = bt_plugin_so_create_all_from_sections(shared_lib_handle,
+ plugin_set = bt_plugin_so_create_all_from_sections(shared_lib_handle,
SECTION_BEGIN(__bt_plugin_descriptors),
SECTION_END(__bt_plugin_descriptors),
SECTION_BEGIN(__bt_plugin_descriptor_attributes),
end:
BT_PUT(shared_lib_handle);
- return plugins;
+ return plugin_set;
}
BT_HIDDEN
-struct bt_plugin **bt_plugin_so_create_all_from_file(const char *path)
+struct bt_plugin_set *bt_plugin_so_create_all_from_file(const char *path)
{
size_t path_len;
- struct bt_plugin **plugins = NULL;
+ struct bt_plugin_set *plugin_set = NULL;
struct __bt_plugin_descriptor const * const *descriptors_begin = NULL;
struct __bt_plugin_descriptor const * const *descriptors_end = NULL;
struct __bt_plugin_descriptor_attribute const * const *attrs_begin = NULL;
}
/* Initialize plugin */
- plugins = bt_plugin_so_create_all_from_sections(shared_lib_handle,
+ plugin_set = bt_plugin_so_create_all_from_sections(shared_lib_handle,
descriptors_begin, descriptors_end, attrs_begin, attrs_end,
cc_descriptors_begin, cc_descriptors_end,
cc_descr_attrs_begin, cc_descr_attrs_end);
end:
BT_PUT(shared_lib_handle);
- return plugins;
+ return plugin_set;
}
static
}
BT_HIDDEN
-int bt_plugin_so_on_add_component_class(struct bt_plugin *plugin,
+void bt_plugin_so_on_add_component_class(struct bt_plugin *plugin,
struct bt_component_class *comp_class)
{
- int ret;
struct bt_plugin_so_spec_data *spec = plugin->spec_data;
assert(plugin->spec_data);
bt_get(spec->shared_lib_handle));
/* Add our custom destroy listener */
- ret = bt_component_class_add_destroy_listener(comp_class,
+ bt_component_class_add_destroy_listener(comp_class,
plugin_comp_class_destroy_listener, NULL);
- if (ret) {
- goto error;
- }
- goto end;
-
-error:
- /* Remove entry from global hash table (if exists) */
- g_hash_table_remove(comp_classes_to_shlib_handles,
- comp_class);
-
-end:
- return ret;
}