ruby-changes:24151
From: akr <ko1@a...>
Date: Sat, 23 Jun 2012 23:23:04 +0900 (JST)
Subject: [ruby-changes:24151] akr:r36202 (trunk): * internal.h (rb_execarg): add new_pgroup_given and new_pgroup_flag
akr 2012-06-23 23:21:47 +0900 (Sat, 23 Jun 2012) New Revision: 36202 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36202 Log: * 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. Modified files: trunk/ChangeLog trunk/internal.h trunk/process.c Index: ChangeLog =================================================================== --- ChangeLog (revision 36201) +++ ChangeLog (revision 36202) @@ -1,3 +1,14 @@ +Sat Jun 23 23:19:31 2012 Tanaka Akira <akr@f...> + + * 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. + Sat Jun 23 20:26:36 2012 Tanaka Akira <akr@f...> * internal.h (rb_execarg): add fd_dup2, fd_close, fd_open, Index: process.c =================================================================== --- process.c (revision 36201) +++ process.c (revision 36202) @@ -1253,10 +1253,6 @@ return ret; } -enum { - EXEC_OPTION_NEW_PGROUP -}; - static void mark_exec_arg(void *ptr) { @@ -1345,14 +1341,15 @@ #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 @@ #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 @@ } 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) Index: internal.h =================================================================== --- internal.h (revision 36201) +++ internal.h (revision 36202) @@ -183,6 +183,8 @@ unsigned close_others_given : 1; unsigned close_others_do : 1; unsigned chdir_given : 1; + unsigned new_pgroup_given : 1; + unsigned new_pgroup_flag : 1; pid_t pgroup_pgid; /* asis(-1), new pgroup(0), specified pgroup (0<V). */ VALUE rlimit_limits; /* Qfalse or [[rtype, softlim, hardlim], ...] */ mode_t umask_mask; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/