/src/wml_backend/p4_gm4/lib/xmalloc.c
C | 129 lines | 84 code | 21 blank | 24 comment | 15 complexity | 2db9005dc2634fa128f4da6fe3a83243 MD5 | raw file
Possible License(s): GPL-2.0, AGPL-1.0, LGPL-2.0
- /* xmalloc.c -- malloc with out of memory checking
- Copyright (C) 1990, 91, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
- This program 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 2, or (at your option)
- any later version.
- This program 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 this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
- #if HAVE_CONFIG_H
- # include <config.h>
- #endif
- #if __STDC__
- # define VOID void
- #else
- # define VOID char
- #endif
- #include <sys/types.h>
- #if defined(STDC_HEADERS)
- # include <stdlib.h>
- #else
- VOID *calloc ();
- VOID *malloc ();
- VOID *realloc ();
- void free ();
- #endif
- #if ENABLE_NLS
- # include <libintl.h>
- # define _(Text) gettext (Text)
- #else
- # define textdomain(Domain)
- # define _(Text) Text
- #endif
- #include "error.h"
- #ifndef EXIT_FAILURE
- # define EXIT_FAILURE 1
- #endif
- /* Prototypes for functions defined here. */
- #if defined (__STDC__) && __STDC__
- static VOID *fixup_null_alloc (size_t n);
- VOID *xmalloc (size_t n);
- VOID *xcalloc (size_t n, size_t s);
- VOID *xrealloc (VOID *p, size_t n);
- #endif
- /* Exit value when the requested amount of memory is not available.
- The caller may set it to some other value. */
- int xmalloc_exit_failure = EXIT_FAILURE;
- #if defined(__STDC__) && (defined(HAVE_VPRINTF) || defined(HAVE_DOPRNT))
- void error (int, int, const char *, ...);
- #else
- void error ();
- #endif
- static VOID *
- fixup_null_alloc (n)
- size_t n;
- {
- VOID *p;
- p = 0;
- if (n == 0)
- p = malloc ((size_t) 1);
- if (p == 0)
- error (xmalloc_exit_failure, 0, _("Memory exhausted"));
- return p;
- }
- /* Allocate N bytes of memory dynamically, with error checking. */
- VOID *
- xmalloc (n)
- size_t n;
- {
- VOID *p;
- p = malloc (n);
- if (p == 0)
- p = fixup_null_alloc (n);
- return p;
- }
- /* Allocate memory for N elements of S bytes, with error checking. */
- VOID *
- xcalloc (n, s)
- size_t n, s;
- {
- VOID *p;
- p = calloc (n, s);
- if (p == 0)
- p = fixup_null_alloc (n);
- return p;
- }
- /* Change the size of an allocated block of memory P to N bytes,
- with error checking.
- If P is NULL, run xmalloc. */
- VOID *
- xrealloc (p, n)
- VOID *p;
- size_t n;
- {
- if (p == 0)
- return xmalloc (n);
- p = realloc (p, n);
- if (p == 0)
- p = fixup_null_alloc (n);
- return p;
- }