#ifdef TESTMODE
/* Definitions to allow this module to be compiled standalone for testing. */
#define smalloc malloc
+#define srealloc realloc
+#define sfree free
#endif
/*
* produce a literal quote.
*/
+ /*
+ * 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;
*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);
return 0;
}
-#endif
\ No newline at end of file
+#endif