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 <phrdina@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2020-01-22 11:45:55 +00:00
parent 2a656fc9d8
commit 4b9919af40

View File

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