Update.
[glibc.git] / locale / programs / xmalloc.c
blobc27dd7f6df1dc269eb96ec0f776262de22a2a4c6
1 /* xmalloc.c -- malloc with out of memory checking
2 Copyright (C) 1990,91,92,93,94,95,96,97 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with the GNU C Library; see the file COPYING.LIB. If not,
17 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
24 #if __STDC__
25 #define VOID void
26 #else
27 #define VOID char
28 #endif
30 #include <sys/types.h>
32 #if STDC_HEADERS || _LIBC
33 #include <stdlib.h>
34 static VOID *fixup_null_alloc __P ((size_t n));
35 VOID *xmalloc __P ((size_t n));
36 VOID *xcalloc __P ((size_t n, size_t s));
37 VOID *xrealloc __P ((VOID *p, size_t n));
38 #else
39 VOID *calloc ();
40 VOID *malloc ();
41 VOID *realloc ();
42 void free ();
43 #endif
45 #include <libintl.h>
46 #include "error.h"
48 #ifndef _
49 # define _(str) gettext (str)
50 #endif
52 #ifndef EXIT_FAILURE
53 #define EXIT_FAILURE 4
54 #endif
56 /* Exit value when the requested amount of memory is not available.
57 The caller may set it to some other value. */
58 int xmalloc_exit_failure = EXIT_FAILURE;
60 static VOID *
61 fixup_null_alloc (n)
62 size_t n;
64 VOID *p;
66 p = 0;
67 if (n == 0)
68 p = malloc ((size_t) 1);
69 if (p == 0)
70 error (xmalloc_exit_failure, 0, _("memory exhausted"));
71 return p;
74 /* Allocate N bytes of memory dynamically, with error checking. */
76 VOID *
77 xmalloc (n)
78 size_t n;
80 VOID *p;
82 p = malloc (n);
83 if (p == 0)
84 p = fixup_null_alloc (n);
85 return p;
88 /* Allocate memory for N elements of S bytes, with error checking. */
90 VOID *
91 xcalloc (n, s)
92 size_t n, s;
94 VOID *p;
96 p = calloc (n, s);
97 if (p == 0)
98 p = fixup_null_alloc (n);
99 return p;
102 /* Change the size of an allocated block of memory P to N bytes,
103 with error checking.
104 If P is NULL, run xmalloc. */
106 VOID *
107 xrealloc (p, n)
108 VOID *p;
109 size_t n;
111 if (p == 0)
112 return xmalloc (n);
113 p = realloc (p, n);
114 if (p == 0)
115 p = fixup_null_alloc (n);
116 return p;