diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2017-06-27 06:14:43 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2017-06-27 06:14:43 +0300 |
commit | 09ae00a76b925945cffff657b02e69117a68b39e (patch) | |
tree | ce99064e7a31a553a2a6d5b7083518a4561e7c08 /support/xalloc.h | |
parent | 454efb85895d4194da67e0dcc244a54bcc9a1964 (diff) | |
parent | 6927f0de4c06b60fbb74ea85e0d50f6d4a5f500b (diff) | |
download | egawk-09ae00a76b925945cffff657b02e69117a68b39e.tar.gz egawk-09ae00a76b925945cffff657b02e69117a68b39e.tar.bz2 egawk-09ae00a76b925945cffff657b02e69117a68b39e.zip |
Merge branch 'master' into feature/api-mpfr
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 |