* 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:
usa 2003-01-06 04:30:27 +00:00
parent 6a29dec1fd
commit a8bb4ed577
4 changed files with 83 additions and 22 deletions

View file

@ -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 *