(root)/
tar-1.35/
gnu/
realloc.c
       1  /* realloc() function that is glibc compatible.
       2  
       3     Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2023 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  }