mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* win32/win32.c (rb_w32_spawn): support normal commands with arguments.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20942 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
96369485ad
commit
12932721dc
2 changed files with 21 additions and 17 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Dec 23 16:49:48 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
|
* win32/win32.c (rb_w32_spawn): support normal commands with arguments.
|
||||||
|
|
||||||
Tue Dec 23 16:22:41 2008 Tanaka Akira <akr@fsij.org>
|
Tue Dec 23 16:22:41 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* io.c (rb_io_inspect): show fd number if there is no pathname.
|
* io.c (rb_io_inspect): show fd number if there is no pathname.
|
||||||
|
|
|
@ -900,35 +900,36 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int redir = -1;
|
int redir = -1;
|
||||||
int len = 0;
|
|
||||||
int nt;
|
int nt;
|
||||||
while (ISSPACE(*cmd)) cmd++;
|
while (ISSPACE(*cmd)) cmd++;
|
||||||
for (prog = cmd; *prog; prog = CharNext(prog)) {
|
|
||||||
if (ISSPACE(*prog)) {
|
|
||||||
len = prog - cmd;
|
|
||||||
do ++prog; while (ISSPACE(*prog));
|
|
||||||
if (!*prog--) break;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
len = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!len) len = strlen(cmd);
|
|
||||||
if ((shell = getenv("RUBYSHELL")) && (redir = has_redirection(cmd))) {
|
if ((shell = getenv("RUBYSHELL")) && (redir = has_redirection(cmd))) {
|
||||||
char *tmp = ALLOCA_N(char, strlen(shell) + len + sizeof(" -c ") + 2);
|
char *tmp = ALLOCA_N(char, strlen(shell) + strlen(cmd) + sizeof(" -c ") + 2);
|
||||||
sprintf(tmp, "%s -c \"%.*s\"", shell, len, cmd);
|
sprintf(tmp, "%s -c \"%s\"", shell, cmd);
|
||||||
cmd = tmp;
|
cmd = tmp;
|
||||||
}
|
}
|
||||||
else if ((shell = getenv("COMSPEC")) &&
|
else if ((shell = getenv("COMSPEC")) &&
|
||||||
(nt = !is_command_com(shell),
|
(nt = !is_command_com(shell),
|
||||||
(redir < 0 ? has_redirection(cmd) : redir) ||
|
(redir < 0 ? has_redirection(cmd) : redir) ||
|
||||||
is_internal_cmd(cmd, nt))) {
|
is_internal_cmd(cmd, nt))) {
|
||||||
char *tmp = ALLOCA_N(char, strlen(shell) + len + sizeof(" /c ")
|
char *tmp = ALLOCA_N(char, strlen(shell) + strlen(cmd) + sizeof(" /c ")
|
||||||
+ (nt ? 2 : 0));
|
+ (nt ? 2 : 0));
|
||||||
sprintf(tmp, nt ? "%s /c \"%.*s\"" : "%s /c %.*s", shell, len, cmd);
|
sprintf(tmp, nt ? "%s /c \"%s\"" : "%s /c %s", shell, cmd);
|
||||||
cmd = tmp;
|
cmd = tmp;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
int len = 0;
|
||||||
|
for (prog = cmd; *prog; prog = CharNext(prog)) {
|
||||||
|
if (ISSPACE(*prog)) {
|
||||||
|
len = prog - cmd;
|
||||||
|
do ++prog; while (ISSPACE(*prog));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!len) len = strlen(cmd);
|
||||||
|
|
||||||
shell = NULL;
|
shell = NULL;
|
||||||
prog = cmd;
|
prog = cmd;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -941,7 +942,6 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
|
||||||
STRNDUPA(p, cmd, len);
|
STRNDUPA(p, cmd, len);
|
||||||
}
|
}
|
||||||
p = dln_find_exe_r(p ? p : cmd, NULL, fbuf, sizeof(fbuf));
|
p = dln_find_exe_r(p ? p : cmd, NULL, fbuf, sizeof(fbuf));
|
||||||
cmd += len;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ISSPACE(*prog) || strchr("<>|", *prog)) {
|
if (ISSPACE(*prog) || strchr("<>|", *prog)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue