Home | History | Annotate | Line # | Download | only in import
      1 /* realloc() function that is glibc compatible.
      2 
      3    Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software
      4    Foundation, Inc.
      5 
      6    This file is free software: you can redistribute it and/or modify
      7    it under the terms of the GNU Lesser General Public License as
      8    published by the Free Software Foundation; either version 2.1 of the
      9    License, or (at your option) any later version.
     10 
     11    This file is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU Lesser General Public License for more details.
     15 
     16    You should have received a copy of the GNU Lesser General Public License
     17    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
     18 
     19 /* written by Jim Meyering and Bruno Haible */
     20 
     21 #include <config.h>
     22 
     23 #include <stdlib.h>
     24 
     25 #include <errno.h>
     26 
     27 #include "xalloc-oversized.h"
     28 
     29 /* Call the system's realloc below.  This file does not define
     30    _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present.  */
     31 #undef realloc
     32 
     33 /* Change the size of an allocated block of memory P to N bytes,
     34    with error checking.  If P is NULL, use malloc.  Otherwise if N is zero,
     35    free P and return NULL.  */
     36 
     37 void *
     38 rpl_realloc (void *p, size_t n)
     39 {
     40   if (p == NULL)
     41     return malloc (n);
     42 
     43   if (n == 0)
     44     {
     45       free (p);
     46       return NULL;
     47     }
     48 
     49   if (xalloc_oversized (n, 1))
     50     {
     51       errno = ENOMEM;
     52       return NULL;
     53     }
     54 
     55   void *result = realloc (p, n);
     56 
     57 #if !HAVE_MALLOC_POSIX
     58   if (result == NULL)
     59     errno = ENOMEM;
     60 #endif
     61 
     62   return result;
     63 }
     64