On 03/23/2014 02:22 AM, Nehal J Wani wrote:
When libvirtd is run from a build directory without being installed,
it
should not depend on files from a libvirt package installed in the
system. Currently, APIs defined in src/ don't know whether libvirtd
is being run from the build dir or the installed dir. The following
additions provide the functionality to do so:
src/util/virutil.c
*virSetUninstalledDir
*virGetUninstalledDir
Example usage (utility = lxc|iohelper):
char *path_tmp = virGetUninstalledDir();
if (path_tmp)
/* do stuff with ("%s/../../src/libvirt_<utility>", path_tmp) */
else
/* do stuff with (LIBEXECDIR "/libvirt_<utility>") */
Hmm - we already have virFDStreamSetIOHelper() for overriding the
location of libvirt_iohelper, but I like your approach as something a
bit more generic. Do we really need both mechanisms, or should your
series include a followup patch to nuke virFDStreamSetIOHelper() and
instead teach the testsuite to use your new functions (that is,
testutils.c should probably call virSetUninstalledDir).
I'm not sure if there is a better name for the concept (I'm a bit
biased, because I helped you design this on IRC) - so I'll wait for
other reviewers.
+static char *uninstalledDir = NULL;
+/**
+ * virSetUninstalledDir:
+ * @path: location from which libvirtd is running without
+ * installation
Grammar is awkward. How about:
@path: directory containing an uninstalled binary, for use in locating
other uninstalled files
+ *
+ * Set a pointer to the path which can be accessed by all
+ * other APIs using virGetUninstalledDir().
+ */
+void virSetUninstalledDir(char *path)
+{
+ uninstalledDir = path;
Dangerous to not strdup this argument - if the caller modifies the
argument (and libvirtd.c main() DOES modify the argument) then you are
not pointing to the same string that you thought you were.
+}
+
+/**
+ * virGetUninstalledDir:
+ *
+ * If libvirtd is running without installation, return the
+ * path from which it was invoked, otherwise, return NULL
How about:
If libvirtd (or other binary) is running uninstalled from a build tree,
return the directory containing the binary. A NULL return implies that
the binary has been installed and paths relying on <configmake.h> locations.
Series is incomplete. It's not worth adding the new function unless you
also have followup patches that use the new function.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org