src/util/virfile.c
*Check if libvirtd is running uninstalled from a build tree and change
iohelper_path accordingly
---
src/util/virfile.c | 19 +++++++++++++++++--
1 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/util/virfile.c b/src/util/virfile.c
index fefc3fb..813ad86 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -193,6 +193,8 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
bool output = false;
int pipefd[2] = { -1, -1 };
int mode = -1;
+ char *uninstalledDir = NULL;
+ char *iohelper_path = NULL;
if (!flags) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -236,8 +238,20 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
goto error;
}
- ret->cmd = virCommandNewArgList(LIBEXECDIR "/libvirt_iohelper",
- name, "0", NULL);
+ uninstalledDir = virGetUninstalledDir();
+
+ if (uninstalledDir && virAsprintf(&iohelper_path,
+ "%s/../../src/libvirt_iohelper",
+ uninstalledDir) < 0)
+ goto error;
+ else if (virAsprintf(&iohelper_path,
+ LIBEXECDIR "/libvirt_iohelper") < 0)
+ goto error;
+
+ ret->cmd = virCommandNewArgList(iohelper_path, name, "0", NULL);
+
+ VIR_FREE(iohelper_path);
+
if (output) {
virCommandSetInputFD(ret->cmd, pipefd[0]);
virCommandSetOutputFD(ret->cmd, fd);
@@ -268,6 +282,7 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
return ret;
error:
+ VIR_FREE(iohelper_path);
VIR_FORCE_CLOSE(pipefd[0]);
VIR_FORCE_CLOSE(pipefd[1]);
virFileWrapperFdFree(ret);
--
1.7.1