char *cmd, *idx;
STARTUPINFOW start;
PROCESS_INFORMATION proc;
- int argc;
+ int argc, arg_count;
HANDLE stdin_handle;
HANDLE stdout_handle;
while (NULL != (arg = argv[argc++]))
{
if (cmdlen == 0)
- cmdlen = cmdlen + strlen (path) + 3;
+ cmdlen = cmdlen + strlen (path) + 4;
else
- cmdlen = cmdlen + strlen (arg) + 3;
+ cmdlen = cmdlen + strlen (arg) + 4;
}
+ arg_count = argc;
cmd = idx = GNUNET_malloc (sizeof (char) * (cmdlen + 1));
argc = 0;
while (NULL != (arg = argv[argc++]))
{
+ /* This is to escape trailing slash */
+ char arg_lastchar = arg[strlen (arg) - 1];
if (idx == cmd)
- idx += sprintf (idx, "\"%s\" ", path);
+ idx += sprintf (idx, "\"%s%s\"%s", path,
+ arg_lastchar == '\\' ? "\\" : "", argc + 1 == arg_count ? "" : " ");
else
- idx += sprintf (idx, "\"%s\" ", arg);
+ idx += sprintf (idx, "\"%s%s\"%s", arg,
+ arg_lastchar == '\\' ? "\\" : "", argc + 1 == arg_count ? "" : " ");
}
memset (&start, 0, sizeof (start));
arg = non_const_argv;
while (*arg)
{
- cmdlen = cmdlen + strlen (*arg) + 3;
+ cmdlen = cmdlen + strlen (*arg) + 4;
arg++;
}
arg = non_const_argv;
while (*arg)
{
- idx += sprintf (idx, "\"%s\" ", *arg);
+ char arg_last_char = (*arg)[strlen (*arg) - 1];
+ idx += sprintf (idx, "\"%s%s\"%s", *arg,
+ arg_last_char == '\\' ? "\\" : "", *(arg + 1) ? " " : "");
arg++;
}