Imported Upstream version 1.4.15

This commit is contained in:
Jan Wagner 2013-11-26 23:57:29 +01:00
parent 882cdeecca
commit 047baae1ca
386 changed files with 60019 additions and 38317 deletions

View file

@ -1,6 +1,6 @@
/* closexec.c - set or clear the close-on-exec descriptor flag
Copyright (C) 1991, 2004, 2005, 2006 Free Software Foundation, Inc.
Copyright (C) 1991, 2004-2006, 2009-2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -21,21 +21,24 @@
#include "cloexec.h"
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#ifndef FD_CLOEXEC
# define FD_CLOEXEC 1
#endif
#include <unistd.h>
/* Set the `FD_CLOEXEC' flag of DESC if VALUE is true,
or clear the flag if VALUE is false.
Return 0 on success, or -1 on error with `errno' set. */
Return 0 on success, or -1 on error with `errno' set.
Note that on MingW, this function does NOT protect DESC from being
inherited into spawned children. Instead, either use dup_cloexec
followed by closing the original DESC, or use interfaces such as
open or pipe2 that accept flags like O_CLOEXEC to create DESC
non-inheritable in the first place. */
int
set_cloexec_flag (int desc, bool value)
{
#if defined F_GETFD && defined F_SETFD
#ifdef F_SETFD
int flags = fcntl (desc, F_GETFD, 0);
@ -44,15 +47,37 @@ set_cloexec_flag (int desc, bool value)
int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC);
if (flags == newflags
|| fcntl (desc, F_SETFD, newflags) != -1)
return 0;
|| fcntl (desc, F_SETFD, newflags) != -1)
return 0;
}
return -1;
#else
#else /* !F_SETFD */
/* Use dup2 to reject invalid file descriptors; the cloexec flag
will be unaffected. */
if (desc < 0)
{
errno = EBADF;
return -1;
}
if (dup2 (desc, desc) < 0)
/* errno is EBADF here. */
return -1;
/* There is nothing we can do on this kind of platform. Punt. */
return 0;
#endif
#endif /* !F_SETFD */
}
/* Duplicates a file handle FD, while marking the copy to be closed
prior to exec or spawn. Returns -1 and sets errno if FD could not
be duplicated. */
int
dup_cloexec (int fd)
{
return fcntl (fd, F_DUPFD_CLOEXEC, 0);
}