union {
struct {
+ bt_component_class_source_get_supported_mip_versions_method get_supported_mip_versions;
bt_component_class_source_init_method init;
bt_component_class_source_finalize_method finalize;
bt_component_class_source_query_method query;
} source;
struct {
+ bt_component_class_filter_get_supported_mip_versions_method get_supported_mip_versions;
bt_component_class_filter_init_method init;
bt_component_class_filter_finalize_method finalize;
bt_component_class_filter_query_method query;
} filter;
struct {
+ bt_component_class_sink_get_supported_mip_versions_method get_supported_mip_versions;
bt_component_class_sink_init_method init;
bt_component_class_sink_finalize_method finalize;
bt_component_class_sink_query_method query;
NULL,
descriptor->name, cur_attr->type_name,
cur_attr->type);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
goto end;
} else {
BT_LIB_LOGW(
cc_full_descr->help =
cur_cc_descr_attr->value.help;
break;
+ case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_GET_SUPPORTED_MIP_VERSIONS_METHOD:
+ switch (cc_type) {
+ case BT_COMPONENT_CLASS_TYPE_SOURCE:
+ cc_full_descr->methods.source.get_supported_mip_versions =
+ cur_cc_descr_attr->value.source_get_supported_mip_versions_method;
+ break;
+ case BT_COMPONENT_CLASS_TYPE_FILTER:
+ cc_full_descr->methods.filter.get_supported_mip_versions =
+ cur_cc_descr_attr->value.filter_get_supported_mip_versions_method;
+ break;
+ case BT_COMPONENT_CLASS_TYPE_SINK:
+ cc_full_descr->methods.sink.get_supported_mip_versions =
+ cur_cc_descr_attr->value.sink_get_supported_mip_versions_method;
+ break;
+ default:
+ abort();
+ }
+ break;
case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD:
switch (cc_type) {
case BT_COMPONENT_CLASS_TYPE_SOURCE:
cur_cc_descr_attr->comp_class_descriptor->type),
cur_cc_descr_attr->type_name,
cur_cc_descr_attr->type);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
goto end;
} else {
BT_LIB_LOGW(
descriptor->name,
cc_full_descr->descriptor->name,
cc_full_descr->descriptor->type);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
goto end;
} else {
BT_LIB_LOGW(
switch (cc_full_descr->descriptor->type) {
case BT_COMPONENT_CLASS_TYPE_SOURCE:
+ if (cc_full_descr->methods.source.get_supported_mip_versions) {
+ ret = bt_component_class_source_set_get_supported_mip_versions_method(
+ src_comp_class,
+ cc_full_descr->methods.source.get_supported_mip_versions);
+ if (ret) {
+ BT_LIB_LOGE_APPEND_CAUSE(
+ "Cannot set source component class's \"get supported MIP versions\" method.");
+ status = BT_FUNC_STATUS_MEMORY_ERROR;
+ BT_OBJECT_PUT_REF_AND_RESET(src_comp_class);
+ goto end;
+ }
+ }
+
if (cc_full_descr->methods.source.init) {
ret = bt_component_class_source_set_init_method(
src_comp_class,
break;
case BT_COMPONENT_CLASS_TYPE_FILTER:
+ if (cc_full_descr->methods.filter.get_supported_mip_versions) {
+ ret = bt_component_class_filter_set_get_supported_mip_versions_method(
+ flt_comp_class,
+ cc_full_descr->methods.filter.get_supported_mip_versions);
+ if (ret) {
+ BT_LIB_LOGE_APPEND_CAUSE(
+ "Cannot set filter component class's \"get supported MIP versions\" method.");
+ status = BT_FUNC_STATUS_MEMORY_ERROR;
+ BT_OBJECT_PUT_REF_AND_RESET(flt_comp_class);
+ goto end;
+ }
+ }
+
if (cc_full_descr->methods.filter.init) {
ret = bt_component_class_filter_set_init_method(
flt_comp_class,
break;
case BT_COMPONENT_CLASS_TYPE_SINK:
+ if (cc_full_descr->methods.sink.get_supported_mip_versions) {
+ ret = bt_component_class_sink_set_get_supported_mip_versions_method(
+ sink_comp_class,
+ cc_full_descr->methods.sink.get_supported_mip_versions);
+ if (ret) {
+ BT_LIB_LOGE_APPEND_CAUSE(
+ "Cannot set sink component class's \"get supported MIP versions\" method.");
+ status = BT_FUNC_STATUS_MEMORY_ERROR;
+ BT_OBJECT_PUT_REF_AND_RESET(sink_comp_class);
+ goto end;
+ }
+ }
+
if (cc_full_descr->methods.sink.init) {
ret = bt_component_class_sink_set_init_method(
sink_comp_class,
size_t cc_descr_attrs_count;
size_t i;
+ BT_ASSERT(shared_lib_handle);
BT_ASSERT(plugin_set_out);
*plugin_set_out = NULL;
descriptor_count = count_non_null_items_in_section(descriptors_begin, descriptors_end);
BT_LIB_LOGW_APPEND_CAUSE(
"Unknown ABI major version: abi-major=%d",
descriptor->major);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
goto error;
} else {
BT_LIB_LOGW(
goto error;
}
- if (shared_lib_handle && shared_lib_handle->path) {
+ if (shared_lib_handle->path) {
bt_plugin_set_path(plugin,
shared_lib_handle->path->str);
}
"Cannot resolve plugin symbol: path=\"%s\", "
"symbol=\"%s\"", path,
"__bt_get_end_section_plugin_descriptors");
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
} else {
BT_LIB_LOGW(
"Cannot resolve plugin symbol: path=\"%s\", "
path, "__bt_get_begin_section_plugin_descriptor_attributes",
"__bt_get_end_section_plugin_descriptor_attributes",
attrs_begin, attrs_end);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
} else {
BT_LIB_LOGW(
"Found section start or end symbol, but not both: "
path, "__bt_get_begin_section_component_class_descriptors",
"__bt_get_end_section_component_class_descriptors",
cc_descriptors_begin, cc_descriptors_end);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
} else {
BT_LIB_LOGW(
"Found section start or end symbol, but not both: "
path, "__bt_get_begin_section_component_class_descriptor_attributes",
"__bt_get_end_section_component_class_descriptor_attributes",
cc_descr_attrs_begin, cc_descr_attrs_end);
- status = BT_FUNC_STATUS_LOADING_ERROR;
+ status = BT_FUNC_STATUS_ERROR;
} else {
BT_LIB_LOGW(
"Found section start or end symbol, but not both: "