X-Git-Url: http://git.tuebingen.mpg.de/?p=dss.git;a=blobdiff_plain;f=str.c;h=13776300d6ca1aa62479df6be4428a5ba8d836a0;hp=ff8f02a4846af402c71b8a2818f2db7fceedfde8;hb=HEAD;hpb=16f02580474d5f4a284863f48416a2a51fa78e85 diff --git a/str.c b/str.c index ff8f02a..1377630 100644 --- a/str.c +++ b/str.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2004-2010 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* SPDX-License-Identifier: GPL-2.0 */ #include #include #include @@ -20,36 +16,6 @@ #include "err.h" #include "str.h" -/** - * Write a message to a dynamically allocated string. - * - * \param fmt Usual format string. - * \param p Result pointer. - * - * \sa printf(3). */ -#define VSPRINTF(fmt, p) \ -{ \ - int n; \ - size_t size = 100; \ - p = dss_malloc(size); \ - while (1) { \ - va_list ap; \ - /* Try to print in the allocated space. */ \ - va_start(ap, fmt); \ - n = vsnprintf(p, size, fmt, ap); \ - va_end(ap); \ - /* If that worked, return the string. */ \ - if (n > -1 && n < size) \ - break; \ - /* Else try again with more space. */ \ - if (n > -1) /* glibc 2.1 */ \ - size = n + 1; /* precisely what is needed */ \ - else /* glibc 2.0 */ \ - size *= 2; /* twice the old size */ \ - p = dss_realloc(p, size); \ - } \ -} - /** * dss' version of realloc(). * @@ -165,9 +131,24 @@ __must_check __malloc char *dss_strdup(const char *s) __must_check __printf_1_2 __malloc char *make_message(const char *fmt, ...) { char *msg; + size_t size = 100; - VSPRINTF(fmt, msg); - return msg; + msg = dss_malloc(size); + while (1) { + int n; + va_list ap; + + /* Try to print in the allocated space. */ + va_start(ap, fmt); + n = vsnprintf(msg, size, fmt, ap); + va_end(ap); + /* If that worked, return the string. */ + if (n < size) + return msg; + /* Else try again with more space. */ + size = n + 1; /* precisely what is needed */ + msg = dss_realloc(msg, size); + } } /** @@ -231,20 +212,21 @@ __must_check __malloc char *dss_logname(void) * * \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 occurrence of \a delim by - * 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. + * This function modifies the string given by the first argument by replacing + * all occurrences of space and '\t' characters by '\0'. A NULL-terminated + * array of pointers to char * is allocated dynamically, and these pointers are + * initialized to point to the broken-up substrings. A pointer to this array + * is returned via the last argument. * - * \return The number of substrings found in \a args. + * \return The number of substrings found. */ -unsigned split_args(char *args, char *** const argv_ptr, const char *delim) +unsigned split_args(char *args, char *** const argv_ptr) { char *p; char **argv; size_t n = 0, i, j; + const char delim[] = " \t"; p = args + strspn(args, delim); for (;;) {