From: Nehal J Wani Date: Tue, 25 Mar 2014 08:23:15 +0000 (+0530) Subject: Use virFileFindResource to locate iohelper for fdstream X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c8e22a4c77748fe4b0d38d3cc8124ea4ceed79ba;p=people%2Fliuw%2Flibxenctrl-split%2Flibvirt.git Use virFileFindResource to locate iohelper for fdstream 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 --- diff --git a/src/fdstream.c b/src/fdstream.c index a244bb0d0..fd576ef26 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 9c7295dfe..69d832817 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 9919ca40f..ac7707dd7 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 d52b77b3b..56ba5d912 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");