From: Tobias Brunner Date: Mon, 1 Mar 2010 15:07:07 +0000 (+0100) Subject: Enabling the plugin loader to be able to load plugins without explicitly loading... X-Git-Tag: 4.4.0~266 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3724668b3d37df67f687cb718ded7fa87c748deb;p=thirdparty%2Fstrongswan.git Enabling the plugin loader to be able to load plugins without explicitly loading a shared object file first. --- diff --git a/src/libstrongswan/plugins/plugin_loader.c b/src/libstrongswan/plugins/plugin_loader.c index fb970b4d78..5dfeb873fa 100644 --- a/src/libstrongswan/plugins/plugin_loader.c +++ b/src/libstrongswan/plugins/plugin_loader.c @@ -67,6 +67,40 @@ static char* sanitize(char *str) return str; } +#ifdef MONOLITHIC +/** + * load a single plugin in monolithic mode + */ +static plugin_t* load_plugin(private_plugin_loader_t *this, + char *path, char *name) +{ + char create[128]; + plugin_t *plugin; + plugin_constructor_t constructor; + + if (snprintf(create, sizeof(create), "%s_plugin_create", + name) >= sizeof(create)) + { + return NULL; + } + sanitize(create); + constructor = dlsym(RTLD_DEFAULT, create); + if (constructor == NULL) + { + DBG1("plugin '%s': failed to load - %s not found", name, create); + return NULL; + } + plugin = constructor(); + if (plugin == NULL) + { + DBG1("plugin '%s': failed to load - %s returned NULL", name, create); + return NULL; + } + DBG2("plugin '%s': loaded successfully", name); + + return plugin; +} +#else /** * load a single plugin */ @@ -131,6 +165,7 @@ static plugin_t* load_plugin(private_plugin_loader_t *this, * the modules to keep loaded until leak report */ return plugin; } +#endif /** * Implementation of plugin_loader_t.load_plugins. @@ -141,10 +176,12 @@ static bool load(private_plugin_loader_t *this, char *path, char *list) char *token; bool critical_failed = FALSE; +#ifndef MONOLITHIC if (path == NULL) { path = PLUGINDIR; } +#endif enumerator = enumerator_create_token(list, " ", " "); while (!critical_failed && enumerator->enumerate(enumerator, &token))