[libvirt] [PATCHv2 1/6] Add utility functions for storing uninstalled location
Daniel P. Berrange
berrange at redhat.com
Thu Apr 24 13:31:36 UTC 2014
On Tue, Mar 25, 2014 at 01:53:11PM +0530, Nehal J Wani wrote:
> diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
> index 4179147..dc3da2a 100644
> --- a/daemon/libvirtd.c
> +++ b/daemon/libvirtd.c
> @@ -1165,6 +1165,7 @@ int main(int argc, char **argv) {
> exit(EXIT_FAILURE);
> }
> *tmp = '\0';
> + virSetUninstalledDir(argv[0]);
Should check for failure
> diff --git a/src/util/virutil.c b/src/util/virutil.c
> index 733cdff..47afbc4 100644
> --- a/src/util/virutil.c
> +++ b/src/util/virutil.c
> @@ -2204,3 +2204,30 @@ void virUpdateSelfLastChanged(const char *path)
> selfLastChanged = sb.st_ctime;
> }
> }
> +
> +static char *uninstalledDir = NULL;
> +/**
> + * virSetUninstalledDir:
> + * @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)
Arg shoud be 'const char *'
> +{
> + ignore_value(VIR_STRDUP(uninstalledDir, path));
> +}
We shouldn't ignore OOM - we should propagate it.
> +
> +/**
> + * virGetUninstalledDir:
> + *
> + * 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 are relying on <configmake.h>
> + * locations.
> + */
> +char *virGetUninstalledDir(void)
Return value should be const *
ACK, but I'm squashing in
diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index f0faf1a..021fdc7 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1165,7 +1165,10 @@ int main(int argc, char **argv) {
exit(EXIT_FAILURE);
}
*tmp = '\0';
- virSetUninstalledDir(argv[0]);
+ if (virSetUninstalledDir(argv[0]) < 0) {
+ fprintf(stderr, _("%s: initialization failed\n"), argv[0]);
+ exit(EXIT_FAILURE);
+ }
char *driverdir;
if (virAsprintfQuiet(&driverdir, "%s/../../src/.libs", argv[0]) < 0 ||
virAsprintfQuiet(&cpumap, "%s/../../src/cpu/cpu_map.xml",
diff --git a/src/util/virutil.c b/src/util/virutil.c
index 244b9e9..db94a56 100644
--- a/src/util/virutil.c
+++ b/src/util/virutil.c
@@ -2213,10 +2213,13 @@ static char *uninstalledDir = NULL;
*
* Set a pointer to the path which can be accessed by all other APIs using
* virGetUninstalledDir().
+ *
+ * Returns -1 on error, 0 on success
*/
-void virSetUninstalledDir(char *path)
+int virSetUninstalledDir(const char *path)
{
- ignore_value(VIR_STRDUP(uninstalledDir, path));
+ VIR_FREE(uninstalledDir);
+ return VIR_STRDUP(uninstalledDir, path);
}
/**
@@ -2227,7 +2230,7 @@ void virSetUninstalledDir(char *path)
* the binary has been installed and paths are relying on <configmake.h>
* locations.
*/
-char *virGetUninstalledDir(void)
+const char *virGetUninstalledDir(void)
{
return uninstalledDir;
}
diff --git a/src/util/virutil.h b/src/util/virutil.h
index 3e6ba47..13db8c8 100644
--- a/src/util/virutil.h
+++ b/src/util/virutil.h
@@ -202,7 +202,7 @@ bool virIsSUID(void);
time_t virGetSelfLastChanged(void);
void virUpdateSelfLastChanged(const char *path);
-void virSetUninstalledDir(char *path);
-char *virGetUninstalledDir(void);
+int virSetUninstalledDir(const char *path) ATTRIBUTE_RETURN_CHECK;
+const char *virGetUninstalledDir(void);
#endif /* __VIR_UTIL_H__ */
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list