From 511e25b2d597c86667a170b186e414cdd246acb6 Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 21 Jun 2012 11:36:25 +0000 Subject: [PATCH] * process.c (rb_exec_fillarg): take a VALUE argument instead of struct rb_execarg. (rb_check_exec_options): ditto. (check_exec_options_i): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36166 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ process.c | 14 +++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a8b209ae0..b8becbec60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Jun 21 20:34:19 2012 Tanaka Akira + + * process.c (rb_exec_fillarg): take a VALUE argument instead of + struct rb_execarg. + (rb_check_exec_options): ditto. + (check_exec_options_i): ditto. + + the third argument Thu Jun 21 19:48:05 2012 Tanaka Akira * process.c (rb_exec_async_signal_safe): use rb_execarg_run_options diff --git a/process.c b/process.c index 5bf4f4d284..e91a7528d0 100644 --- a/process.c +++ b/process.c @@ -1687,8 +1687,12 @@ check_exec_options_i(st_data_t st_key, st_data_t st_val, st_data_t arg) { VALUE key = (VALUE)st_key; VALUE val = (VALUE)st_val; - struct rb_execarg *e = (struct rb_execarg *)arg; - return rb_execarg_addopt(e, key, val); + VALUE execarg_obj = (VALUE)arg; + struct rb_execarg *e = rb_execarg_get(execarg_obj); + int ret; + ret = rb_execarg_addopt(e, key, val); + RB_GC_GUARD(execarg_obj); + return ret; } static VALUE @@ -1763,11 +1767,11 @@ check_exec_fds(VALUE options) } static void -rb_check_exec_options(VALUE opthash, struct rb_execarg *e) +rb_check_exec_options(VALUE opthash, VALUE execarg_obj) { if (RHASH_EMPTY_P(opthash)) return; - st_foreach(RHASH_TBL(opthash), check_exec_options_i, (st_data_t)e); + st_foreach(RHASH_TBL(opthash), check_exec_options_i, (st_data_t)execarg_obj); } static int @@ -1892,7 +1896,7 @@ rb_exec_fillarg(VALUE prog, int argc, VALUE *argv, VALUE env, VALUE opthash, VAL e->options = options; if (!NIL_P(opthash)) { - rb_check_exec_options(opthash, e); + rb_check_exec_options(opthash, execarg_obj); } if (!NIL_P(env)) { env = rb_check_exec_env(env);