Imported from ../bash-3.2.48.tar.gz.
[platform/upstream/bash.git] / xmalloc.c
index 4c962a1..93d1928 100644 (file)
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -7,7 +7,7 @@
 
    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
 
    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 1, or (at your option) any
+   Free Software Foundation; either version 2, or (at your option) any
    later version.
 
    Readline is distributed in the hope that it will be useful, but
    later version.
 
    Readline is distributed in the hope that it will be useful, but
@@ -17,7 +17,7 @@
 
    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
 
    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, 675 Mass Ave, Cambridge, MA 02139, USA. */
+   Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
 
 #if defined (HAVE_CONFIG_H)
 #include <config.h>
 
 #if defined (HAVE_CONFIG_H)
 #include <config.h>
@@ -38,6 +38,8 @@
 
 #include "error.h"
 
 
 #include "error.h"
 
+#include "bashintl.h"
+
 #if !defined (PTR_T)
 #  if defined (__STDC__)
 #    define PTR_T void *
 #if !defined (PTR_T)
 #  if defined (__STDC__)
 #    define PTR_T void *
@@ -46,7 +48,7 @@
 #  endif /* !__STDC__ */
 #endif /* !PTR_T */
 
 #  endif /* !__STDC__ */
 #endif /* !PTR_T */
 
-#if !defined (SBRK_DECLARED)
+#if defined (HAVE_SBRK) && !HAVE_DECL_SBRK
 extern char *sbrk();
 #endif
 
 extern char *sbrk();
 #endif
 
@@ -60,49 +62,60 @@ static size_t allocated;
 /*                                                                 */
 /* **************************************************************** */
 
 /*                                                                 */
 /* **************************************************************** */
 
+#if defined (HAVE_SBRK)
+static size_t
+findbrk ()
+{
+  if (brkfound == 0)
+    {
+      lbreak = (PTR_T)sbrk (0);
+      brkfound++;
+    }
+  return (char *)sbrk (0) - (char *)lbreak;
+}
+#endif
+
 /* 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. */
 /* 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. */
-char *
+PTR_T
 xmalloc (bytes)
      size_t bytes;
 {
 xmalloc (bytes)
      size_t bytes;
 {
-  char *temp;
+  PTR_T temp;
 
 
-  temp = (char *)malloc (bytes);
+  temp = malloc (bytes);
 
   if (temp == 0)
     {
 
   if (temp == 0)
     {
-      if (brkfound == 0)
-       {
-         lbreak = (PTR_T)sbrk (0);
-         brkfound++;
-       }
-      allocated = (char *)sbrk (0) - (char *)lbreak;
-      fatal_error ("xmalloc: cannot allocate %lu bytes (%lu bytes allocated)", (unsigned long)bytes, (unsigned long)allocated);
+#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 */
     }
 
   return (temp);
 }
 
     }
 
   return (temp);
 }
 
-char *
+PTR_T
 xrealloc (pointer, bytes)
      PTR_T pointer;
      size_t bytes;
 {
 xrealloc (pointer, bytes)
      PTR_T pointer;
      size_t bytes;
 {
-  char *temp;
+  PTR_T temp;
 
 
-  temp = pointer ? (char *)realloc (pointer, bytes) : (char *)malloc (bytes);
+  temp = pointer ? realloc (pointer, bytes) : malloc (bytes);
 
   if (temp == 0)
     {
 
   if (temp == 0)
     {
-      if (brkfound == 0)
-       {
-         lbreak = (PTR_T)sbrk (0);
-         brkfound++;
-       }
-      allocated = (char *)sbrk (0) - (char *)lbreak;
-      fatal_error ("xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)", (unsigned long)bytes, (unsigned long)allocated);
+#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 */
     }
 
   return (temp);
     }
 
   return (temp);
@@ -112,8 +125,69 @@ xrealloc (pointer, bytes)
    don't need to know what free() returns. */
 void
 xfree (string)
    don't need to know what free() returns. */
 void
 xfree (string)
-     char *string;
+     PTR_T string;
 {
   if (string)
     free (string);
 }
 {
   if (string)
     free (string);
 }
+
+#ifdef USING_BASH_MALLOC
+#include <malloc/shmalloc.h>
+
+PTR_T
+sh_xmalloc (bytes, file, line)
+     size_t bytes;
+     char *file;
+     int line;
+{
+  PTR_T temp;
+
+  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 */
+    }
+
+  return (temp);
+}
+
+PTR_T
+sh_xrealloc (pointer, bytes, file, line)
+     PTR_T pointer;
+     size_t bytes;
+     char *file;
+     int line;
+{
+  PTR_T temp;
+
+  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 */
+    }
+
+  return (temp);
+}
+
+void
+sh_xfree (string, file, line)
+     PTR_T string;
+     char *file;
+     int line;
+{
+  if (string)
+    sh_free (string, file, line);
+}
+#endif