* libbb/xfuncs.c (xmalloc, xcalloc): Do not exit if a zero-length buffer is
authorMatt Kraai <kraai@debian.org>
Tue, 26 Feb 2002 15:28:22 +0000 (15:28 -0000)
committerMatt Kraai <kraai@debian.org>
Tue, 26 Feb 2002 15:28:22 +0000 (15:28 -0000)
  requested.
  (xrealloc): Simplify.

libbb/xfuncs.c

index 291bfafd6276acf798010a5e64a9af8fea97c1f5..57c698079fd72231279c6fe6e39717373fdc1835 100644 (file)
 extern void *xmalloc(size_t size)
 {
        void *ptr = malloc(size);
-
-       if (!ptr)
+       if (ptr == NULL && size != 0)
                error_msg_and_die(memory_exhausted);
        return ptr;
 }
 
-extern void *xrealloc(void *old, size_t size)
+extern void *xrealloc(void *ptr, size_t 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)
+       ptr = realloc(ptr, size);
+       if (ptr == NULL && size != 0)
                error_msg_and_die(memory_exhausted);
        return ptr;
 }
@@ -57,7 +46,7 @@ extern void *xrealloc(void *old, size_t size)
 extern void *xcalloc(size_t nmemb, size_t size)
 {
        void *ptr = calloc(nmemb, size);
-       if (!ptr)
+       if (ptr == NULL && nmemb != 0 && size != 0)
                error_msg_and_die(memory_exhausted);
        return ptr;
 }