summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-16 07:43:33 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-16 07:43:33 +0000
commitbcda220352cf57d99a903ef734e72ebbae68dfb3 (patch)
tree78f4b27d6f6b3a0486675c6edb69cfbf4f7460cc
parent369218ed2105c24bd4c4e24a85012eafd10800a7 (diff)
* win32/win32.c (CreateChild): recognize escape characters.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@25369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--win32/win32.c14
2 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 475a4b56d6..2be17d2f40 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Oct 16 16:42:57 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): recognize escape characters.
+
Fri Oct 16 16:41:56 2009 NAKAMURA Usaku <usa@ruby-lang.org>
* dln.c (dln_find_1): backport from trunkn. [ruby-core:25802]
diff --git a/win32/win32.c b/win32/win32.c
index 83d1964467..2e9b98da4d 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -1054,13 +1054,22 @@ CreateChild(const char *cmd, const char *prog, SECURITY_ATTRIBUTES *psa,
cmd = tmp;
}
else {
+ char quote = (*cmd == '"') ? '"' : (*cmd == '\'') ? '\'' : 0;
shell = NULL;
- prog = cmd;
- for (;;) {
+ for (prog = cmd + !!quote;; prog = CharNext(prog)) {
if (!*prog) {
p = dln_find_exe(cmd, NULL);
break;
}
+ if (*prog == quote) {
+ len = prog++ - cmd - 1;
+ p = ALLOCA_N(char, len + 1);
+ memcpy(p, cmd + 1, len);
+ p[len] = 0;
+ p = dln_find_exe(p, NULL);
+ break;
+ }
+ if (quote) continue;
if (strchr(".:*?\"/\\", *prog)) {
if (cmd[len]) {
char *tmp = ALLOCA_N(char, len + 1);
@@ -1078,7 +1087,6 @@ CreateChild(const char *cmd, const char *prog, SECURITY_ATTRIBUTES *psa,
p = dln_find_exe(p, NULL);
break;
}
- prog++;
}
}
}