X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=string.c;h=fba36e5fcc6f92ca1542fd9b5989f61099ad584a;hp=07f54a07155d5ee385c0c1e044c21017906688ce;hb=c430e588047c5db3eb0d043c4dd1378680ec2bcf;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623 diff --git a/string.c b/string.c index 07f54a07..fba36e5f 100644 --- a/string.c +++ b/string.c @@ -210,8 +210,8 @@ __must_check __malloc char *para_basename(const char *name) * string which may contain a single string conversion specifier which gets * replaced by 'arg'. * - * \return A string in which all matches in \a src are replaced, or NULL if \a - * macro_name was not found in \a src. Caller must free the result. + * \return A string in which all matches in \a src are replaced, or NULL if an + * syntax error was encountered. Caller must free the result. * * \sa regcomp(3) */ @@ -273,8 +273,8 @@ __must_check __malloc char *s_a_r_list(struct para_macro *macro_list, char *src) while (mp->name) { ret = s_a_r(tmp, mp->name, mp->replacement); free(tmp); - if (!ret) - return src; /* FIXME: shouldn't we continue here? */ + if (!ret) /* syntax error */ + return NULL; tmp = ret; mp++; } @@ -374,7 +374,8 @@ __must_check __malloc char *para_homedir(void) * This function modifies \a args by replacing each occurance of \a delim by * zero. A NULL-terminated array of pointers to char* is allocated dynamically * and these pointers are initialized to point to the broken-up substrings - * within \a args. A pointer to this array is returned via \a argv_ptr. + * within \a args. A pointer to this array is returned via \a argv_ptr. It's OK + * to call this function with \a args == NULL. * * \return The number of substrings found in \a args. */ @@ -384,11 +385,11 @@ __must_check unsigned split_args(char *args, char ***argv_ptr, int delim) char **argv; ssize_t n = 0, i; - while ((p = strchr(p, delim))) { + while (p && (p = strchr(p, delim))) { p++; n++; } - *argv_ptr = para_malloc((n + 3) * sizeof(char *)); + *argv_ptr = para_calloc((n + 3) * sizeof(char *)); argv = *argv_ptr; i = 0; p = args; @@ -404,7 +405,6 @@ __must_check unsigned split_args(char *args, char ***argv_ptr, int delim) i++; } } - argv[n + 1] = NULL; return n; }