mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
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:
parent
2a656fc9d8
commit
4b9919af40
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user