X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=string.c;h=2bdc7e89687cfe31235efb63b9a2af77469d460b;hp=056a414bb48b8d0cf1d62444aa9586cbde36c91c;hb=6693375b52f2712ace6dc50b717de9cb371a7c2a;hpb=09e1e9039b42f00bcfa64091700d611931618bca diff --git a/string.c b/string.c index 056a414b..2bdc7e89 100644 --- a/string.c +++ b/string.c @@ -382,32 +382,40 @@ __must_check __malloc char *para_homedir(void) * * \return The number of substrings found in \a args. */ -__must_check unsigned split_args(char *args, char ***argv_ptr, int delim) + +__must_check unsigned split_args(char *args, char ***argv_ptr, const char *delim) { char *p = args; char **argv; - ssize_t n = 0, i; + size_t n = 0, i, j; - while (p && (p = strchr(p, delim))) { - p++; + p = args + strspn(args, delim); + for (;;) { + i = strcspn(p, delim); + if (!i) + break; + p += i; n++; + p += strspn(p, delim); } - *argv_ptr = para_calloc((n + 3) * sizeof(char *)); + *argv_ptr = para_malloc((n + 1) * sizeof(char *)); argv = *argv_ptr; i = 0; - p = args; -// printf("split_args: a:%s\n", p); + p = args + strspn(args, delim); while (p) { argv[i] = p; - p = strchr(p, delim); - if (p) { -// printf("a:%s\n", p); + j = strcspn(p, delim); + if (!j) + break; + p += strcspn(p, delim); + if (*p) { *p = '\0'; -// printf("b:\n"); p++; - i++; + p += strspn(p, delim); } + i++; } + argv[n] = NULL; return n; }