summaryrefslogtreecommitdiff
path: root/poptparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'poptparse.c')
-rw-r--r--poptparse.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/poptparse.c b/poptparse.c
index 8f8d978..485b875 100644
--- a/poptparse.c
+++ b/poptparse.c
@@ -50,7 +50,7 @@ int poptDupArgv(int argc, const char **argv,
}
#endif
- dst = (char*) xmalloc(nb);
+ dst = (char *) xmalloc(nb);
assert(dst); /* XXX can't happen */
if (dst == NULL)
return POPT_ERROR_MALLOC;
@@ -90,17 +90,19 @@ int poptParseArgvString(const char * s, int * argcPtr, const char *** argvPtr)
size_t ns = strlen(s);
char * t = NULL;
char * te;
+ int i;
int rc = POPT_ERROR_MALLOC;
assert(argv); /* XXX can't happen */
if (argv == NULL) return rc;
- te = t = (char*) xcalloc((size_t)1, ns + 1);
+ te = t = (char*) xmalloc(ns + 1);
assert(te); /* XXX can't happen */
if (te == NULL) {
argv = _free(argv);
return rc;
}
+ *te = '\0';
argv[argc] = te;
for (se = s; *se != '\0'; se++) {
@@ -118,13 +120,14 @@ assert(te); /* XXX can't happen */
*te++ = *se;
} else if (_isspaceptr(se)) {
if (*argv[argc] != '\0') {
- te++, argc++;
+ *te++ = '\0', argc++;
if (argc == argvAlloced) {
argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA;
argv = (const char**) xrealloc(argv, sizeof(*argv) * argvAlloced);
assert(argv); /* XXX can't happen */
if (argv == NULL) goto exit;
}
+ *te = '\0';
argv[argc] = te;
}
} else
@@ -147,7 +150,7 @@ assert(argv); /* XXX can't happen */
}
if (strlen(argv[argc])) {
- argc++, te++;
+ argc++, *te++ = '\0';
}
rc = poptDupArgv(argc, argv, argcPtr, argvPtr);