summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-02-28 13:52:58 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-02-28 13:52:58 +0000
commit4a57c5e7d961e457826ea5dabb758b249d8faeb0 (patch)
tree3bc772a5dfbcba0a2bfdd938fdc93416b2fe58ba /win32
parent2755f11fd5a682cc5bf3c57f2e2af139d75c5be4 (diff)
* win32/win32.c (rb_w32_spawn): use shell if a commandline contain
double-quote character. * win32/win32.c (is_internal_cmd): similar, use shell if a commandline contain caret character. * test/ruby/test_system.rb (TestSystem#test_system_at): fix wrong test case. if system() invoke a command by using shell, system() never return nil. Also, "" quotation must not appear twice in a command line. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30987 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r--win32/win32.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 99802d07d0..1e658de156 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -851,6 +851,9 @@ is_internal_cmd(const char *cmd, int nt)
{
char cmdname[9], *b = cmdname, c;
+ if (strchr(cmd, '^'))
+ return 1;
+
do {
if (!(c = *cmd++)) return 0;
} while (isspace(c));
@@ -1139,6 +1142,12 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
cmd = tmp;
}
else if ((shell = getenv("COMSPEC")) &&
+ strchr(cmd, '"')) {
+ char *tmp = ALLOCV(v, strlen(shell) + strlen(cmd) + sizeof(" /c "));
+ sprintf(tmp, "%s /c %s", shell, cmd);
+ cmd = tmp;
+ }
+ else if ((shell = getenv("COMSPEC")) &&
(nt = !is_command_com(shell),
(redir < 0 ? has_redirection(cmd) : redir) ||
is_internal_cmd(cmd, nt))) {