svn commit: samba r14992 - in branches/SAMBA_4_0/source/lib/util: .
jelmer at samba.org
jelmer at samba.org
Sat Apr 8 13:44:40 GMT 2006
Author: jelmer
Date: 2006-04-08 13:44:40 +0000 (Sat, 08 Apr 2006)
New Revision: 14992
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14992
Log:
Allow load_module() to be used externally
Modified:
branches/SAMBA_4_0/source/lib/util/module.c
Changeset:
Modified: branches/SAMBA_4_0/source/lib/util/module.c
===================================================================
--- branches/SAMBA_4_0/source/lib/util/module.c 2006-04-08 13:43:57 UTC (rev 14991)
+++ branches/SAMBA_4_0/source/lib/util/module.c 2006-04-08 13:44:40 UTC (rev 14992)
@@ -26,18 +26,17 @@
#include "includes.h"
#include "system/dir.h"
-static void *load_module(TALLOC_CTX *mem_ctx, const char *dir, const char *name)
+/**
+ * Obtain the init function from a shared library file
+ */
+_PUBLIC_ init_module_fn load_module(TALLOC_CTX *mem_ctx, const char *path)
{
- char *path;
void *handle;
void *init_fn;
- path = talloc_asprintf(mem_ctx, "%s/%s", dir, name);
-
handle = dlopen(path, RTLD_NOW);
if (handle == NULL) {
DEBUG(0, ("Unable to open %s: %s\n", path, dlerror()));
- talloc_free(path);
return NULL;
}
@@ -47,13 +46,10 @@
DEBUG(0, ("Unable to find init_module() in %s: %s\n", path, dlerror()));
DEBUG(1, ("Loading module '%s' failed\n", path));
dlclose(handle);
- talloc_free(path);
return NULL;
}
- talloc_free(path);
-
- return init_fn;
+ return (init_module_fn)init_fn;
}
/**
@@ -64,6 +60,7 @@
{
DIR *dir;
struct dirent *entry;
+ char *filename;
int success = 0;
init_module_fn *ret = talloc_array(mem_ctx, init_module_fn, 2);
@@ -79,12 +76,16 @@
if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, ".."))
continue;
- ret[success] = load_module(mem_ctx, path, entry->d_name);
+ filename = talloc_asprintf(mem_ctx, "%s/%s", path, entry->d_name);
+
+ ret[success] = load_module(mem_ctx, filename);
if (ret[success]) {
ret = talloc_realloc(mem_ctx, ret, init_module_fn, success+2);
success++;
ret[success] = NULL;
}
+
+ talloc_free(filename);
}
closedir(dir);
More information about the samba-cvs
mailing list