dss-0.1.7.
[dss.git] / str.c
diff --git a/str.c b/str.c
index ff8f02a..cca898d 100644 (file)
--- a/str.c
+++ b/str.c
 #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 +135,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;
+
+       msg = dss_malloc(size);
+       while (1) {
+               int n;
+               va_list ap;
 
-       VSPRINTF(fmt, msg);
-       return msg;
+               /* 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);
+       }
 }
 
 /**