summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-23 14:21:47 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-06-23 14:21:47 +0000
commitf1734b4287e81ad281924c9acf89a754e43c6e2e (patch)
tree5c7f43de7f01fa711912de718a02e1ddddf29261 /process.c
parent345ecf3711998c8792c075e5d1093ca6a872474c (diff)
* internal.h (rb_execarg): add new_pgroup_given and new_pgroup_flag
fields. * process.c (EXEC_OPTION_NEW_PGROUP): removed. (proc_spawn_cmd): take a struct rb_execarg argument. use the new fields. (rb_execarg_addopt): use the new fields. (rb_spawn_process): follow the proc_spawn_cmd change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36202 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/process.c b/process.c
index 80d32dbd26..b30e413b28 100644
--- a/process.c
+++ b/process.c
@@ -1253,10 +1253,6 @@ rb_proc_exec(const char *str)
return ret;
}
-enum {
- EXEC_OPTION_NEW_PGROUP
-};
-
static void
mark_exec_arg(void *ptr)
{
@@ -1345,14 +1341,15 @@ proc_spawn_cmd_internal(char **argv, char *prog)
#endif
static rb_pid_t
-proc_spawn_cmd(char **argv, VALUE prog, VALUE options)
+proc_spawn_cmd(char **argv, VALUE prog, struct rb_execarg *eargp)
{
+ VALUE options = eargp->options;
rb_pid_t pid = -1;
if (argv[0]) {
#if defined(_WIN32)
DWORD flags = 0;
- if (RTEST(rb_ary_entry(options, EXEC_OPTION_NEW_PGROUP))) {
+ if (eargp->new_pgroup_given && eargp->new_pgroup_flag) {
flags = CREATE_NEW_PROCESS_GROUP;
}
pid = rb_w32_aspawn_flags(P_NOWAIT, prog ? RSTRING_PTR(prog) : 0, argv, flags);
@@ -1579,11 +1576,11 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
#endif
#ifdef _WIN32
if (id == rb_intern("new_pgroup")) {
- if (!NIL_P(rb_ary_entry(options, EXEC_OPTION_NEW_PGROUP))) {
+ if (eargp->new_pgroup_given) {
rb_raise(rb_eArgError, "new_pgroup option specified twice");
}
- val = RTEST(val) ? Qtrue : Qfalse;
- rb_ary_store(options, EXEC_OPTION_NEW_PGROUP, val);
+ eargp->new_pgroup_given = 1;
+ eargp->new_pgroup_flag = RTEST(val) ? 1 : 0;
}
else
#endif
@@ -3525,7 +3522,7 @@ rb_spawn_process(struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen)
}
else {
char **argv = ARGVSTR2ARGV(eargp->invoke.cmd.argv_str);
- pid = proc_spawn_cmd(argv, prog, eargp->options);
+ pid = proc_spawn_cmd(argv, prog, eargp);
}
# if defined(_WIN32)
if (pid == -1)