* src/util/util.h (virSetInherit): New prototype. * src/util/util.c (virSetCloseExec): Move guts... (virSetInherit): ...to new function, and allow clearing. * src/libvirt_private.syms (util.h): Export it. --- v5: new patch src/libvirt_private.syms | 1 + src/util/util.c | 14 +++++++++++--- src/util/util.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 5f58970..93504e5 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -933,6 +933,7 @@ virRun; virRunWithHook; virSetBlocking; virSetCloseExec; +virSetInherit; virSetNonBlock; virSetUIDGID; virSkipSpaces; diff --git a/src/util/util.c b/src/util/util.c index 4301b00..7c7da22 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -273,13 +273,21 @@ int virSetNonBlock(int fd) { } +int virSetCloseExec(int fd) +{ + return virSetInherit(fd, false); +} + #ifndef WIN32 -int virSetCloseExec(int fd) { +int virSetInherit(int fd, bool inherit) { int flags; if ((flags = fcntl(fd, F_GETFD)) < 0) return -1; - flags |= FD_CLOEXEC; + if (inherit) + flags &= ~FD_CLOEXEC; + else + flags |= FD_CLOEXEC; if ((fcntl(fd, F_SETFD, flags)) < 0) return -1; return 0; @@ -931,7 +939,7 @@ virRunWithHook(const char *const*argv, #else /* WIN32 */ -int virSetCloseExec(int fd ATTRIBUTE_UNUSED) +int virSetInherit(int fd ATTRIBUTE_UNUSED, bool inherit ATTRIBUTE_UNUSED) { return -1; } diff --git a/src/util/util.h b/src/util/util.h index c313023..0f11f8f 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -51,6 +51,7 @@ enum { int virSetBlocking(int fd, bool blocking) ATTRIBUTE_RETURN_CHECK; int virSetNonBlock(int fd) ATTRIBUTE_RETURN_CHECK; +int virSetInherit(int fd, bool inherit) ATTRIBUTE_RETURN_CHECK; int virSetCloseExec(int fd) ATTRIBUTE_RETURN_CHECK; /* This will execute in the context of the first child -- 1.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list