Add xasprintf() and xvasprintf().
[oweals/tinc.git] / lib / xmalloc.c
index e7541bddeefb4f40f72eae67da7670a735470a1e..51356e460b71b45c48d08cf9e6b3e0436b28db50 100644 (file)
@@ -22,6 +22,8 @@
 #include <sys/types.h>
 #include <stdio.h>
 #include <string.h>
+#include <stdarg.h>
+#include <errno.h>
 
 #if STDC_HEADERS
 # include <stdlib.h>
@@ -46,14 +48,6 @@ void *xcalloc (size_t n, size_t s);
 void *xrealloc (void *p, size_t n);
 #endif
 
-#ifndef HAVE_DONE_WORKING_MALLOC_CHECK
-#error you must run the autoconf test for a properly working malloc -- see malloc.m4
-#endif
-
-#ifndef HAVE_DONE_WORKING_REALLOC_CHECK
-#error you must run the autoconf test for a properly working realloc -- see realloc.m4
-#endif
-
 /* Exit value when the requested amount of memory is not available.
    The caller may set it to some other value.  */
 int xalloc_exit_failure = EXIT_FAILURE;
@@ -146,3 +140,21 @@ xcalloc (n, s)
 }
 
 #endif /* NOT_USED */
+
+int xasprintf(char **strp, const char *fmt, ...) {
+       int result;
+       va_list ap;
+       va_start(ap, fmt);
+       result = xvasprintf(strp, fmt, ap);
+       va_end(ap);
+       return result;
+}
+
+int xvasprintf(char **strp, const char *fmt, va_list ap) {
+       int result = vasprintf(strp, fmt, ap);
+       if(result < 0) {
+               fprintf(stderr, "vasprintf() failed: %s\n", strerror(errno));
+               exit(xalloc_exit_failure);
+       }
+       return result;
+}