Add stricter checks for netnames.
[tinc] / src / xalloc.h
index 42d0d95..28960fb 100644 (file)
@@ -1,7 +1,7 @@
 /*
    xalloc.h -- malloc and related fuctions with out of memory checking
    Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc.
-   Copyright (C) 2011 Guus Sliepen <guus@tinc-vpn.org>
+   Copyright (C) 2011-2013 Guus Sliepen <guus@tinc-vpn.org>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
 #ifndef __TINC_XALLOC_H__
 #define __TINC_XALLOC_H__
 
+static inline void *xmalloc(size_t n) __attribute__ ((__malloc__));
 static inline void *xmalloc(size_t n) {
        void *p = malloc(n);
        if(!p)
@@ -27,7 +28,8 @@ static inline void *xmalloc(size_t n) {
        return p;
 }
 
-static inline void *xmalloc_and_zero(size_t n) {
+static inline void *xzalloc(size_t n) __attribute__ ((__malloc__));
+static inline void *xzalloc(size_t n) {
        void *p = calloc(1, n);
        if(!p)
                abort();
@@ -41,6 +43,7 @@ static inline void *xrealloc(void *p, size_t n) {
        return p;
 }
 
+static inline char *xstrdup(const char *s) __attribute__ ((__malloc__));
 static inline char *xstrdup(const char *s) {
        char *p = strdup(s);
        if(!p)
@@ -49,12 +52,21 @@ static inline char *xstrdup(const char *s) {
 }
 
 static inline int xvasprintf(char **strp, const char *fmt, va_list ap) {
+#ifdef HAVE_MINGW
+       char buf[1024];
+       int result = vsnprintf(buf, sizeof buf, fmt, ap);
+       if(result < 0)
+               abort();
+       *strp = xstrdup(buf);
+#else
        int result = vasprintf(strp, fmt, ap);
        if(result < 0)
                abort();
+#endif
        return result;
 }
 
+static inline int xasprintf(char **strp, const char *fmt, ...) __attribute__ ((__format__(printf, 2, 3)));
 static inline int xasprintf(char **strp, const char *fmt, ...) {
        va_list ap;
        va_start(ap, fmt);