mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 13:04:13 +02:00
* process.c (proc_exec_v): follow to proc_spawn_v(). call do_aspawn()
on Win32. * process.c (rb_proc_exec): call do_spawn() on Win32. * win32/win32.c, win32/win32.h (do_spawn, do_aspawn): add mode flag. * process.c (proc_spawn_v, rb_f_system): follow above change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6a29dec1fd
commit
a8bb4ed577
4 changed files with 83 additions and 22 deletions
|
@ -630,19 +630,43 @@ pipe_exec(char *cmd, int mode, FILE **fpr, FILE **fpw)
|
|||
extern VALUE rb_last_status;
|
||||
|
||||
int
|
||||
do_spawn(cmd)
|
||||
do_spawn(mode, cmd)
|
||||
int mode;
|
||||
char *cmd;
|
||||
{
|
||||
struct ChildRecord *child = CreateChild(cmd, NULL, NULL, NULL, NULL, NULL);
|
||||
struct ChildRecord *child;
|
||||
|
||||
switch (mode) {
|
||||
case P_WAIT:
|
||||
case P_NOWAIT:
|
||||
case P_OVERLAY:
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
child = CreateChild(cmd, NULL, NULL, NULL, NULL, NULL);
|
||||
if (!child) {
|
||||
return -1;
|
||||
}
|
||||
rb_syswait(child->pid);
|
||||
return NUM2INT(rb_last_status);
|
||||
|
||||
switch (mode) {
|
||||
case P_WAIT:
|
||||
rb_syswait(child->pid);
|
||||
return NUM2INT(rb_last_status);
|
||||
case P_NOWAIT:
|
||||
return child->pid;
|
||||
case P_OVERLAY:
|
||||
exit(0);
|
||||
default:
|
||||
return -1; /* not reached */
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
do_aspawn(prog, argv)
|
||||
do_aspawn(mode, prog, argv)
|
||||
int mode;
|
||||
char *prog;
|
||||
char **argv;
|
||||
{
|
||||
|
@ -650,6 +674,16 @@ char **argv;
|
|||
int len, n, bs, quote;
|
||||
struct ChildRecord *child;
|
||||
|
||||
switch (mode) {
|
||||
case P_WAIT:
|
||||
case P_NOWAIT:
|
||||
case P_OVERLAY:
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (t = argv, len = 0; *t; t++) {
|
||||
for (p = *t, n = quote = bs = 0; *p; ++p) {
|
||||
switch (*p) {
|
||||
|
@ -706,8 +740,18 @@ char **argv;
|
|||
if (!child) {
|
||||
return -1;
|
||||
}
|
||||
rb_syswait(child->pid);
|
||||
return NUM2INT(rb_last_status);
|
||||
|
||||
switch (mode) {
|
||||
case P_WAIT:
|
||||
rb_syswait(child->pid);
|
||||
return NUM2INT(rb_last_status);
|
||||
case P_NOWAIT:
|
||||
return child->pid;
|
||||
case P_OVERLAY:
|
||||
exit(0);
|
||||
default:
|
||||
return -1; /* not reached */
|
||||
}
|
||||
}
|
||||
|
||||
static struct ChildRecord *
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue