From: Jim Meyering <meyering(a)redhat.com>
* src/qemu_driver.c: Use virSetCloseExec and virSetNonBlock,
rather than qemuSet* functions. Suggested by Daniel P. Berrange.
* src/util.c (virSetCloseExec): Compile unconditionally.
* src/util.h (virSetCloseExec): Declare
libvirtd: link with libvirt_util, too
* qemud/Makefile.am (libvirtd_LDADD): Add ../src/libvirt_util.la,
for use of virSetCloseExec.
---
qemud/Makefile.am | 1 +
src/qemu_driver.c | 27 ++++-----------------------
src/util.c | 9 ++++-----
src/util.h | 1 +
4 files changed, 10 insertions(+), 28 deletions(-)
diff --git a/qemud/Makefile.am b/qemud/Makefile.am
index a0c161a..372b931 100644
--- a/qemud/Makefile.am
+++ b/qemud/Makefile.am
@@ -107,6 +107,7 @@ libvirtd_LDADD = \
if ! WITH_DRIVER_MODULES
if WITH_QEMU
libvirtd_LDADD += ../src/libvirt_driver_qemu.la
+libvirtd_LDADD += ../src/libvirt_util.la
endif
if WITH_LXC
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 596d940..c40fda4 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -91,25 +91,6 @@ static void qemuDriverUnlock(struct qemud_driver *driver)
virMutexUnlock(&driver->lock);
}
-static int qemudSetCloseExec(int fd) {
- int flags;
- return ((flags = fcntl(fd, F_GETFD)) < 0
- || fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0
- ? -1
- : 0);
-}
-
-
-static int qemudSetNonBlock(int fd) {
- int flags;
- return ((flags = fcntl(fd, F_GETFL)) < 0
- || fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0
- ? -1
- : 0);
-}
-
-
-
static void qemuDomainEventFlush(int timer, void *opaque);
static void qemuDomainEventQueue(struct qemud_driver *driver,
virDomainEventPtr event);
@@ -168,7 +149,7 @@ qemudLogFD(virConnectPtr conn, const char* logDir, const char* name)
logfile);
return -1;
}
- if (qemudSetCloseExec(fd) < 0) {
+ if (virSetCloseExec(fd) < 0) {
virReportSystemError(conn, errno, "%s",
_("Unable to set VM logfile close-on-exec
flag"));
close(fd);
@@ -200,7 +181,7 @@ qemudLogReadFD(virConnectPtr conn, const char* logDir, const char*
name, off_t p
logfile);
return -1;
}
- if (qemudSetCloseExec(fd) < 0) {
+ if (virSetCloseExec(fd) < 0) {
virReportSystemError(conn, errno, "%s",
_("Unable to set VM logfile close-on-exec
flag"));
close(fd);
@@ -710,12 +691,12 @@ static int qemudOpenMonitor(virConnectPtr conn,
_("Unable to open monitor path %s"), monitor);
return -1;
}
- if (qemudSetCloseExec(monfd) < 0) {
+ if (virSetCloseExec(monfd) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"%s", _("Unable to set monitor close-on-exec
flag"));
goto error;
}
- if (qemudSetNonBlock(monfd) < 0) {
+ if (virSetNonBlock(monfd) < 0) {
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"%s", _("Unable to put monitor into non-blocking
mode"));
goto error;
diff --git a/src/util.c b/src/util.c
index 7c7fe31..6c29872 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1,7 +1,7 @@
/*
* utils.c: common, generic utility functions
*
- * Copyright (C) 2006, 2007, 2008 Red Hat, Inc.
+ * Copyright (C) 2006, 2007, 2008, 2009 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
* Copyright (C) 2006, 2007 Binary Karma
* Copyright (C) 2006 Shuveb Hussain
@@ -182,10 +182,7 @@ int virSetNonBlock(int fd) {
return 0;
}
-
-#ifndef WIN32
-
-static int virSetCloseExec(int fd) {
+int virSetCloseExec(int fd) {
int flags;
if ((flags = fcntl(fd, F_GETFD)) < 0)
return -1;
@@ -195,6 +192,8 @@ static int virSetCloseExec(int fd) {
return 0;
}
+#ifndef WIN32
+
static int
__virExec(virConnectPtr conn,
const char *const*argv,
diff --git a/src/util.h b/src/util.h
index e731ba4..62df202 100644
--- a/src/util.h
+++ b/src/util.h
@@ -39,6 +39,7 @@ enum {
};
int virSetNonBlock(int fd);
+int virSetCloseExec(int fd);
int virExec(virConnectPtr conn,
const char *const*argv,
--
1.6.1.2.418.gd79e6