[libvirt] [PATCH 6/9] Use virFileFindResource to locate iohelper for fdstream

Daniel P. Berrange berrange at redhat.com
Thu Apr 24 16:05:55 UTC 2014


From: Nehal J Wani <nehaljw.kkd1 at gmail.com>

Instead of hardcoding LIBEXECDIR as the location of the libvirt_iohelper
binary, use virFileFindResource to optionally find it in the current
build directory.

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/fdstream.c           | 21 ++++++++++-----------
 src/fdstream.h           |  3 ---
 src/libvirt_private.syms |  1 -
 tests/fdstreamtest.c     |  3 ---
 4 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/src/fdstream.c b/src/fdstream.c
index a244bb0..fd576ef 100644
--- a/src/fdstream.c
+++ b/src/fdstream.c
@@ -78,17 +78,6 @@ struct virFDStreamData {
 };
 
 
-static const char *iohelper_path = LIBEXECDIR "/libvirt_iohelper";
-
-void virFDStreamSetIOHelper(const char *path)
-{
-    if (path == NULL)
-        iohelper_path = LIBEXECDIR "/libvirt_iohelper";
-    else
-        iohelper_path = path;
-}
-
-
 static int virFDStreamRemoveCallback(virStreamPtr stream)
 {
     struct virFDStreamData *fdst = stream->privateData;
@@ -593,6 +582,7 @@ virFDStreamOpenFileInternal(virStreamPtr st,
     struct stat sb;
     virCommandPtr cmd = NULL;
     int errfd = -1;
+    char *iohelper_path = NULL;
 
     VIR_DEBUG("st=%p path=%s oflags=%x offset=%llu length=%llu mode=%o",
               st, path, oflags, offset, length, mode);
@@ -648,9 +638,17 @@ virFDStreamOpenFileInternal(virStreamPtr st,
             goto error;
         }
 
+        if (!(iohelper_path = virFileFindResource("libvirt_iohelper",
+                                                  "src",
+                                                  LIBEXECDIR)))
+            goto error;
+
         cmd = virCommandNewArgList(iohelper_path,
                                    path,
                                    NULL);
+
+        VIR_FREE(iohelper_path);
+
         virCommandAddArgFormat(cmd, "%llu", length);
         virCommandPassFD(cmd, fd,
                          VIR_COMMAND_PASS_FD_CLOSE_PARENT);
@@ -683,6 +681,7 @@ virFDStreamOpenFileInternal(virStreamPtr st,
     VIR_FORCE_CLOSE(fd);
     VIR_FORCE_CLOSE(childfd);
     VIR_FORCE_CLOSE(errfd);
+    VIR_FREE(iohelper_path);
     if (oflags & O_CREAT)
         unlink(path);
     return -1;
diff --git a/src/fdstream.h b/src/fdstream.h
index 9c7295d..69d8328 100644
--- a/src/fdstream.h
+++ b/src/fdstream.h
@@ -33,9 +33,6 @@ typedef void (*virFDStreamInternalCloseCb)(virStreamPtr st, void *opaque);
 typedef void (*virFDStreamInternalCloseCbFreeOpaque)(void *opaque);
 
 
-/* Only for use by test suite */
-void virFDStreamSetIOHelper(const char *path);
-
 int virFDStreamOpen(virStreamPtr st,
                     int fd);
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 1c7dd72..7415b17 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -786,7 +786,6 @@ virFDStreamCreateFile;
 virFDStreamOpen;
 virFDStreamOpenFile;
 virFDStreamOpenPTY;
-virFDStreamSetIOHelper;
 
 
 # libvirt_internal.h
diff --git a/tests/fdstreamtest.c b/tests/fdstreamtest.c
index d52b77b..56ba5d9 100644
--- a/tests/fdstreamtest.c
+++ b/tests/fdstreamtest.c
@@ -321,9 +321,6 @@ mymain(void)
 {
     char scratchdir[] = SCRATCHDIRTEMPLATE;
     int ret = 0;
-    const char *iohelper = abs_builddir "/../src/libvirt_iohelper";
-
-    virFDStreamSetIOHelper(iohelper);
 
     if (!mkdtemp(scratchdir)) {
         virFilePrintf(stderr, "Cannot create fakesysfsdir");
-- 
1.9.0




More information about the libvir-list mailing list