xmalloc.c revision 21308
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 34static 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. */ 45char * 46xmalloc (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 57char * 58xrealloc (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 71static void 72memory_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. */ 81void 82xfree (string) 83 char *string; 84{ 85 if (string) 86 free (string); 87} 88