diff options
author | Christopher Faylor <me@cgf.cx> | 2000-07-16 06:31:06 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-07-16 06:31:06 +0000 |
commit | 8e382d804957ac50dc61af60eef001cae13c25be (patch) | |
tree | 86dc1d2e60fdedfe5a31578beded8f9fcd22d47f /winsup/cygwin/spawn.cc | |
parent | 2768430b64d4e6689d923669c2c5af2ffcdebaaa (diff) | |
download | cygnal-8e382d804957ac50dc61af60eef001cae13c25be.tar.gz cygnal-8e382d804957ac50dc61af60eef001cae13c25be.tar.bz2 cygnal-8e382d804957ac50dc61af60eef001cae13c25be.zip |
* spawn.cc (spawn_guts): Use \ for quoting '"'.
* dcrt0.cc (quoted): Understand \ quoting for '"'.
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r-- | winsup/cygwin/spawn.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index 6ca82e413..af284f8ee 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -407,16 +407,17 @@ spawn_guts (HANDLE hToken, const char * prog_arg, const char *const *argv, newargv0 = NULL; int len = strlen (a); - if (len != 0 && !(p = strpbrk (a, " \t\n\r\""))) + if (len != 0 && !strpbrk (a, " \t\n\r\"")) one_line.add (a, len); else { one_line.add ("\"", 1); - for (; p; a = p, p = strchr (p, '"')) + for (0; p = strpbrk (a, "\"\\"); a = ++p) { - one_line.add (a, ++p - a); - if (p[-1] == '"') - one_line.add ("\"", 1); + one_line.add (a, p - a); + if (*p == '\\' || *p == '"') + one_line.add ("\\", 1); + one_line.add (p, 1); } if (*a) one_line.add (a); |