diff options
| author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-10-11 14:49:26 -0700 | 
|---|---|---|
| committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-10-11 15:19:40 -0700 | 
| commit | 011c1d1c0766c65517ebd495465c99e86edb63ec (patch) | |
| tree | 30d8f6a13235af90897c3223554871ef52225462 /xmalloc.c | |
| parent | 40cfaccf7b178b6239b5cd0013ef80b7ff8e503e (diff) | |
| download | vyatta-bash-011c1d1c0766c65517ebd495465c99e86edb63ec.tar.gz vyatta-bash-011c1d1c0766c65517ebd495465c99e86edb63ec.zip  | |
Update to bash-4.1
Diffstat (limited to 'xmalloc.c')
| -rw-r--r-- | xmalloc.c | 130 | 
1 files changed, 80 insertions, 50 deletions
@@ -1,23 +1,22 @@  /* xmalloc.c -- safe versions of malloc and realloc */ -/* Copyright (C) 1991 Free Software Foundation, Inc. +/* Copyright (C) 1991-2009 Free Software Foundation, Inc. -   This file is part of GNU Readline, a library for reading lines -   of text with interactive input and history editing. +   This file is part of GNU Bash, the GNU Bourne Again SHell. -   Readline is free software; you can redistribute it and/or modify it -   under the terms of the GNU General Public License as published by the -   Free Software Foundation; either version 2, or (at your option) any -   later version. +   Bash is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. -   Readline is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   General Public License for more details. +   Bash is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details.     You should have received a copy of the GNU General Public License -   along with Readline; see the file COPYING.  If not, write to the Free -   Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ +   along with Bash.  If not, see <http://www.gnu.org/licenses/>. +*/  #if defined (HAVE_CONFIG_H)  #include <config.h> @@ -63,18 +62,38 @@ static size_t allocated;  /* **************************************************************** */  #if defined (HAVE_SBRK) +#define FINDBRK() \ +do { \ +  if (brkfound == 0) \ +    { \ +      lbreak = (PTR_T)sbrk (0); \ +      brkfound++; \ +    } \ +} while (0) +  static size_t  findbrk ()  { -  if (brkfound == 0) -    { -      lbreak = (PTR_T)sbrk (0); -      brkfound++; -    } +  FINDBRK();    return (char *)sbrk (0) - (char *)lbreak;  } +#else +#define FINDBRK()  #endif +static void +allocerr (func, bytes) +     const char *func; +     size_t bytes; +{ +#if defined (HAVE_SBRK) +      allocated = findbrk (); +      fatal_error (_("%s: cannot allocate %lu bytes (%lu bytes allocated)"), func, (unsigned long)bytes, (unsigned long)allocated); +#else +      fatal_error (_("%s: cannot allocate %lu bytes"), func, (unsigned long)bytes); +#endif /* !HAVE_SBRK */ +} +  /* Return a pointer to free()able block of memory large enough     to hold BYTES number of bytes.  If the memory cannot be allocated,     print an error message and abort. */ @@ -84,17 +103,16 @@ xmalloc (bytes)  {    PTR_T temp; +#if defined (DEBUG) +  if (bytes == 0) +    internal_warning("xmalloc: size argument is 0"); +#endif + +  FINDBRK();    temp = malloc (bytes);    if (temp == 0) -    { -#if defined (HAVE_SBRK) -      allocated = findbrk (); -      fatal_error (_("xmalloc: cannot allocate %lu bytes (%lu bytes allocated)"), (unsigned long)bytes, (unsigned long)allocated); -#else -      fatal_error (_("xmalloc: cannot allocate %lu bytes"), (unsigned long)bytes); -#endif /* !HAVE_SBRK */ -    } +    allocerr ("xmalloc", bytes);    return (temp);  } @@ -106,17 +124,16 @@ xrealloc (pointer, bytes)  {    PTR_T temp; +#if defined (DEBUG) +  if (bytes == 0) +    internal_warning("xrealloc: size argument is 0"); +#endif + +  FINDBRK();    temp = pointer ? realloc (pointer, bytes) : malloc (bytes);    if (temp == 0) -    { -#if defined (HAVE_SBRK) -      allocated = findbrk (); -      fatal_error (_("xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"), (unsigned long)bytes, (unsigned long)allocated); -#else -      fatal_error (_("xrealloc: cannot allocate %lu bytes"), (unsigned long)bytes); -#endif /* !HAVE_SBRK */ -    } +    allocerr ("xrealloc", bytes);    return (temp);  } @@ -134,6 +151,21 @@ xfree (string)  #ifdef USING_BASH_MALLOC  #include <malloc/shmalloc.h> +static void +sh_allocerr (func, bytes, file, line) +     const char *func; +     size_t bytes; +     char *file; +     int line; +{ +#if defined (HAVE_SBRK) +      allocated = findbrk (); +      fatal_error (_("%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"), func, file, line, (unsigned long)bytes, (unsigned long)allocated); +#else +      fatal_error (_("%s: %s:%d: cannot allocate %lu bytes"), func, file, line, (unsigned long)bytes); +#endif /* !HAVE_SBRK */ +} +  PTR_T  sh_xmalloc (bytes, file, line)       size_t bytes; @@ -142,17 +174,16 @@ sh_xmalloc (bytes, file, line)  {    PTR_T temp; +#if defined (DEBUG) +  if (bytes == 0) +    internal_warning("xmalloc: %s:%d: size argument is 0", file, line); +#endif + +  FINDBRK();    temp = sh_malloc (bytes, file, line);    if (temp == 0) -    { -#if defined (HAVE_SBRK) -      allocated = findbrk (); -      fatal_error (_("xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"), file, line, (unsigned long)bytes, (unsigned long)allocated); -#else -      fatal_error (_("xmalloc: %s:%d: cannot allocate %lu bytes"), file, line, (unsigned long)bytes); -#endif /* !HAVE_SBRK */ -    } +    sh_allocerr ("xmalloc", bytes, file, line);    return (temp);  } @@ -166,17 +197,16 @@ sh_xrealloc (pointer, bytes, file, line)  {    PTR_T temp; +#if defined (DEBUG) +  if (bytes == 0) +    internal_warning("xrealloc: %s:%d: size argument is 0", file, line); +#endif + +  FINDBRK();    temp = pointer ? sh_realloc (pointer, bytes, file, line) : sh_malloc (bytes, file, line);    if (temp == 0) -    { -#if defined (HAVE_SBRK) -      allocated = findbrk (); -      fatal_error (_("xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)"), file, line, (unsigned long)bytes, (unsigned long)allocated); -#else -      fatal_error (_("xrealloc: %s:%d: cannot allocate %lu bytes"), file, line, (unsigned long)bytes); -#endif /* !HAVE_SBRK */ -    } +    sh_allocerr ("xrealloc", bytes, file, line);    return (temp);  }  | 
