diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-30 11:07:09 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-30 11:07:09 +0000 |
commit | 6e0ed044b6d7e8247a49e85d622eab9f128dbdba (patch) | |
tree | c3c3727d6bb8f95c67a6b3f316edbc4915c5da04 | |
parent | 7c43d8523cadf8cd0483581fb8a50138b7fc4d9f (diff) | |
download | ruby-6e0ed044b6d7e8247a49e85d622eab9f128dbdba.tar.gz |
* io.c (rb_cloexec_dup): refine control flow.
(rb_cloexec_dup2): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | io.c | 14 |
2 files changed, 11 insertions, 8 deletions
@@ -1,3 +1,8 @@ +Sun Oct 30 20:06:07 2011 Tanaka Akira <akr@fsij.org> + + * io.c (rb_cloexec_dup): refine control flow. + (rb_cloexec_dup2): ditto. + Sun Oct 30 18:45:50 2011 Tanaka Akira <akr@fsij.org> * ruby.c (fill_standard_fds): new function to open closed standard @@ -212,14 +212,13 @@ rb_cloexec_dup(int oldfd) if (try_fcntl) { /* don't allocate standard file descriptors: 0, 1, 2 */ ret = fcntl(oldfd, F_DUPFD_CLOEXEC, 3); + if (ret != -1) + return ret; /* F_DUPFD_CLOEXEC is available since Linux 2.6.24. Linux 2.6.18 fails with EINVAL */ - if (ret == -1 && errno == EINVAL) { + if (errno == EINVAL) { try_fcntl = 0; ret = dup(oldfd); } - else { - return ret; - } } else { ret = dup(oldfd); @@ -244,14 +243,13 @@ rb_cloexec_dup2(int oldfd, int newfd) static int try_dup3 = 1; if (2 < newfd && try_dup3) { ret = dup3(oldfd, newfd, O_CLOEXEC); + if (ret != -1) + return ret; /* dup3 is available since Linux 2.6.27. */ - if (ret == -1 && errno == ENOSYS) { + if (errno == ENOSYS) { try_dup3 = 0; ret = dup2(oldfd, newfd); } - else { - return ret; - } } else { ret = dup2(oldfd, newfd); |