X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=lib%2Fxmalloc.c;h=e1ab3140b79e08c5b2c0077deb564afe041b2c2d;hp=204469f240ab7a67a48f92bdbe3e2ed92aafec61;hb=0a3c8cefd4a154948799baaaa246cf0eba050eff;hpb=1243156a5e03a666b36bc4400f1402243a85c9a7 diff --git a/lib/xmalloc.c b/lib/xmalloc.c index 204469f2..e1ab3140 100644 --- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -20,6 +20,8 @@ #endif #include +#include +#include #if STDC_HEADERS # include @@ -39,7 +41,6 @@ void free (); #endif #define N_(Text) Text -#include "error.h" #include "xalloc.h" #ifndef EXIT_FAILURE @@ -54,11 +55,11 @@ void *xrealloc (void *p, size_t n); #endif #ifndef HAVE_DONE_WORKING_MALLOC_CHECK -you must run the autoconf test for a properly working malloc -- see malloc.m4 +#error you must run the autoconf test for a properly working malloc -- see malloc.m4 #endif #ifndef HAVE_DONE_WORKING_REALLOC_CHECK -you must run the autoconf test for a properly working realloc -- see realloc.m4 +#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. @@ -69,20 +70,15 @@ int xalloc_exit_failure = EXIT_FAILURE; char *const xalloc_msg_memory_exhausted = N_("Memory exhausted"); /* FIXME: describe */ -void (*xalloc_fail_func) () = 0; - -#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT) -void error (int, int, const char *, ...); -#else -void error (); -#endif +void (*xalloc_fail_func) (int) = 0; static void -xalloc_fail () +xalloc_fail (int size) { if (xalloc_fail_func) - (*xalloc_fail_func) (); - error (xalloc_exit_failure, 0, xalloc_msg_memory_exhausted); + (*xalloc_fail_func) (size); + fprintf(stderr, "%s\n", xalloc_msg_memory_exhausted); + exit(xalloc_exit_failure); } /* Allocate N bytes of memory dynamically, with error checking. */ @@ -95,7 +91,22 @@ xmalloc (n) p = malloc (n); if (p == 0) - xalloc_fail (); + xalloc_fail ((int)n); + return p; +} + +/* Allocate N bytes of memory dynamically, and set it all to zero. */ + +void * +xmalloc_and_zero (n) + size_t n; +{ + void *p; + + p = malloc (n); + if (p == 0) + xalloc_fail ((int)n); + memset (p, '\0', n); return p; } @@ -110,7 +121,19 @@ xrealloc (p, n) { p = realloc (p, n); if (p == 0) - xalloc_fail (); + xalloc_fail (n); + return p; +} + +/* Duplicate a string */ + +char *xstrdup(const char *s) +{ + char *p; + + p = strdup(s); + if(!p) + xalloc_fail ((int)strlen(s)); return p; }