From: Eric Andersen Date: Thu, 28 Jun 2001 21:22:19 +0000 (-0000) Subject: Allow xrealloc to act as a free() when size=0, per SuS2. X-Git-Tag: 0_52~46 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=029b4a04221794101812407f5c60155bdfdd1481;p=oweals%2Fbusybox.git Allow xrealloc to act as a free() when size=0, per SuS2. -Erik --- diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index f3b294be2..eb93bf139 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -44,7 +44,17 @@ extern void *xmalloc(size_t size) extern void *xrealloc(void *old, size_t size) { - void *ptr = realloc(old, size); + void *ptr; + + /* SuS2 says "If size is 0 and ptr is not a null pointer, the + * object pointed to is freed." Do that here, in case realloc + * returns a NULL, since we don't want to choke in that case. */ + if (size==0 && old) { + free(old); + return NULL; + } + + ptr = realloc(old, size); if (!ptr) error_msg_and_die(memory_exhausted); return ptr;