diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2017-06-25 23:20:54 -0400 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2017-06-25 23:20:54 -0400 |
commit | c07e72504d045f8e5070668e61fa5d8a3290ab66 (patch) | |
tree | 27881767587e12327c16d39ef3cce5915e90b1c6 /support/xalloc.h | |
parent | 44e29458a6355ad64e8d89676a441b224ce76cbc (diff) | |
download | egawk-c07e72504d045f8e5070668e61fa5d8a3290ab66.tar.gz egawk-c07e72504d045f8e5070668e61fa5d8a3290ab66.tar.bz2 egawk-c07e72504d045f8e5070668e61fa5d8a3290ab66.zip |
Remove xmalloc from gawkmisc.c, and improve dfa xalloc by using calloc instead of malloc+memset.
Diffstat (limited to 'support/xalloc.h')
-rw-r--r-- | support/xalloc.h | 21 |
1 files changed, 18 insertions, 3 deletions
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 <errno.h> 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 |