Various tweaks to header comments to remind me which bits are meant to be
[u/mdw/putty] / winutils.c
index 9d707ff..b292124 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * winutils.c: miscellaneous Windows utilities
+ * winutils.c: miscellaneous Windows utilities for GUI apps
  */
 
 #include <stdio.h>
@@ -11,6 +11,8 @@
 #ifdef TESTMODE
 /* Definitions to allow this module to be compiled standalone for testing. */
 #define smalloc malloc
+#define srealloc realloc
+#define sfree free
 #endif
 
 /*
@@ -131,12 +133,24 @@ void split_into_argv(char *cmdline, int *argc, char ***argv,
      */
 
     /*
+     * First deal with the simplest of all special cases: if there
+     * aren't any arguments, return 0,NULL,NULL.
+     */
+    while (*cmdline && isspace(*cmdline)) cmdline++;
+    if (!*cmdline) {
+       if (argc) *argc = 0;
+       if (argv) *argv = NULL;
+       if (argstart) *argstart = NULL;
+       return;
+    }
+
+    /*
      * This will guaranteeably be big enough; we can realloc it
      * down later.
      */
-    outputline = smalloc(1+strlen(cmdline));
-    outputargv = smalloc(sizeof(char *) * (strlen(cmdline)+1 / 2));
-    outputargstart = smalloc(sizeof(char *) * (strlen(cmdline)+1 / 2));
+    outputline = snewn(1+strlen(cmdline), char);
+    outputargv = snewn(strlen(cmdline)+1 / 2, char *);
+    outputargstart = snewn(strlen(cmdline)+1 / 2, char *);
 
     p = cmdline; q = outputline; outputargc = 0;
 
@@ -203,8 +217,8 @@ void split_into_argv(char *cmdline, int *argc, char ***argv,
        *q++ = '\0';
     }
 
-    outputargv = srealloc(outputargv, sizeof(char *) * outputargc);
-    outputargstart = srealloc(outputargstart, sizeof(char *) * outputargc);
+    outputargv = sresize(outputargv, outputargc, char *);
+    outputargstart = sresize(outputargstart, outputargc, char *);
 
     if (argc) *argc = outputargc;
     if (argv) *argv = outputargv; else sfree(outputargv);
@@ -446,4 +460,4 @@ int main(int argc, char **argv)
     return 0;
 }
 
-#endif
\ No newline at end of file
+#endif