diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-06 03:39:40 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-06 03:39:40 +0000 |
commit | 494d01410fff02ca7978b986b8010484253fbecf (patch) | |
tree | 4ba2e44e3d92deec1b4a9aa0d46e3383ed93cd91 /process.c | |
parent | 5e1e5d04ee0e661d7a9817c88502ea1a5c1562ac (diff) | |
download | ruby-494d01410fff02ca7978b986b8010484253fbecf.tar.gz |
* process.c (rb_run_exec_options_err): allocate a temporary buffer for
run_exec_dup2() for restoring fds on non-fork environments.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -2460,6 +2460,7 @@ rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char return 0; if (s) { + /* assume that s is always NULL on fork-able environments */ s->options = soptions = hide_obj(rb_ary_new()); s->redirect_fds = Qnil; s->envp_str = s->envp_buf = 0; @@ -2561,6 +2562,16 @@ rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char } } + if (s) { + VALUE ary = rb_ary_entry(s->options, EXEC_OPTION_DUP2); + if (!NIL_P(ary)) { + size_t len = run_exec_dup2_tmpbuf_size(RARRAY_LEN(ary)); + VALUE tmpbuf = hide_obj(rb_str_new(0, len)); + rb_str_set_len(tmpbuf, len); + s->dup2_tmpbuf = tmpbuf; + } + } + return 0; } |