summaryrefslogtreecommitdiff
path: root/poptparse.c
diff options
context:
space:
mode:
authorewt <ewt>1998-12-29 02:52:47 +0000
committerewt <ewt>1998-12-29 02:52:47 +0000
commitfa1d0924c58eb3acd9dc16cc884842b98b560bfd (patch)
tree5a5e27a6d685f5a2fcb405a4dcbb7fe519c5d283 /poptparse.c
parentc5a167b2f282f298d830137788bcc31108829b3f (diff)
downloadlibpopt-fa1d0924c58eb3acd9dc16cc884842b98b560bfd.tar.gz
const'ified poptParseArgvString (Jeff Garzik)
Diffstat (limited to 'poptparse.c')
-rw-r--r--poptparse.c22
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;