diff options
| author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-16 07:43:33 +0000 |
|---|---|---|
| committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-16 07:43:33 +0000 |
| commit | bcda220352cf57d99a903ef734e72ebbae68dfb3 (patch) | |
| tree | 78f4b27d6f6b3a0486675c6edb69cfbf4f7460cc | |
| parent | 369218ed2105c24bd4c4e24a85012eafd10800a7 (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-- | ChangeLog | 4 | ||||
| -rw-r--r-- | win32/win32.c | 14 |
2 files changed, 15 insertions, 3 deletions
@@ -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++; } } } |
