]> git.tuebingen.mpg.de Git - dss.git/blobdiff - str.c
Fix --config-file for relative paths.
[dss.git] / str.c
diff --git a/str.c b/str.c
index ff8f02a4846af402c71b8a2818f2db7fceedfde8..13776300d6ca1aa62479df6be4428a5ba8d836a0 100644 (file)
--- a/str.c
+++ b/str.c
@@ -1,8 +1,4 @@
-/*
- * Copyright (C) 2004-2010 Andre Noll <maan@tuebingen.mpg.de>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* SPDX-License-Identifier: GPL-2.0 */
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #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 (;;) {