OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [libiberty/] [xmalloc.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* memory allocation routines with error checking.
2
   Copyright 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
3
 
4
This file is part of the libiberty library.
5
Libiberty is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Library General Public
7
License as published by the Free Software Foundation; either
8
version 2 of the License, or (at your option) any later version.
9
 
10
Libiberty 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.
14
 
15
You should have received a copy of the GNU Library General Public
16
License along with libiberty; see the file COPYING.LIB.  If
17
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18
Boston, MA 02111-1307, USA.  */
19
 
20
/*
21
 
22
@deftypefn Replacement void* xmalloc (size_t)
23
 
24
Allocate memory without fail.  If @code{malloc} fails, this will print
25
a message to @code{stderr} (using the name set by
26
@code{xmalloc_set_program_name},
27
if any) and then call @code{xexit}.  Note that it is therefore safe for
28
a program to contain @code{#define malloc xmalloc} in its source.
29
 
30
@end deftypefn
31
 
32
@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size})
33
Reallocate memory without fail.  This routine functions like @code{realloc},
34
but will behave the same as @code{xmalloc} if memory cannot be found.
35
 
36
@end deftypefn
37
 
38
@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize})
39
 
40
Allocate memory without fail, and set it to zero.  This routine functions
41
like @code{calloc}, but will behave the same as @code{xmalloc} if memory
42
cannot be found.
43
 
44
@end deftypefn
45
 
46
@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name})
47
 
48
You can use this to set the name of the program used by
49
@code{xmalloc_failed} when printing a failure message.
50
 
51
@end deftypefn
52
 
53
@deftypefn Replacement void xmalloc_failed (size_t)
54
 
55
This function is not meant to be called by client code, and is listed
56
here for completeness only.  If any of the allocation routines fail, this
57
function will be called to print an error message and terminate execution.
58
 
59
@end deftypefn
60
 
61
*/
62
 
63
#ifdef HAVE_CONFIG_H
64
#include "config.h"
65
#endif
66
#include "ansidecl.h"
67
#include "libiberty.h"
68
 
69
#include <stdio.h>
70
 
71
#ifdef __STDC__
72
#include <stddef.h>
73
#else
74
#define size_t unsigned long
75
#define ptrdiff_t long
76
#endif
77
 
78
#if VMS
79
#include <stdlib.h>
80
#include <unixlib.h>
81
#else
82
/* For systems with larger pointers than ints, these must be declared.  */
83
PTR malloc PARAMS ((size_t));
84
PTR realloc PARAMS ((PTR, size_t));
85
PTR calloc PARAMS ((size_t, size_t));
86
PTR sbrk PARAMS ((ptrdiff_t));
87
#endif
88
 
89
/* The program name if set.  */
90
static const char *name = "";
91
 
92
#ifdef HAVE_SBRK
93
/* The initial sbrk, set when the program name is set. Not used for win32
94
   ports other than cygwin32.  */
95
static char *first_break = NULL;
96
#endif /* HAVE_SBRK */
97
 
98
void
99
xmalloc_set_program_name (s)
100
     const char *s;
101
{
102
  name = s;
103
#ifdef HAVE_SBRK
104
  /* Win32 ports other than cygwin32 don't have brk() */
105
  if (first_break == NULL)
106
    first_break = (char *) sbrk (0);
107
#endif /* HAVE_SBRK */
108
}
109
 
110
void
111
xmalloc_failed (size)
112
     size_t size;
113
{
114
#ifdef HAVE_SBRK
115
  extern char **environ;
116
  size_t allocated;
117
 
118
  if (first_break != NULL)
119
    allocated = (char *) sbrk (0) - first_break;
120
  else
121
    allocated = (char *) sbrk (0) - (char *) &environ;
122
  fprintf (stderr,
123
           "\n%s%sout of memory allocating %lu bytes after a total of %lu bytes\n",
124
           name, *name ? ": " : "",
125
           (unsigned long) size, (unsigned long) allocated);
126
#else /* HAVE_SBRK */
127
  fprintf (stderr,
128
           "\n%s%sout of memory allocating %lu bytes\n",
129
           name, *name ? ": " : "",
130
           (unsigned long) size);
131
#endif /* HAVE_SBRK */
132
  xexit (1);
133
}
134
 
135
PTR
136
xmalloc (size)
137
    size_t size;
138
{
139
  PTR newmem;
140
 
141
  if (size == 0)
142
    size = 1;
143
  newmem = malloc (size);
144
  if (!newmem)
145
    xmalloc_failed (size);
146
 
147
  return (newmem);
148
}
149
 
150
PTR
151
xcalloc (nelem, elsize)
152
  size_t nelem, elsize;
153
{
154
  PTR newmem;
155
 
156
  if (nelem == 0 || elsize == 0)
157
    nelem = elsize = 1;
158
 
159
  newmem = calloc (nelem, elsize);
160
  if (!newmem)
161
    xmalloc_failed (nelem * elsize);
162
 
163
  return (newmem);
164
}
165
 
166
PTR
167
xrealloc (oldmem, size)
168
    PTR oldmem;
169
    size_t size;
170
{
171
  PTR newmem;
172
 
173
  if (size == 0)
174
    size = 1;
175
  if (!oldmem)
176
    newmem = malloc (size);
177
  else
178
    newmem = realloc (oldmem, size);
179
  if (!newmem)
180
    xmalloc_failed (size);
181
 
182
  return (newmem);
183
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.