* 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:
parent
7c43d8523c
commit
6e0ed044b6
@ -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
14
io.c
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user