aboutsummaryrefslogtreecommitdiffstats
path: root/support/xalloc.h
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2017-06-25 23:20:54 -0400
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2017-06-25 23:20:54 -0400
commitc07e72504d045f8e5070668e61fa5d8a3290ab66 (patch)
tree27881767587e12327c16d39ef3cce5915e90b1c6 /support/xalloc.h
parent44e29458a6355ad64e8d89676a441b224ce76cbc (diff)
downloadegawk-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.h21
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