* 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
This commit is contained in:
akr 2011-10-30 11:07:09 +00:00
parent 7c43d8523c
commit 6e0ed044b6
2 changed files with 11 additions and 8 deletions

View File

@ -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

14
io.c
View File

@ -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);