mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
2755f11fd5
commit
4a57c5e7d9
3 changed files with 25 additions and 5 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
Mon Feb 28 22:48:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
Mon Feb 28 17:36:57 2011 Tanaka Akira <akr@fsij.org>
|
Mon Feb 28 17:36:57 2011 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* ext/openssl/ossl_pkcs7.c: parenthesize macro arguments.
|
* ext/openssl/ossl_pkcs7.c: parenthesize macro arguments.
|
||||||
|
|
|
@ -102,11 +102,10 @@ class TestSystem < Test::Unit::TestCase
|
||||||
assert_equal("@@foo\n", `"echo" @@foo`, bug4396);
|
assert_equal("@@foo\n", `"echo" @@foo`, bug4396);
|
||||||
assert_equal("@@foo\n", `"@@echo" @@foo`, bug4396);
|
assert_equal("@@foo\n", `"@@echo" @@foo`, bug4396);
|
||||||
assert_equal("@@foo\n", `"@@echo @@foo"`, bug4396);
|
assert_equal("@@foo\n", `"@@echo @@foo"`, bug4396);
|
||||||
assert_equal('"@foo"\n', `"echo" "@foo"`, bug4396);
|
|
||||||
|
|
||||||
# ^ + @ + built-in
|
# ^ + @ + built-in
|
||||||
assert_equal(nil, system('^@echo foo'), bug4396);
|
assert_equal(false, system('^@echo foo'), bug4396);
|
||||||
assert_equal(nil, system('"^@echo foo"'), bug4396);
|
assert_equal(false, system('"^@echo foo"'), bug4396);
|
||||||
assert_equal("@foo\n", `echo ^@foo`);
|
assert_equal("@foo\n", `echo ^@foo`);
|
||||||
|
|
||||||
Dir.mktmpdir("ruby_script_tmp") {|tmpdir|
|
Dir.mktmpdir("ruby_script_tmp") {|tmpdir|
|
||||||
|
@ -120,8 +119,8 @@ class TestSystem < Test::Unit::TestCase
|
||||||
assert_match(/\Abar\nbaz\n?\z/, `@@findstr "ba" #{tmpfilename.gsub("/", "\\")}`, bug4393);
|
assert_match(/\Abar\nbaz\n?\z/, `@@findstr "ba" #{tmpfilename.gsub("/", "\\")}`, bug4393);
|
||||||
|
|
||||||
# "" + @ + non built-in
|
# "" + @ + non built-in
|
||||||
assert_match(/\Abar\nbaz\n?\z/, `"@@findstr" "ba" #{tmpfilename.gsub("/", "\\")}`, bug4396);
|
assert_match(/\Abar\nbaz\n?\z/, `"@@findstr ba" #{tmpfilename.gsub("/", "\\")}`, bug4396);
|
||||||
assert_match(/\A@foo\n?\z/, `"@@findstr" "@foo" #{tmpfilename.gsub("/", "\\")}`, bug4396);
|
assert_match(/\A@foo\n?\z/, `"@@findstr @foo" #{tmpfilename.gsub("/", "\\")}`, bug4396);
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -851,6 +851,9 @@ is_internal_cmd(const char *cmd, int nt)
|
||||||
{
|
{
|
||||||
char cmdname[9], *b = cmdname, c;
|
char cmdname[9], *b = cmdname, c;
|
||||||
|
|
||||||
|
if (strchr(cmd, '^'))
|
||||||
|
return 1;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (!(c = *cmd++)) return 0;
|
if (!(c = *cmd++)) return 0;
|
||||||
} while (isspace(c));
|
} while (isspace(c));
|
||||||
|
@ -1138,6 +1141,12 @@ rb_w32_spawn(int mode, const char *cmd, const char *prog)
|
||||||
sprintf(tmp, "%s -c \"%s\"", shell, cmd);
|
sprintf(tmp, "%s -c \"%s\"", shell, cmd);
|
||||||
cmd = tmp;
|
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")) &&
|
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) ||
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue