X-Git-Url: http://git.tuebingen.mpg.de/?p=adu.git;a=blobdiff_plain;f=string.c;h=946faabdfd09ce688059c5d8ce15e140af282a29;hp=aec62ae9918f298578ec4881d7e9eebd63a1197f;hb=deaf87f500bfba2d1584c1476893bad4fc8b7ca1;hpb=26ace9b8c1dc872e5da1b1122b45f01419761aab diff --git a/string.c b/string.c index aec62ae..946faab 100644 --- a/string.c +++ b/string.c @@ -4,7 +4,7 @@ * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file string.c Memory allocation and string handling functions. */ +/** \file string.c \brief Memory allocation and string handling functions. */ #include "adu.h" #include "string.h" @@ -12,7 +12,7 @@ #include "error.h" /** - * Paraslash's version of realloc(). + * Adu's version of realloc(). * * \param p Pointer to the memory block, may be \p NULL. * \param size The desired new size. @@ -41,7 +41,7 @@ __must_check __malloc void *adu_realloc(void *p, size_t size) } /** - * Paraslash's version of malloc(). + * Adu's version of malloc(). * * \param size The desired new size. * @@ -66,7 +66,7 @@ __must_check __malloc void *adu_malloc(size_t size) } /** - * Paraslash's version of calloc(). + * Adu's version of calloc(). * * \param size The desired new size. * @@ -86,7 +86,7 @@ __must_check __malloc void *adu_calloc(size_t size) } /** - * Paraslash's version of strdup(). + * Adu's version of strdup(). * * \param s The string to be duplicated. * @@ -138,7 +138,7 @@ __must_check __printf_1_2 __malloc char *make_message(const char *fmt, ...) * Append \p b to \p a. * * \return If \a a is \p NULL, return a pointer to a copy of \a b, i.e. - * para_strcat(NULL, b) is equivalent to para_strdup(b). If \a b is \p NULL, + * adu_strcat(NULL, b) is equivalent to adu_strdup(b). If \a b is \p NULL, * return \a a without making a copy of \a a. Otherwise, construct the * concatenation \a c, free \a a (but not \a b) and return \a c. * @@ -196,14 +196,14 @@ __must_check int atoi64(const char *str, int64_t *result) } /** - * Split string and return pointers to its parts. + * Split a string and return pointers to its parts. * * \param args The string to be split. * \param argv_ptr Pointer to the list of substrings. * \param delim Delimiter. * * This function modifies \a args by replacing each occurance of \a delim by - * zero. A \p NULL-terminated array of pointers to char* is allocated dynamically + * zero. A \p 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. * @@ -245,10 +245,11 @@ __must_check unsigned split_args(char *args, char *** const argv_ptr, const char return n; } -enum line_state_flags {LSF_HAVE_WORD = 1, LSF_BACKSLASH = 2, LSF_QUOTE = 4}; static int get_next_word(const char *line, char **word) { + enum line_state_flags {LSF_HAVE_WORD = 1, LSF_BACKSLASH = 2, + LSF_QUOTE = 4}; const char *in; char *out; int ret, state = 0; @@ -320,6 +321,11 @@ out: return ret; } +/** + * Free an array of words created by create_argv(). + * + * \param argv A pointer previously obtained by \ref create_argv(). + */ void free_argv(char **argv) { int i; @@ -330,6 +336,16 @@ void free_argv(char **argv) } /** + * Split a line into words which are separated by whitespace. + * + * In contrast to gengetopt's string parser, double quotes, backslash-escaped + * characters and special characters like \p \\n are honored. The result + * contains pointers to copies of the words contained in \a line and has to be + * freed by using \ref free_argv(). + * + * \param line The line to be split. + * \param result The array of words is returned here. + * * \return Number of words in \a line, negative on errors. */ int create_argv(const char *line, char ***result)