gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r19906 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r19906 - gnunet/src/util
Date: Tue, 21 Feb 2012 20:08:08 +0100

Author: grothoff
Date: 2012-02-21 20:08:08 +0100 (Tue, 21 Feb 2012)
New Revision: 19906

Modified:
   gnunet/src/util/os_priority.c
Log:
LRN: Escape-trailing-slash-when-spawning-W32-process:


Modified: gnunet/src/util/os_priority.c
===================================================================
--- gnunet/src/util/os_priority.c       2012-02-21 17:57:52 UTC (rev 19905)
+++ gnunet/src/util/os_priority.c       2012-02-21 19:08:08 UTC (rev 19906)
@@ -638,7 +638,7 @@
   char *cmd, *idx;
   STARTUPINFOW start;
   PROCESS_INFORMATION proc;
-  int argc;
+  int argc, arg_count;
   HANDLE stdin_handle;
   HANDLE stdout_handle;
 
@@ -707,19 +707,24 @@
   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));
@@ -1103,7 +1108,7 @@
   arg = non_const_argv;
   while (*arg)
   {
-    cmdlen = cmdlen + strlen (*arg) + 3;
+    cmdlen = cmdlen + strlen (*arg) + 4;
     arg++;
   }
 
@@ -1112,7 +1117,9 @@
   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++;
   }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]