home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / readline.zip / readline-2.1 / xmalloc.c < prev   
C/C++ Source or Header  |  1996-02-15  |  2KB  |  88 lines

  1. /* xmalloc.c -- safe versions of malloc and realloc */
  2.  
  3. /* Copyright (C) 1991 Free Software Foundation, Inc.
  4.  
  5.    This file is part of GNU Readline, a library for reading lines
  6.    of text with interactive input and history editing.
  7.  
  8.    Readline is free software; you can redistribute it and/or modify it
  9.    under the terms of the GNU General Public License as published by the
  10.    Free Software Foundation; either version 1, or (at your option) any
  11.    later version.
  12.  
  13.    Readline is distributed in the hope that it will be useful, but
  14.    WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.    General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with Readline; see the file COPYING.  If not, write to the Free
  20.    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
  21.  
  22. #if defined (HAVE_CONFIG_H)
  23. #include <config.h>
  24. #endif
  25.  
  26. #include <stdio.h>
  27.  
  28. #if defined (HAVE_STDLIB_H)
  29. #  include <stdlib.h>
  30. #else
  31. #  include "ansi_stdlib.h"
  32. #endif /* HAVE_STDLIB_H */
  33.  
  34. static void memory_error_and_abort ();
  35.  
  36. /* **************************************************************** */
  37. /*                                    */
  38. /*           Memory Allocation and Deallocation.            */
  39. /*                                    */
  40. /* **************************************************************** */
  41.  
  42. /* Return a pointer to free()able block of memory large enough
  43.    to hold BYTES number of bytes.  If the memory cannot be allocated,
  44.    print an error message and abort. */
  45. char *
  46. xmalloc (bytes)
  47.      int bytes;
  48. {
  49.   char *temp;
  50.  
  51.   temp = (char *)malloc (bytes);
  52.   if (temp == 0)
  53.     memory_error_and_abort ("xmalloc");
  54.   return (temp);
  55. }
  56.  
  57. char *
  58. xrealloc (pointer, bytes)
  59.      char *pointer;
  60.      int bytes;
  61. {
  62.   char *temp;
  63.  
  64.   temp = pointer ? (char *)realloc (pointer, bytes) : (char *)malloc (bytes);
  65.  
  66.   if (temp == 0)
  67.     memory_error_and_abort ("xrealloc");
  68.   return (temp);
  69. }
  70.  
  71. static void
  72. memory_error_and_abort (fname)
  73.      char *fname;
  74. {
  75.   fprintf (stderr, "%s: out of virtual memory\n", fname);
  76.   exit (2);
  77. }
  78.  
  79. /* Use this as the function to call when adding unwind protects so we
  80.    don't need to know what free() returns. */
  81. void
  82. xfree (string)
  83.      char *string;
  84. {
  85.   if (string)
  86.     free (string);
  87. }
  88.