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