diff options
author | ewt <ewt> | 1998-12-29 02:52:47 +0000 |
---|---|---|
committer | ewt <ewt> | 1998-12-29 02:52:47 +0000 |
commit | fa1d0924c58eb3acd9dc16cc884842b98b560bfd (patch) | |
tree | 5a5e27a6d685f5a2fcb405a4dcbb7fe519c5d283 /poptparse.c | |
parent | c5a167b2f282f298d830137788bcc31108829b3f (diff) | |
download | libpopt-fa1d0924c58eb3acd9dc16cc884842b98b560bfd.tar.gz |
const'ified poptParseArgvString (Jeff Garzik)
Diffstat (limited to 'poptparse.c')
-rw-r--r-- | poptparse.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/poptparse.c b/poptparse.c index cd97ec6..a465a03 100644 --- a/poptparse.c +++ b/poptparse.c @@ -12,23 +12,25 @@ #include "popt.h" -int poptParseArgvString(char * s, int * argcPtr, char *** argvPtr) { - char * buf = strcpy(alloca(strlen(s) + 1), s); - char * bufStart = buf; - char * src, * dst; +static const int poptArgvArrayGrowDelta = 5; + +int poptParseArgvString(const char * s, int * argcPtr, char *** argvPtr) { + char * buf, * bufStart, * dst; + const char * src; char quote = '\0'; - int argvAlloced = 5; + int argvAlloced = poptArgvArrayGrowDelta; char ** argv = malloc(sizeof(*argv) * argvAlloced); char ** argv2; int argc = 0; - int i; + int i, buflen; + + buflen = strlen(s) + 1; + bufStart = buf = alloca(buflen); + memset(buf, '\0', buflen); src = s; - dst = buf; argv[argc] = buf; - memset(buf, '\0', strlen(s) + 1); - while (*src) { if (quote == *src) { quote = '\0'; @@ -46,7 +48,7 @@ int poptParseArgvString(char * s, int * argcPtr, char *** argvPtr) { if (*argv[argc]) { buf++, argc++; if (argc == argvAlloced) { - argvAlloced += 5; + argvAlloced += poptArgvArrayGrowDelta; argv = realloc(argv, sizeof(*argv) * argvAlloced); } argv[argc] = buf; |