home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / EMXLIB8F.ZIP / EMX / LIB / MALLOC / REALLOC.C < prev   
Encoding:
C/C++ Source or Header  |  1993-01-02  |  782 b   |  40 lines

  1. /* realloc.c (emx+gcc) -- Copyright (c) 1990-1993 by Eberhard Mattes */
  2.  
  3. #include <sys/emx.h>
  4. #include <stdlib.h>
  5.  
  6. void *realloc (void *mem, size_t new_size)
  7. {
  8.   void *p;
  9.   size_t *block;
  10.   size_t old_size;
  11.  
  12.   if (mem == NULL)
  13.     return (malloc (new_size));
  14.   if (new_size == 0)
  15.     {
  16.       free (mem);
  17.       return (NULL);
  18.     }
  19.   HEAP_LOCK;
  20.   block = mem;
  21.   --block;
  22.   old_size = (*block & ~3);
  23.   *block = old_size;          /* in use */
  24.   if (_expand2 (mem, new_size) != NULL)
  25.     {
  26.       HEAP_UNLOCK;
  27.       return (mem);
  28.     }
  29.   p = _malloc2 (new_size);
  30.   if (p != NULL)
  31.     {
  32.       memcpy (p, mem, old_size);
  33.       free (mem);
  34.     }
  35.   else
  36.     _expand2 (mem, old_size); /* shrink block to original size */
  37.   HEAP_UNLOCK;
  38.   return (p);
  39. }
  40.