- enum bt_plugin_status status = BT_PLUGIN_STATUS_OK;
- struct bt_component_class *comp_class_dup = NULL;
- int comp_class_index = -1;
-
- if (!plugin) {
- BT_LOGW_STR("Invalid parameter: plugin is NULL.");
- goto error;
- }
-
- if (!comp_class) {
- BT_LOGW_STR("Invalid parameter: component class is NULL.");
- goto error;
- }
-
- if (plugin->frozen) {
- BT_LOGW("Invalid parameter: plugin is frozen: "
- "addr=%p, name=\"%s\"", plugin,
- bt_plugin_get_name(plugin));
- goto error;
- }
-
- /* Check for duplicate */
- comp_class_dup = bt_plugin_get_component_class_by_name_and_type(plugin,
- bt_component_class_get_name(comp_class),
- bt_component_class_get_type(comp_class));
- if (comp_class_dup) {
- BT_LOGW("Invalid parameter: a component class with this name and type already exists in the plugin: "
- "plugin-addr=%p, plugin-name=\"%s\", plugin-path=\"%s\", "
- "comp-class-name=\"%s\", comp-class-type=%s",
- plugin, bt_plugin_get_name(plugin),
- bt_plugin_get_path(plugin),
- bt_component_class_get_name(comp_class),
- bt_component_class_type_string(
- bt_component_class_get_type(comp_class)));
- goto error;
- }
-
- /* Add new component class */
- comp_class_index = plugin->comp_classes->len;
- g_ptr_array_add(plugin->comp_classes, bt_object_get_ref(comp_class));
-
- /* Special case for a shared object plugin */
- if (plugin->type == BT_PLUGIN_TYPE_SO) {
- bt_plugin_so_on_add_component_class(plugin, comp_class);
- }
-
- BT_LOGD("Added component class to plugin: "
- "plugin-addr=%p, plugin-name=\"%s\", plugin-path=\"%s\", "
- "comp-class-addr=%p, comp-class-name=\"%s\", comp-class-type=%s",
- plugin, bt_plugin_get_name(plugin),
- bt_plugin_get_path(plugin),
- comp_class,
- bt_component_class_get_name(comp_class),
- bt_component_class_type_string(
- bt_component_class_get_type(comp_class)));
- goto end;
-
-error:
- /* Remove entry from plugin's component classes (if added) */
- if (comp_class_index >= 0) {
- g_ptr_array_remove_index(plugin->comp_classes,
- comp_class_index);
- }