From: Daniel P. Berrangé Date: Wed, 22 Jan 2020 11:45:55 +0000 (+0000) Subject: src: conditionalize use of F_DUPFD_CLOEXEC X-Git-Tag: v6.1.0-rc1~328 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b9919af4024a6fbc3d4ee996d8a4c27dbc44285;p=thirdparty%2Flibvirt.git src: conditionalize use of F_DUPFD_CLOEXEC The F_DUPFD_CLOEXEC functionality is not available on some platformms. We must thus explicitly call the virSetCloexec function once we remove GNULIB's equiv fix for this. Reviewed-by: Pavel Hrdina Signed-off-by: Daniel P. Berrangé --- diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index b25c57d01e..a286f0ce02 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -1397,15 +1397,27 @@ int virNetSocketDupFD(virNetSocketPtr sock, bool cloexec) { int fd; +#ifdef F_DUPFD_CLOEXEC if (cloexec) fd = fcntl(sock->fd, F_DUPFD_CLOEXEC, 0); else +#endif /* F_DUPFD_CLOEXEC */ fd = dup(sock->fd); if (fd < 0) { virReportSystemError(errno, "%s", _("Unable to copy socket file handle")); return -1; } +#ifndef F_DUPFD_CLOEXEC + if (cloexec && + virSetCloseExec(fd < 0)) { + int saveerr = errno; + closesocket(fd); + errno = saveerr; + return -1; + } +#endif /* F_DUPFD_CLOEXEC */ + return fd; }