Created xmldb plugin api

This commit is contained in:
Olof hagsand 2017-04-09 22:53:48 +02:00
parent 4169bd8d30
commit f6b3e95100
39 changed files with 492 additions and 504 deletions

View file

@ -105,7 +105,7 @@ plugin_unload(clicon_handle h, void *handle)
* Note 'file' may be destructively modified
*/
static plghndl_t
plugin_load (clicon_handle h, char *file, int dlflags, const char *cnklbl)
plugin_load (clicon_handle h, char *file, int dlflags)
{
char *error;
void *handle = NULL;
@ -141,9 +141,9 @@ netconf_plugin_load(clicon_handle h)
int retval = -1;
char *dir;
int ndp;
struct dirent *dp;
struct dirent *dp = NULL;
int i;
char *filename;
char filename[MAXPATHLEN];
plghndl_t *handle;
if ((dir = clicon_netconf_dir(h)) == NULL){
@ -152,30 +152,26 @@ netconf_plugin_load(clicon_handle h)
}
/* Get plugin objects names from plugin directory */
if((ndp = clicon_file_dirent(dir, &dp, "(.so)$", S_IFREG, __FUNCTION__))<0)
if((ndp = clicon_file_dirent(dir, &dp, "(.so)$", S_IFREG))<0)
goto quit;
/* Load all plugins */
for (i = 0; i < ndp; i++) {
filename = chunk_sprintf(__FUNCTION__, "%s/%s", dir, dp[i].d_name);
snprintf(filename, MAXPATHLEN-1, "%s/%s", dir, dp[i].d_name);
clicon_debug(1, "DEBUG: Loading plugin '%.*s' ...",
(int)strlen(filename), filename);
if (filename == NULL) {
clicon_err(OE_UNIX, errno, "chunk");
if ((handle = plugin_load(h, filename, RTLD_NOW)) == NULL)
goto quit;
}
if ((handle = plugin_load (h, filename, RTLD_NOW, __FUNCTION__)) == NULL)
goto quit;
if ((plugins = rechunk(plugins, (nplugins+1) * sizeof (*plugins), NULL)) == NULL) {
clicon_err(OE_UNIX, errno, "chunk");
if ((plugins = realloc(plugins, (nplugins+1) * sizeof (*plugins))) == NULL) {
clicon_err(OE_UNIX, errno, "realloc");
goto quit;
}
plugins[nplugins++] = handle;
unchunk (filename);
}
retval = 0;
quit:
unchunk_group(__FUNCTION__);
if (dp)
free(dp);
return retval;
}
@ -194,8 +190,10 @@ netconf_plugin_unload(clicon_handle h)
}
for (i = 0; i < nplugins; i++)
plugin_unload(h, plugins[i]);
if (plugins)
unchunk(plugins);
if (plugins){
free(plugins);
plugins = NULL;
}
nplugins = 0;
return 0;
}