summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/spawn.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r--winsup/cygwin/spawn.cc11
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);