IO.popen fd set close_on_exec flag by default

This commit is contained in:
ksss
2014-12-04 10:21:29 +09:00
parent 9439b981d8
commit e61c469724
2 changed files with 16 additions and 6 deletions
+15 -6
View File
@@ -223,13 +223,22 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass)
doexec = (strcmp("-", pname) != 0);
if ((flags & FMODE_READABLE) && pipe(pr) == -1) {
mrb_sys_fail(mrb, "pipe");
if (flags & FMODE_READABLE) {
if (pipe(pr) == -1) {
mrb_sys_fail(mrb, "pipe");
}
mrb_fd_cloexec(mrb, pr[0]);
mrb_fd_cloexec(mrb, pr[1]);
}
if ((flags & FMODE_WRITABLE) && pipe(pw) == -1) {
if (pr[0] != -1) close(pr[0]);
if (pr[1] != -1) close(pr[1]);
mrb_sys_fail(mrb, "pipe");
if (flags & FMODE_WRITABLE) {
if (pipe(pw) == -1) {
if (pr[0] != -1) close(pr[0]);
if (pr[1] != -1) close(pr[1]);
mrb_sys_fail(mrb, "pipe");
}
mrb_fd_cloexec(mrb, pw[0]);
mrb_fd_cloexec(mrb, pw[1]);
}
if (!doexec) {
+1
View File
@@ -321,6 +321,7 @@ end
assert('IO.popen') do
io = IO.popen("ls")
assert_true io.close_on_exec?
assert_equal Fixnum, io.pid.class
ls = io.read
assert_equal ls.class, String