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 <berrange@redhat.com>
This commit is contained in:
Nehal J Wani 2014-03-25 13:53:15 +05:30 committed by Daniel P. Berrange
parent 12b8290fa5
commit c8e22a4c77
4 changed files with 10 additions and 18 deletions

View File

@ -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;

View File

@ -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);

View File

@ -786,7 +786,6 @@ virFDStreamCreateFile;
virFDStreamOpen;
virFDStreamOpenFile;
virFDStreamOpenPTY;
virFDStreamSetIOHelper;
# libvirt_internal.h

View File

@ -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");