source: trunk/third/gettext/lib/xmalloc.c @ 16931

Revision 16931, 2.7 KB checked in by ghudson, 23 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r16930, which included commits to RCS files with non-trunk default branches.
Line 
1/* xmalloc.c -- malloc with out of memory checking
2   Copyright (C) 1990-1996, 2000, 2001 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 Foundation,
16   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
17
18#if HAVE_CONFIG_H
19# include <config.h>
20#endif
21
22#if __STDC__
23# define VOID void
24#else
25# define VOID char
26#endif
27
28#include <sys/types.h>
29
30#if HAVE_STDLIB_H
31# include <stdlib.h>
32#else
33VOID *calloc ();
34VOID *malloc ();
35VOID *realloc ();
36void free ();
37#endif
38
39#if ENABLE_NLS
40# include <libintl.h>
41# define _(Text) gettext (Text)
42#else
43# define textdomain(Domain)
44# define _(Text) Text
45#endif
46
47#include "error.h"
48
49#ifndef EXIT_FAILURE
50# define EXIT_FAILURE 1
51#endif
52
53#ifndef NULL
54# define NULL ((VOID *) 0)
55#endif
56
57/* Prototypes for functions defined here.  */
58#if defined (__GNUC__) || (defined (__STDC__) && __STDC__)
59static VOID *fixup_null_alloc (size_t n);
60VOID *xmalloc (size_t n);
61VOID *xcalloc (size_t n, size_t s);
62VOID *xrealloc (VOID *p, size_t n);
63#endif
64
65
66/* Exit value when the requested amount of memory is not available.
67   The caller may set it to some other value.  */
68int xmalloc_exit_failure = EXIT_FAILURE;
69
70#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT)
71extern void error (int, int, const char *, ...);
72#else
73extern void error ();
74#endif
75
76static VOID *
77fixup_null_alloc (n)
78     size_t n;
79{
80  VOID *p;
81
82  p = 0;
83  if (n == 0)
84    p = malloc ((size_t) 1);
85  if (p == NULL)
86    error (xmalloc_exit_failure, 0, _("memory exhausted"));
87  return p;
88}
89
90/* Allocate N bytes of memory dynamically, with error checking.  */
91
92VOID *
93xmalloc (n)
94     size_t n;
95{
96  VOID *p;
97
98  p = malloc (n);
99  if (p == NULL)
100    p = fixup_null_alloc (n);
101  return p;
102}
103
104/* Allocate memory for N elements of S bytes, with error checking.  */
105
106VOID *
107xcalloc (n, s)
108     size_t n, s;
109{
110  VOID *p;
111
112  p = calloc (n, s);
113  if (p == NULL)
114    p = fixup_null_alloc (n);
115  return p;
116}
117
118/* Change the size of an allocated block of memory P to N bytes,
119   with error checking.
120   If P is NULL, run xmalloc.  */
121
122VOID *
123xrealloc (p, n)
124     VOID *p;
125     size_t n;
126{
127  if (p == NULL)
128    return xmalloc (n);
129  p = realloc (p, n);
130  if (p == NULL)
131    p = fixup_null_alloc (n);
132  return p;
133}
Note: See TracBrowser for help on using the repository browser.