/* xmalloc.c -- safe versions of malloc and realloc */

/* Copyright (C) 1991 Free Software Foundation, Inc.

   This file is part of GNU Readline, a library for reading lines
   of text with interactive input and history editing.

   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
   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.

   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. */

#if defined (ALREADY_HAVE_XMALLOC)
#else
#include <stdio.h>

#if defined (HAVE_STDLIB_H)
#include <stdlib.h>
#else
#include "ansi_stdlib.h"
#endif /* HAVE_STDLIB_H */

static void memory_error_and_abort();

/* **************************************************************** */
/*                                                                  */
/*                 Memory Allocation and Deallocation.              */
/*                                                                  */
/* **************************************************************** */

/* 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 *
  xmalloc(bytes)
     int bytes;
{
	char *temp = (char *) malloc(bytes);

	if (!temp)
		memory_error_and_abort("xmalloc");
	return (temp);
}

char *
  xrealloc(pointer, bytes)
     char *pointer;
     int bytes;
{
	char *temp;

	if (!pointer)
		temp = (char *) malloc(bytes);
	else
		temp = (char *) realloc(pointer, bytes);

	if (!temp)
		memory_error_and_abort("xrealloc");
	return (temp);
}

static void memory_error_and_abort(fname)
     char *fname;
{
	fprintf(stderr, "%s: Out of virtual memory!\n", fname);
	abort();
}

#endif /* !ALREADY_HAVE_XMALLOC */