From 41640fd22de6bd90cee0e0ea344296ca8c5efc07 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 26 Oct 1994 12:55:54 +0000 Subject: [PATCH] GNU shell utilities --- lib/xmalloc.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/xmalloc.c b/lib/xmalloc.c index 0a4ad4f35..9f701111b 100644 --- a/lib/xmalloc.c +++ b/lib/xmalloc.c @@ -49,6 +49,20 @@ void error (int, int, const char *, ...); void error (); #endif +static VOID * +fixup_null_alloc (n) + size_t n; +{ + VOID *p; + + p = 0; + if (n == 0) + p = malloc ((size_t) 1); + if (p == 0) + error (xmalloc_exit_failure, 0, "memory exhausted"); + return p; +} + /* Allocate N bytes of memory dynamically, with error checking. */ VOID * @@ -59,14 +73,13 @@ xmalloc (n) p = malloc (n); if (p == 0) - error (xmalloc_exit_failure, 0, "memory exhausted"); + p = fixup_null_alloc (n); return p; } /* Change the size of an allocated block of memory P to N bytes, with error checking. - If P is NULL, run xmalloc. - If N is 0, run free and return NULL. */ + If P is NULL, run xmalloc. */ VOID * xrealloc (p, n) @@ -75,13 +88,8 @@ xrealloc (p, n) { if (p == 0) return xmalloc (n); - if (n == 0) - { - free (p); - return 0; - } p = realloc (p, n); if (p == 0) - error (xmalloc_exit_failure, 0, "memory exhausted"); + p = fixup_null_alloc (n); return p; } -- 2.11.0