mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
IO.popen fd set close_on_exec flag by default
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user