From c07e72504d045f8e5070668e61fa5d8a3290ab66 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Sun, 25 Jun 2017 23:20:54 -0400 Subject: Remove xmalloc from gawkmisc.c, and improve dfa xalloc by using calloc instead of malloc+memset. --- support/xalloc.h | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'support/xalloc.h') diff --git a/support/xalloc.h b/support/xalloc.h index 0d169cf9..89dbe2c1 100644 --- a/support/xalloc.h +++ b/support/xalloc.h @@ -138,6 +138,17 @@ xnmalloc (size_t n, size_t s) #include extern void r_fatal(const char *msg, ...) ATTRIBUTE_NORETURN ; +void * +xmalloc(size_t bytes) +{ + void *p; + if (bytes == 0) + bytes = 1; /* avoid dfa.c mishegos */ + if ((p = malloc(bytes)) == NULL) + xalloc_die (); + return p; +} + /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. Clear the contents afterwards. */ @@ -145,8 +156,12 @@ extern void r_fatal(const char *msg, ...) ATTRIBUTE_NORETURN ; void * xcalloc(size_t nmemb, size_t size) { - void *p = xmalloc (nmemb * size); - memset(p, '\0', nmemb * size); + void *p; + + if (nmemb == 0 || size == 0) + nmemb = size = 1; /* avoid dfa.c mishegos */ + if ((p = calloc(nmemb, size)) == NULL) + xalloc_die (); return p; } @@ -314,7 +329,7 @@ xcharalloc (size_t n) inline void * xzalloc (size_t s) { - return memset (xmalloc (s), 0, s); + return xcalloc(1, s); } # endif -- cgit v1.2.3