diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-20 10:31:02 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-20 10:31:02 +0000 |
commit | 826f98e688c5608dcb5aeb749d0511cf2724c3a3 (patch) | |
tree | 93a638870da3a0361317fe1a7b27ee0f8a410925 /ext/pty | |
parent | 2741a598ff9e561c71eb39a57bb19c0a3205eaef (diff) |
* internal.h (rb_execarg_new): declared.
(rb_execarg_get): ditto.
* process.c (mark_exec_arg): new function.
(free_exec_arg): ditto.
(memsize_exec_arg): ditto.
(exec_arg_data_type): defined.
(rb_execarg_new): new function.
(rb_execarg_get): ditto.
(rb_f_exec): use rb_execarg_new.
(rb_spawn_internal): ditto.
(rb_f_spawn): ditto.
* io.c (pipe_open_v): use rb_execarg_new.
(pipe_open_s): ditto.
* ext/pty/pty.c (establishShell): use rb_execarg_new.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/pty')
-rw-r--r-- | ext/pty/pty.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ext/pty/pty.c b/ext/pty/pty.c index 182ad1837a..9e5aff9136 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -78,7 +78,8 @@ static void getDevice(int*, int*, char [DEVICELEN], int); struct child_info { int master, slave; char *slavename; - struct rb_exec_arg earg; + VALUE execarg_obj; + struct rb_exec_arg *earg; }; static int @@ -142,7 +143,7 @@ chfunc(void *data, char *errbuf, size_t errbuf_len) seteuid(getuid()); #endif - return rb_exec_async_signal_safe(&carg->earg, errbuf, sizeof(errbuf_len)); + return rb_exec_async_signal_safe(carg->earg, errbuf, sizeof(errbuf_len)); #undef ERROR_EXIT } @@ -176,8 +177,9 @@ establishShell(int argc, VALUE *argv, struct pty_info *info, argv = &v; } - rb_execarg_init(argc, argv, 1, &carg.earg); - rb_execarg_fixup(&carg.earg); + carg.execarg_obj = rb_execarg_new(argc, argv, 1); + carg.earg = rb_execarg_get(carg.execarg_obj); + rb_execarg_fixup(carg.earg); getDevice(&master, &slave, SlaveName, 0); @@ -200,6 +202,8 @@ establishShell(int argc, VALUE *argv, struct pty_info *info, info->child_pid = pid; info->fd = master; + + RB_GC_GUARD(carg.execarg_obj); } static int |