X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Fplugin%2Fplugin.c;h=8f2f6da347cb38792b108ed1c8ee3d6cb8c75dbf;hb=b14c7bf11ddef302870c4d1abf86d3a98f74cb08;hp=1cef5123b071810d54ee1ea76882a1cfb3b963d9;hpb=037cbd1ac687161b52b6e1c5fd49dcd9d79a878f;p=babeltrace.git diff --git a/src/lib/plugin/plugin.c b/src/lib/plugin/plugin.c index 1cef5123..8f2f6da3 100644 --- a/src/lib/plugin/plugin.c +++ b/src/lib/plugin/plugin.c @@ -33,6 +33,7 @@ #include "common/common.h" #include #include +#include #include "lib/graph/component-class.h" #include #include @@ -46,8 +47,10 @@ #include "plugin.h" #include "plugin-so.h" +#include "lib/func-status.h" -#define PYTHON_PLUGIN_PROVIDER_FILENAME "libbabeltrace2-python-plugin-provider." G_MODULE_SUFFIX +#define PYTHON_PLUGIN_PROVIDER_FILENAME "babeltrace2-python-plugin-provider." G_MODULE_SUFFIX +#define PYTHON_PLUGIN_PROVIDER_DIR BABELTRACE_PLUGIN_PROVIDERS_DIR #define PYTHON_PLUGIN_PROVIDER_SYM_NAME bt_plugin_python_create_all_from_file #define PYTHON_PLUGIN_PROVIDER_SYM_NAME_STR G_STRINGIFY(PYTHON_PLUGIN_PROVIDER_SYM_NAME) @@ -57,32 +60,52 @@ #include static -enum bt_plugin_status (*bt_plugin_python_create_all_from_file_sym)( +int (*bt_plugin_python_create_all_from_file_sym)( const char *path, bool fail_on_load_error, struct bt_plugin_set **plugin_set_out) = bt_plugin_python_create_all_from_file; static -void init_python_plugin_provider(void) +enum bt_plugin_status init_python_plugin_provider(void) { } #else /* BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT */ static GModule *python_plugin_provider_module; static -enum bt_plugin_status (*bt_plugin_python_create_all_from_file_sym)( - const char *path, bool fail_on_load_error, +int (*bt_plugin_python_create_all_from_file_sym)( + const char *path, bool fail_on_load_error, struct bt_plugin_set **plugin_set_out); static -void init_python_plugin_provider(void) { +int init_python_plugin_provider(void) { + int status = BT_FUNC_STATUS_OK; + const char *provider_dir_envvar; + static const char * const provider_dir_envvar_name = "LIBBABELTRACE2_PLUGIN_PROVIDER_DIR"; + char *provider_path = NULL; + if (bt_plugin_python_create_all_from_file_sym != NULL) { - return; + goto end; } BT_LOGI_STR("Loading Python plugin provider module."); - python_plugin_provider_module = - g_module_open(PYTHON_PLUGIN_PROVIDER_FILENAME, 0); + + provider_dir_envvar = getenv(provider_dir_envvar_name); + if (provider_dir_envvar) { + provider_path = g_build_filename(provider_dir_envvar, + PYTHON_PLUGIN_PROVIDER_FILENAME, NULL); + BT_LOGI("Using `%s` environment variable to find the Python " + "plugin provider: path=\"%s\"", provider_dir_envvar_name, + provider_path); + } else { + provider_path = g_build_filename(PYTHON_PLUGIN_PROVIDER_DIR, + PYTHON_PLUGIN_PROVIDER_FILENAME, NULL); + BT_LOGI("Using default path (`%s` environment variable is not " + "set) to find the Python plugin provider: path=\"%s\"", + provider_dir_envvar_name, provider_path); + } + + python_plugin_provider_module = g_module_open(provider_path, 0); if (!python_plugin_provider_module) { /* * This is not an error. The whole point of having an @@ -90,8 +113,8 @@ void init_python_plugin_provider(void) { * missing and the Babeltrace library still works. */ BT_LOGI("Cannot open `%s`: %s: continuing without Python plugin support.", - PYTHON_PLUGIN_PROVIDER_FILENAME, g_module_error()); - return; + provider_path, g_module_error()); + goto end; } if (!g_module_symbol(python_plugin_provider_module, @@ -102,17 +125,24 @@ void init_python_plugin_provider(void) { * plugin provider shared object, we expect this symbol * to exist. */ - BT_LOGE("Cannot find the Python plugin provider loading symbol: " + BT_LIB_LOGE_APPEND_CAUSE( + "Cannot find the Python plugin provider loading symbol: " "%s: continuing without Python plugin support: " "file=\"%s\", symbol=\"%s\"", g_module_error(), - PYTHON_PLUGIN_PROVIDER_FILENAME, + provider_path, PYTHON_PLUGIN_PROVIDER_SYM_NAME_STR); - return; + status = BT_FUNC_STATUS_ERROR; + goto end; } BT_LOGI("Loaded Python plugin provider module: addr=%p", python_plugin_provider_module); + +end: + g_free(provider_path); + + return status; } __attribute__((destructor)) static @@ -121,6 +151,10 @@ void fini_python_plugin_provider(void) { BT_LOGI("Unloading Python plugin provider module."); if (!g_module_close(python_plugin_provider_module)) { + /* + * This occurs when the library is finalized: do + * NOT append an error cause. + */ BT_LOGE("Failed to close the Python plugin provider module: %s.", g_module_error()); } @@ -130,21 +164,21 @@ void fini_python_plugin_provider(void) { } #endif -uint64_t bt_plugin_set_get_plugin_count(struct bt_plugin_set *plugin_set) +uint64_t bt_plugin_set_get_plugin_count(const struct bt_plugin_set *plugin_set) { - BT_ASSERT_PRE_NON_NULL(plugin_set, "Plugin set"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin_set, "Plugin set"); return (uint64_t) plugin_set->plugins->len; } const struct bt_plugin *bt_plugin_set_borrow_plugin_by_index_const( const struct bt_plugin_set *plugin_set, uint64_t index) { - BT_ASSERT_PRE_NON_NULL(plugin_set, "Plugin set"); - BT_ASSERT_PRE_VALID_INDEX(index, plugin_set->plugins->len); + BT_ASSERT_PRE_DEV_NON_NULL(plugin_set, "Plugin set"); + BT_ASSERT_PRE_DEV_VALID_INDEX(index, plugin_set->plugins->len); return g_ptr_array_index(plugin_set->plugins, index); } -enum bt_plugin_status bt_plugin_find_all_from_static( +enum bt_plugin_find_all_from_static_status bt_plugin_find_all_from_static( bt_bool fail_on_load_error, const struct bt_plugin_set **plugin_set_out) { @@ -153,11 +187,11 @@ enum bt_plugin_status bt_plugin_find_all_from_static( (void *) plugin_set_out); } -enum bt_plugin_status bt_plugin_find_all_from_file(const char *path, - bt_bool fail_on_load_error, +enum bt_plugin_find_all_from_file_status bt_plugin_find_all_from_file( + const char *path, bt_bool fail_on_load_error, const struct bt_plugin_set **plugin_set_out) { - enum bt_plugin_status status; + enum bt_plugin_find_all_from_file_status status; BT_ASSERT_PRE_NON_NULL(path, "Path"); BT_ASSERT_PRE_NON_NULL(path, "Plugin set (output)"); @@ -166,7 +200,7 @@ enum bt_plugin_status bt_plugin_find_all_from_file(const char *path, /* Try shared object plugins */ status = bt_plugin_so_create_all_from_file(path, fail_on_load_error, (void *) plugin_set_out); - if (status == BT_PLUGIN_STATUS_OK) { + if (status == BT_FUNC_STATUS_OK) { BT_ASSERT(*plugin_set_out); BT_ASSERT((*plugin_set_out)->plugins->len > 0); goto end; @@ -175,35 +209,49 @@ enum bt_plugin_status bt_plugin_find_all_from_file(const char *path, goto end; } - BT_ASSERT(status == BT_PLUGIN_STATUS_NOT_FOUND); + BT_ASSERT(status == BT_FUNC_STATUS_NOT_FOUND); BT_ASSERT(!*plugin_set_out); /* Try Python plugins if support is available */ - init_python_plugin_provider(); + status = init_python_plugin_provider(); + if (status < 0) { + /* init_python_plugin_provider() logs errors */ + goto end; + } + + BT_ASSERT(status == BT_FUNC_STATUS_OK); + status = BT_FUNC_STATUS_NOT_FOUND; + if (bt_plugin_python_create_all_from_file_sym) { + /* Python plugin provider exists */ status = bt_plugin_python_create_all_from_file_sym(path, fail_on_load_error, (void *) plugin_set_out); - if (status == BT_PLUGIN_STATUS_OK) { + if (status == BT_FUNC_STATUS_OK) { BT_ASSERT(*plugin_set_out); BT_ASSERT((*plugin_set_out)->plugins->len > 0); goto end; } else if (status < 0) { + /* + * bt_plugin_python_create_all_from_file_sym() + * handles `fail_on_load_error` itself, so this + * is a "real" error. + */ BT_ASSERT(!*plugin_set_out); goto end; } - BT_ASSERT(status == BT_PLUGIN_STATUS_NOT_FOUND); + BT_ASSERT(status == BT_FUNC_STATUS_NOT_FOUND); BT_ASSERT(!*plugin_set_out); } end: - if (status == BT_PLUGIN_STATUS_OK) { + if (status == BT_FUNC_STATUS_OK) { BT_LOGI("Created %u plugins from file: " "path=\"%s\", count=%u, plugin-set-addr=%p", (*plugin_set_out)->plugins->len, path, (*plugin_set_out)->plugins->len, *plugin_set_out); - } else if (status == BT_PLUGIN_STATUS_NOT_FOUND) { + } else if (status == BT_FUNC_STATUS_NOT_FOUND) { BT_LOGI("Found no plugins in file: path=\"%s\"", path); } @@ -215,7 +263,7 @@ static void destroy_gstring(void *data) g_string_free(data, TRUE); } -enum bt_plugin_status bt_plugin_find(const char *plugin_name, +enum bt_plugin_find_status bt_plugin_find(const char *plugin_name, bt_bool fail_on_load_error, const struct bt_plugin **plugin_out) { const char *system_plugin_dir; @@ -225,7 +273,7 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, const struct bt_plugin_set *plugin_set = NULL; GPtrArray *dirs = NULL; int ret; - enum bt_plugin_status status = BT_PLUGIN_STATUS_OK; + int status = BT_FUNC_STATUS_OK; size_t i, j; BT_ASSERT_PRE_NON_NULL(plugin_name, "Name"); @@ -234,8 +282,8 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, "name=\"%s\"", plugin_name); dirs = g_ptr_array_new_with_free_func((GDestroyNotify) destroy_gstring); if (!dirs) { - BT_LOGE_STR("Failed to allocate a GPtrArray."); - status = BT_PLUGIN_STATUS_NOMEM; + BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate a GPtrArray."); + status = BT_FUNC_STATUS_MEMORY_ERROR; goto end; } @@ -257,8 +305,9 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, if (envvar) { ret = bt_common_append_plugin_path_dirs(envvar, dirs); if (ret) { - BT_LOGE_STR("Failed to append plugin path to array of directories."); - status = BT_PLUGIN_STATUS_NOMEM; + BT_LIB_LOGE_APPEND_CAUSE( + "Failed to append plugin path to array of directories."); + status = BT_FUNC_STATUS_MEMORY_ERROR; goto end; } } @@ -268,8 +317,8 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, GString *home_plugin_dir_str = g_string_new(home_plugin_dir); if (!home_plugin_dir_str) { - BT_LOGE_STR("Failed to allocate a GString."); - status = BT_PLUGIN_STATUS_NOMEM; + BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate a GString."); + status = BT_FUNC_STATUS_MEMORY_ERROR; goto end; } @@ -282,8 +331,8 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, g_string_new(system_plugin_dir); if (!system_plugin_dir_str) { - BT_LOGE_STR("Failed to allocate a GString."); - status = BT_PLUGIN_STATUS_NOMEM; + BT_LIB_LOGE_APPEND_CAUSE("Failed to allocate a GString."); + status = BT_FUNC_STATUS_MEMORY_ERROR; goto end; } @@ -311,14 +360,14 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, if (status < 0) { BT_ASSERT(!plugin_set); goto end; - } else if (status == BT_PLUGIN_STATUS_NOT_FOUND) { + } else if (status == BT_FUNC_STATUS_NOT_FOUND) { BT_ASSERT(!plugin_set); BT_LOGI("No plugins found in directory: path=\"%s\"", dir->str); continue; } - BT_ASSERT(status == BT_PLUGIN_STATUS_OK); + BT_ASSERT(status == BT_FUNC_STATUS_OK); BT_ASSERT(plugin_set); for (j = 0; j < plugin_set->plugins->len; j++) { @@ -345,15 +394,13 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, if (status < 0) { BT_ASSERT(!plugin_set); goto end; - } - - if (status == BT_PLUGIN_STATUS_NOT_FOUND) { + } else if (status == BT_FUNC_STATUS_NOT_FOUND) { BT_ASSERT(!plugin_set); BT_LOGI_STR("No plugins found in built-in plugins."); goto end; } - BT_ASSERT(status == BT_PLUGIN_STATUS_OK); + BT_ASSERT(status == BT_FUNC_STATUS_OK); BT_ASSERT(plugin_set); for (j = 0; j < plugin_set->plugins->len; j++) { @@ -370,7 +417,7 @@ enum bt_plugin_status bt_plugin_find(const char *plugin_name, } } - status = BT_PLUGIN_STATUS_NOT_FOUND; + status = BT_FUNC_STATUS_NOT_FOUND; end: free(home_plugin_dir); @@ -380,10 +427,10 @@ end: g_ptr_array_free(dirs, TRUE); } - if (status == BT_PLUGIN_STATUS_OK) { + if (status == BT_FUNC_STATUS_OK) { BT_LIB_LOGI("Found plugin in standard directories and built-in plugins: " "%!+l", plugin); - } else if (status == BT_PLUGIN_STATUS_NOT_FOUND) { + } else if (status == BT_FUNC_STATUS_NOT_FOUND) { BT_LOGI("No plugin found in standard directories and built-in plugins: " "name=\"%s\"", plugin_name); } @@ -396,7 +443,7 @@ static struct { struct bt_plugin_set *plugin_set; bool recurse; bool fail_on_load_error; - enum bt_plugin_status status; + int status; } append_all_from_dir_info = { .lock = PTHREAD_MUTEX_INITIALIZER }; @@ -428,7 +475,7 @@ int nftw_append_all_from_dir(const char *file, bt_plugin_find_all_from_file(file, append_all_from_dir_info.fail_on_load_error, &plugins_from_file); - if (append_all_from_dir_info.status == BT_PLUGIN_STATUS_OK) { + if (append_all_from_dir_info.status == BT_FUNC_STATUS_OK) { size_t j; BT_ASSERT(plugins_from_file); @@ -460,7 +507,7 @@ int nftw_append_all_from_dir(const char *file, */ BT_ASSERT(!plugins_from_file); BT_ASSERT(append_all_from_dir_info.status == - BT_PLUGIN_STATUS_NOT_FOUND); + BT_FUNC_STATUS_NOT_FOUND); break; } case FTW_DNR: @@ -478,13 +525,12 @@ end: } static -enum bt_plugin_status bt_plugin_create_append_all_from_dir( - struct bt_plugin_set *plugin_set, const char *path, - bt_bool recurse, bt_bool fail_on_load_error) +int bt_plugin_create_append_all_from_dir(struct bt_plugin_set *plugin_set, + const char *path, bt_bool recurse, bt_bool fail_on_load_error) { int nftw_flags = FTW_PHYS; int ret; - enum bt_plugin_status status; + int status; struct stat sb; BT_ASSERT(plugin_set); @@ -503,14 +549,18 @@ enum bt_plugin_status bt_plugin_create_append_all_from_dir( BT_LOGW_ERRNO("Cannot open directory", ": path=\"%s\", recurse=%d", path, recurse); - status = BT_PLUGIN_STATUS_ERROR; + (void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN( + "Babeltrace library", + "Cannot open directory: path=\"%s\", recurse=%d", + path, recurse); + status = BT_FUNC_STATUS_ERROR; goto end; } pthread_mutex_lock(&append_all_from_dir_info.lock); append_all_from_dir_info.plugin_set = plugin_set; append_all_from_dir_info.recurse = recurse; - append_all_from_dir_info.status = BT_PLUGIN_STATUS_OK; + append_all_from_dir_info.status = BT_FUNC_STATUS_OK; append_all_from_dir_info.fail_on_load_error = fail_on_load_error; ret = nftw(path, nftw_append_all_from_dir, APPEND_ALL_FROM_DIR_NFDOPEN_MAX, nftw_flags); @@ -518,45 +568,46 @@ enum bt_plugin_status bt_plugin_create_append_all_from_dir( status = append_all_from_dir_info.status; pthread_mutex_unlock(&append_all_from_dir_info.lock); if (ret) { - BT_LOGW_ERRNO("Failed to walk directory", + BT_LIB_LOGW_APPEND_CAUSE("Failed to walk directory", ": path=\"%s\", recurse=%d", path, recurse); - status = BT_PLUGIN_STATUS_ERROR; + status = BT_FUNC_STATUS_ERROR; goto end; } - if (status == BT_PLUGIN_STATUS_NOT_FOUND) { + if (status == BT_FUNC_STATUS_NOT_FOUND) { /* * We're just appending in this function; even if * nothing was found, it's still okay from the caller's * perspective. */ - status = BT_PLUGIN_STATUS_OK; + status = BT_FUNC_STATUS_OK; } end: return status; } -enum bt_plugin_status bt_plugin_find_all_from_dir(const char *path, - bt_bool recurse, bt_bool fail_on_load_error, +enum bt_plugin_find_all_from_dir_status bt_plugin_find_all_from_dir( + const char *path, bt_bool recurse, bt_bool fail_on_load_error, const struct bt_plugin_set **plugin_set_out) { - enum bt_plugin_status status = BT_PLUGIN_STATUS_OK; + enum bt_plugin_find_all_from_dir_status status = + BT_FUNC_STATUS_OK; BT_ASSERT_PRE_NON_NULL(plugin_set_out, "Plugin set (output)"); BT_LOGI("Creating all plugins in directory: path=\"%s\", recurse=%d", path, recurse); *plugin_set_out = bt_plugin_set_create(); if (!*plugin_set_out) { - BT_LOGE_STR("Cannot create empty plugin set."); - status = BT_PLUGIN_STATUS_NOMEM; + BT_LIB_LOGE_APPEND_CAUSE("Cannot create empty plugin set."); + status = BT_FUNC_STATUS_MEMORY_ERROR; goto error; } /* * Append found plugins to array (never returns - * `BT_PLUGIN_STATUS_NOT_FOUND`) + * `BT_FUNC_STATUS_NOT_FOUND`) */ status = bt_plugin_create_append_all_from_dir((void *) *plugin_set_out, path, recurse, fail_on_load_error); @@ -565,18 +616,19 @@ enum bt_plugin_status bt_plugin_find_all_from_dir(const char *path, * bt_plugin_create_append_all_from_dir() handles * `fail_on_load_error`, so this is a "real" error. */ - BT_LOGW("Cannot append plugins found in directory: " + BT_LIB_LOGE_APPEND_CAUSE( + "Cannot append plugins found in directory: " "path=\"%s\", status=%s", - path, bt_plugin_status_string(status)); + path, bt_common_func_status_string(status)); goto error; } - BT_ASSERT(status == BT_PLUGIN_STATUS_OK); + BT_ASSERT(status == BT_FUNC_STATUS_OK); if ((*plugin_set_out)->plugins->len == 0) { /* Nothing was appended: not found */ BT_LOGI("No plugins found in directory: path=\"%s\"", path); - status = BT_PLUGIN_STATUS_NOT_FOUND; + status = BT_FUNC_STATUS_NOT_FOUND; goto error; } @@ -586,7 +638,7 @@ enum bt_plugin_status bt_plugin_find_all_from_dir(const char *path, goto end; error: - BT_ASSERT(status != BT_PLUGIN_STATUS_OK); + BT_ASSERT(status != BT_FUNC_STATUS_OK); BT_OBJECT_PUT_REF_AND_RESET(*plugin_set_out); end: @@ -595,31 +647,31 @@ end: const char *bt_plugin_get_name(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return plugin->info.name_set ? plugin->info.name->str : NULL; } const char *bt_plugin_get_author(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return plugin->info.author_set ? plugin->info.author->str : NULL; } const char *bt_plugin_get_license(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return plugin->info.license_set ? plugin->info.license->str : NULL; } const char *bt_plugin_get_path(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return plugin->info.path_set ? plugin->info.path->str : NULL; } const char *bt_plugin_get_description(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return plugin->info.description_set ? plugin->info.description->str : NULL; } @@ -631,7 +683,7 @@ enum bt_property_availability bt_plugin_get_version(const struct bt_plugin *plug enum bt_property_availability avail = BT_PROPERTY_AVAILABILITY_AVAILABLE; - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); if (!plugin->info.version_set) { BT_LIB_LOGD("Plugin's version is not set: %!+l", plugin); @@ -661,19 +713,19 @@ end: uint64_t bt_plugin_get_source_component_class_count(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return (uint64_t) plugin->src_comp_classes->len; } uint64_t bt_plugin_get_filter_component_class_count(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return (uint64_t) plugin->flt_comp_classes->len; } uint64_t bt_plugin_get_sink_component_class_count(const struct bt_plugin *plugin) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); return (uint64_t) plugin->sink_comp_classes->len; } @@ -682,8 +734,8 @@ struct bt_component_class *borrow_component_class_by_index( const struct bt_plugin *plugin, GPtrArray *comp_classes, uint64_t index) { - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); - BT_ASSERT_PRE_VALID_INDEX(index, comp_classes->len); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_VALID_INDEX(index, comp_classes->len); return g_ptr_array_index(comp_classes, index); } @@ -719,8 +771,8 @@ struct bt_component_class *borrow_component_class_by_name( struct bt_component_class *comp_class = NULL; size_t i; - BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); - BT_ASSERT_PRE_NON_NULL(name, "Name"); + BT_ASSERT_PRE_DEV_NON_NULL(plugin, "Plugin"); + BT_ASSERT_PRE_DEV_NON_NULL(name, "Name"); for (i = 0; i < comp_classes->len; i++) { struct bt_component_class *comp_class_candidate =