Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/bensch/xmalloc.c @ 1814

Last change on this file since 1814 was 1814, checked in by bensch, 20 years ago

orxonox/brnaches/bensch: added autoproject configuration

File size: 2.8 KB
Line 
1/* xmalloc.c -- malloc with out of memory checking
2   Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 99 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 STDC_HEADERS
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/* Prototypes for functions defined here.  */
54#if defined (__STDC__) && __STDC__
55static VOID *fixup_null_alloc (size_t n);
56VOID *xmalloc (size_t n);
57VOID *xcalloc (size_t n, size_t s);
58VOID *xrealloc (VOID *p, size_t n);
59char *xstrdup (char *p);
60#endif
61
62
63/* Exit value when the requested amount of memory is not available.
64   The caller may set it to some other value.  */
65int xmalloc_exit_failure = EXIT_FAILURE;
66
67#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT)
68void error (int, int, const char *, ...);
69#else
70void error ();
71#endif
72
73static VOID *
74fixup_null_alloc (n)
75     size_t n;
76{
77  VOID *p;
78
79  p = 0;
80  if (n == 0)
81    p = malloc ((size_t) 1);
82  if (p == 0)
83    error (xmalloc_exit_failure, 0, _("Memory exhausted"));
84  return p;
85}
86
87/* Allocate N bytes of memory dynamically, with error checking.  */
88
89VOID *
90xmalloc (n)
91     size_t n;
92{
93  VOID *p;
94
95  p = malloc (n);
96  if (p == 0)
97    p = fixup_null_alloc (n);
98  return p;
99}
100
101/* Allocate memory for N elements of S bytes, with error checking.  */
102
103VOID *
104xcalloc (n, s)
105     size_t n, s;
106{
107  VOID *p;
108
109  p = calloc (n, s);
110  if (p == 0)
111    p = fixup_null_alloc (n);
112  return p;
113}
114
115/* Change the size of an allocated block of memory P to N bytes,
116   with error checking.
117   If P is NULL, run xmalloc.  */
118
119VOID *
120xrealloc (p, n)
121     VOID *p;
122     size_t n;
123{
124  if (p == 0)
125    return xmalloc (n);
126  p = realloc (p, n);
127  if (p == 0)
128    p = fixup_null_alloc (n);
129  return p;
130}
131
132/* Make a copy of a string in a newly allocated block of memory. */
133
134char *
135xstrdup (str)
136     char *str;
137{
138  VOID *p;
139
140  p = xmalloc (strlen (str) + 1);
141  strcpy (p, str);
142  return p;
143}
Note: See TracBrowser for help on using the repository browser.