Initial import from FreeBSD RELENG_4:
[dragonfly.git] / gnu / usr.bin / ptx / xmalloc.c
1 /* xmalloc.c -- malloc with out of memory checking
2    Copyright (C) 1990, 1991, 1993 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
17
18 #ifdef HAVE_CONFIG_H
19 #if defined (CONFIG_BROKETS)
20 /* We use <config.h> instead of "config.h" so that a compilation
21    using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
22    (which it would do because it found this file in $srcdir).  */
23 #include <config.h>
24 #else
25 #include "config.h"
26 #endif
27 #endif
28
29 #if __STDC__
30 #define VOID void
31 #else
32 #define VOID char
33 #endif
34
35 #include <sys/types.h>
36
37 #if STDC_HEADERS
38 #include <stdlib.h>
39 #else
40 VOID *malloc ();
41 VOID *realloc ();
42 void free ();
43 #endif
44
45 #if __STDC__ && defined (HAVE_VPRINTF)
46 void error (int, int, char const *, ...);
47 #else
48 void error ();
49 #endif
50
51 /* Allocate N bytes of memory dynamically, with error checking.  */
52
53 VOID *
54 xmalloc (n)
55      size_t n;
56 {
57   VOID *p;
58
59   p = malloc (n);
60   if (p == 0)
61     /* Must exit with 2 for `cmp'.  */
62     error (2, 0, "virtual memory exhausted");
63   return p;
64 }
65
66 /* Change the size of an allocated block of memory P to N bytes,
67    with error checking.
68    If P is NULL, run xmalloc.
69    If N is 0, run free and return NULL.  */
70
71 VOID *
72 xrealloc (p, n)
73      VOID *p;
74      size_t n;
75 {
76   if (p == 0)
77     return xmalloc (n);
78   if (n == 0)
79     {
80       free (p);
81       return 0;
82     }
83   p = realloc (p, n);
84   if (p == 0)
85     /* Must exit with 2 for `cmp'.  */
86     error (2, 0, "virtual memory exhausted");
87   return p;
88 }