From bc2f42a094fe7d5b9c0ea9bb5a1fad83aca913f0 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 24 Apr 2014 16:45:49 +0100 Subject: [PATCH] Use virFileFindResource to locate driver plugins Replace virDriverModuleInitialize with virFileFindResource usage. Signed-off-by: Daniel P. Berrange --- daemon/libvirtd.c | 13 +------------ src/driver.c | 26 +++++++------------------- src/driver.h | 1 - src/libvirt_driver_modules.syms | 1 - tests/virdrivermoduletest.c | 2 -- 5 files changed, 8 insertions(+), 35 deletions(-) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index c5915bd308..e549783d40 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -1167,25 +1167,14 @@ int main(int argc, char **argv) { exit(EXIT_FAILURE); } *tmp = '\0'; - char *driverdir; - if (virAsprintfQuiet(&driverdir, "%s/../../src/.libs", argv[0]) < 0 || - virAsprintfQuiet(&cpumap, "%s/../../src/cpu/cpu_map.xml", + if (virAsprintfQuiet(&cpumap, "%s/../../src/cpu/cpu_map.xml", argv[0]) < 0) { fprintf(stderr, _("%s: initialization failed\n"), argv[0]); exit(EXIT_FAILURE); } - if (access(driverdir, R_OK) < 0) { - fprintf(stderr, _("%s: expected driver directory '%s' is missing\n"), - argv[0], driverdir); - exit(EXIT_FAILURE); - } -#ifdef WITH_DRIVER_MODULES - virDriverModuleInitialize(driverdir); -#endif cpuMapOverride(cpumap); VIR_FREE(cpumap); *tmp = '/'; - /* Must not free 'driverdir' - it is still used */ } while (1) { diff --git a/src/driver.c b/src/driver.c index 6b79b5e385..9e3a2eb1dc 100644 --- a/src/driver.c +++ b/src/driver.c @@ -26,6 +26,7 @@ #include "driver.h" #include "viralloc.h" +#include "virfile.h" #include "virlog.h" #include "virutil.h" #include "configmake.h" @@ -41,21 +42,6 @@ VIR_LOG_INIT("driver"); # include -static const char *moddir = NULL; - -void -virDriverModuleInitialize(const char *defmoddir) -{ - const char *custommoddir = virGetEnvBlockSUID("LIBVIRT_DRIVER_DIR"); - if (custommoddir) - moddir = custommoddir; - else if (defmoddir) - moddir = defmoddir; - else - moddir = DEFAULT_DRIVER_DIR; - VIR_DEBUG("Module dir %s", moddir); -} - void * virDriverLoadModule(const char *name) { @@ -63,12 +49,14 @@ virDriverLoadModule(const char *name) void *handle = NULL; int (*regsym)(void); - if (moddir == NULL) - virDriverModuleInitialize(NULL); - VIR_DEBUG("Module load %s", name); - if (virAsprintfQuiet(&modfile, "%s/libvirt_driver_%s.so", moddir, name) < 0) + if (!(modfile = virFileFindResourceFull(name, + "libvirt_driver_", + ".so", + "src/.libs", + LIBDIR "/libvirt/connection-driver", + "LIBVIRT_DRIVER_DIR"))) return NULL; if (access(modfile, R_OK) < 0) { diff --git a/src/driver.h b/src/driver.h index e66fc7ae5f..729e7438c8 100644 --- a/src/driver.h +++ b/src/driver.h @@ -2164,7 +2164,6 @@ int virRegisterNWFilterDriver(virNWFilterDriverPtr) ATTRIBUTE_RETURN_CHECK; # ifdef WITH_LIBVIRTD int virRegisterStateDriver(virStateDriverPtr) ATTRIBUTE_RETURN_CHECK; # endif -void virDriverModuleInitialize(const char *defmoddir); void *virDriverLoadModule(const char *name); #endif /* __VIR_DRIVER_H__ */ diff --git a/src/libvirt_driver_modules.syms b/src/libvirt_driver_modules.syms index 35ac1de44e..f9d0ee9b97 100644 --- a/src/libvirt_driver_modules.syms +++ b/src/libvirt_driver_modules.syms @@ -4,7 +4,6 @@ # driver.h virDriverLoadModule; -virDriverModuleInitialize; # Let emacs know we want case-insensitive sorting # Local Variables: diff --git a/tests/virdrivermoduletest.c b/tests/virdrivermoduletest.c index 4203f5bab6..840fc280f6 100644 --- a/tests/virdrivermoduletest.c +++ b/tests/virdrivermoduletest.c @@ -65,8 +65,6 @@ mymain(void) ret = -1; \ } while (0) - virDriverModuleInitialize(abs_builddir "/../src/.libs"); - #ifdef WITH_NETWORK # define USE_NETWORK "network" TEST("network", NULL);