diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/module.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/util/module.c b/util/module.c index a44ec38d93..836fd444e1 100644 --- a/util/module.c +++ b/util/module.c @@ -110,7 +110,7 @@ void module_call_init(module_init_type type) } #ifdef CONFIG_MODULES -static int module_load_file(const char *fname) +static int module_load_file(const char *fname, bool mayfail) { GModule *g_module; void (*sym)(void); @@ -134,8 +134,10 @@ static int module_load_file(const char *fname) g_module = g_module_open(fname, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); if (!g_module) { - fprintf(stderr, "Failed to open module: %s\n", - g_module_error()); + if (!mayfail) { + fprintf(stderr, "Failed to open module: %s\n", + g_module_error()); + } ret = -EINVAL; goto out; } @@ -167,7 +169,7 @@ out: } #endif -bool module_load_one(const char *prefix, const char *lib_name) +bool module_load_one(const char *prefix, const char *lib_name, bool mayfail) { bool success = false; @@ -218,7 +220,7 @@ bool module_load_one(const char *prefix, const char *lib_name) for (i = 0; i < n_dirs; i++) { fname = g_strdup_printf("%s/%s%s", dirs[i], module_name, CONFIG_HOST_DSOSUF); - ret = module_load_file(fname); + ret = module_load_file(fname, mayfail); g_free(fname); fname = NULL; /* Try loading until loaded a module file */ @@ -275,13 +277,11 @@ void module_load_qom_one(const char *type) if (!type) { return; } - if (module_loaded_qom_all) { - return; - } for (i = 0; i < ARRAY_SIZE(qom_modules); i++) { if (strcmp(qom_modules[i].type, type) == 0) { module_load_one(qom_modules[i].prefix, - qom_modules[i].module); + qom_modules[i].module, + false); return; } } @@ -302,7 +302,7 @@ void module_load_qom_all(void) /* one module implementing multiple types -> load only once */ continue; } - module_load_one(qom_modules[i].prefix, qom_modules[i].module); + module_load_one(qom_modules[i].prefix, qom_modules[i].module, true); } module_loaded_qom_all = true; } |