diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-30 13:48:35 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-30 13:48:35 +0000 |
commit | e7f8c03818873b7cd64cb5080fe329098352af6c (patch) | |
tree | 216672d258660b66cfa9e9d3fd8a6c38460acb5a /io.c | |
parent | a3efca16a12044b46f0e305ddcacfe6d412afcca (diff) | |
download | ruby-e7f8c03818873b7cd64cb5080fe329098352af6c.tar.gz |
* configure.in: check pipe2.
* io.c (rb_cloexec_pipe): use pipe2 if available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -266,7 +266,25 @@ int rb_cloexec_pipe(int fildes[2]) { int ret; + +#if defined(HAVE_PIPE2) + static int try_pipe2 = 1; + if (try_pipe2) { + ret = pipe2(fildes, O_CLOEXEC); + if (ret != -1) + return ret; + /* pipe2 is available since Linux 2.6.27. */ + if (errno == ENOSYS) { + try_pipe2 = 0; + ret = pipe(fildes); + } + } + else { + ret = pipe(fildes); + } +#else ret = pipe(fildes); +#endif if (ret == -1) return -1; #ifdef __CYGWIN__ if (ret == 0 && fildes[1] == -1) { |