Change-Id: Ib6b1f958c347c04a0697c2e1d8116773a5977bd4
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
int afb_api_so_add_plugin(const char *path)
{
int afb_api_so_add_plugin(const char *path)
{
+ int rc;
+ void *handle;
struct api_so_desc *desc;
struct AFB_plugin *(*pluginAfbV1RegisterFct) (const struct AFB_interface *interface);
struct api_so_desc *desc;
struct AFB_plugin *(*pluginAfbV1RegisterFct) (const struct AFB_interface *interface);
- desc = calloc(1, sizeof *desc);
- if (desc == NULL) {
- ERROR("out of memory");
- goto error;
- }
-
// This is a loadable library let's check if it's a plugin
// This is a loadable library let's check if it's a plugin
- desc->handle = dlopen(path, RTLD_NOW | RTLD_LOCAL);
- if (desc->handle == NULL) {
+ rc = 0;
+ handle = dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ if (handle == NULL) {
ERROR("plugin [%s] not loadable", path);
ERROR("plugin [%s] not loadable", path);
}
/* retrieves the register function */
}
/* retrieves the register function */
- pluginAfbV1RegisterFct = dlsym(desc->handle, plugin_register_function);
+ pluginAfbV1RegisterFct = dlsym(handle, plugin_register_function);
if (!pluginAfbV1RegisterFct) {
ERROR("plugin [%s] is not an AFB plugin", path);
if (!pluginAfbV1RegisterFct) {
ERROR("plugin [%s] is not an AFB plugin", path);
}
INFO("plugin [%s] is a valid AFB plugin", path);
}
INFO("plugin [%s] is a valid AFB plugin", path);
+ rc = -1;
+
+ /* allocates the description */
+ desc = calloc(1, sizeof *desc);
+ if (desc == NULL) {
+ ERROR("out of memory");
+ goto error2;
+ }
+ desc->handle = handle;
/* init the interface */
desc->interface.verbosity = 0;
/* init the interface */
desc->interface.verbosity = 0;
- dlclose(desc->handle);
-error2:
+error2:
+ dlclose(handle);
}
static int adddirs(char path[PATH_MAX], size_t end)
}
static int adddirs(char path[PATH_MAX], size_t end)
/* case of files */
if (!strstr(ent.d_name, ".so"))
continue;
/* case of files */
if (!strstr(ent.d_name, ".so"))
continue;
- afb_api_so_add_plugin(path);
+ if (afb_api_so_add_plugin(path) < 0)
+ return -1;
p = strsep(&ps, sep);
if (!p)
return 0;
p = strsep(&ps, sep);
if (!p)
return 0;
- afb_api_so_add_path(p);
- };
+ if (afb_api_so_add_path(p) < 0)
+ return -1;
+ }
- if (config->ldpaths)
- afb_api_so_add_pathset(config->ldpaths);
+ if (config->ldpaths) {
+ if (afb_api_so_add_pathset(config->ldpaths) < 0) {
+ ERROR("initialisation of plugins within %s failed", config->ldpaths);
+ exit(1);
+ }
+ }
start_items(config->items);
config->items = NULL;
start_items(config->items);
config->items = NULL;