Commit 4bd86a4d authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

popen-safer: test O_CLOEXEC at run-time.

* lib/popen-safer.c: Test O_CLOEXEC at run-time.
parent 2dce7704
2009-08-21 Paolo Bonzini <bonzini@gnu.org>
popen-safer: test O_CLOEXEC at run-time.
* lib/popen-safer.c: Test O_CLOEXEC at run-time.
2009-08-21 Paolo Bonzini <bonzini@gnu.org>
 
fcntl: move more flags to the header
......@@ -27,18 +27,28 @@
#include "cloexec.h"
#ifndef O_CLOEXEC
# define O_CLOEXEC 0
#endif
/* Like open (name, flags | O_CLOEXEC), although not necessarily
atomic. FLAGS must not include O_CREAT. */
static int
open_noinherit (char const *name, int flags)
{
int fd = open (name, flags | O_CLOEXEC);
if (0 <= fd && !O_CLOEXEC && set_cloexec_flag (fd, true) != 0)
int fd;
#ifdef O_CLOEXEC
/* 0 = unknown, 1 = yes, -1 = no. */
static int have_cloexec;
if (have_cloexec >= 0)
{
fd = open (name, flags | O_CLOEXEC);
if (have_cloexec == 0 && (0 <= fd || errno == EINVAL))
have_cloexec = (0 <= fd ? 1 : -1);
if (have_cloexec == 1)
return fd;
}
#endif
fd = open (name, flags);
if (0 <= fd && set_cloexec_flag (fd, true) != 0)
{
int saved_errno = errno;
close (fd);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment