X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/d3a1a808f65812c591ef0de3e61a94b13aa73160..7440fd4419acfc9c784f142fb9dee3e64c9a18c2:/winutils.c diff --git a/winutils.c b/winutils.c index 9d707ff1..d55e8901 100644 --- a/winutils.c +++ b/winutils.c @@ -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