From 05ea0b76e6425003f994376f999a489f82edda98 Mon Sep 17 00:00:00 2001 From: usa Date: Fri, 5 Sep 2003 16:25:55 +0000 Subject: [PATCH] * win32/win32.c (CreateChild): need to quote cmd if RUBYSHELL is set. * win32/win32.c (CreateChild): fix condition about whether to call shell or not. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ win32/win32.c | 17 +++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 81b2bd0345..49307dc4a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Sep 6 01:23:22 2003 NAKAMURA Usaku + + * win32/win32.c (CreateChild): need to quote cmd if RUBYSHELL is set. + + * win32/win32.c (CreateChild): fix condition about whether to call + shell or not. + Sat Sep 6 00:36:20 2003 Nobuyoshi Nakada * Makefile.in (test): phony target. diff --git a/win32/win32.c b/win32/win32.c index b7827218ad..0e75f431a1 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -910,23 +910,28 @@ CreateChild(char *cmd, char *prog, SECURITY_ATTRIBUTES *psa, HANDLE hInput, HAND dwCreationFlags = (NORMAL_PRIORITY_CLASS); - shell = NULL; if (prog) { shell = prog; } - else if (has_redirection(cmd)) { - if (shell = getenv("RUBYSHELL")) { + else { + int redir = -1; + if ((shell = getenv("RUBYSHELL")) && (redir = has_redirection(cmd))) { char *tmp = ALLOCA_N(char, strlen(shell) + strlen(cmd) + - sizeof (" -c ")); - sprintf(tmp, "%s -c %s", shell, cmd); + sizeof (" -c ") + 2); + sprintf(tmp, "%s -c \"%s\"", shell, cmd); cmd = tmp; } - else if ((shell = getenv("COMSPEC")) && isInternalCmd(cmd, shell)) { + else if ((shell = getenv("COMSPEC")) && + ((redir < 0 ? has_redirection(cmd) : redir) || + isInternalCmd(cmd, shell))) { char *tmp = ALLOCA_N(char, strlen(shell) + strlen(cmd) + sizeof (" /c ")); sprintf(tmp, "%s /c %s", shell, cmd); cmd = tmp; } + else { + shell = NULL; + } } RUBY_CRITICAL({