source: trunk/third/bash/xmalloc.c @ 21276

Revision 21276, 4.5 KB checked in by zacheiss, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r21275, which included commits to RCS files with non-trunk default branches.
RevLine 
[12958]1/* xmalloc.c -- safe versions of malloc and realloc */
2
3/* Copyright (C) 1991 Free Software Foundation, Inc.
4
5   This file is part of GNU Readline, a library for reading lines
6   of text with interactive input and history editing.
7
8   Readline is free software; you can redistribute it and/or modify it
9   under the terms of the GNU General Public License as published by the
[16806]10   Free Software Foundation; either version 2, or (at your option) any
[12958]11   later version.
12
13   Readline is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16   General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with Readline; see the file COPYING.  If not, write to the Free
[16806]20   Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
[12958]21
22#if defined (HAVE_CONFIG_H)
23#include <config.h>
24#endif
25
26#include "bashtypes.h"
27#include <stdio.h>
28
29#if defined (HAVE_UNISTD_H)
30#  include <unistd.h>
31#endif
32
33#if defined (HAVE_STDLIB_H)
34#  include <stdlib.h>
35#else
36#  include "ansi_stdlib.h"
37#endif /* HAVE_STDLIB_H */
38
39#include "error.h"
40
[21275]41#include "bashintl.h"
42
[12958]43#if !defined (PTR_T)
44#  if defined (__STDC__)
45#    define PTR_T void *
46#  else
47#    define PTR_T char *
48#  endif /* !__STDC__ */
49#endif /* !PTR_T */
50
[18289]51#if defined (HAVE_SBRK) && !HAVE_DECL_SBRK
[12958]52extern char *sbrk();
53#endif
54
55static PTR_T lbreak;
56static int brkfound;
57static size_t allocated;
58
59/* **************************************************************** */
60/*                                                                  */
61/*                 Memory Allocation and Deallocation.              */
62/*                                                                  */
63/* **************************************************************** */
64
65#if defined (HAVE_SBRK)
66static size_t
67findbrk ()
68{
69  if (brkfound == 0)
70    {
71      lbreak = (PTR_T)sbrk (0);
72      brkfound++;
73    }
74  return (char *)sbrk (0) - (char *)lbreak;
75}
76#endif
77
78/* Return a pointer to free()able block of memory large enough
79   to hold BYTES number of bytes.  If the memory cannot be allocated,
80   print an error message and abort. */
[18289]81PTR_T
[12958]82xmalloc (bytes)
83     size_t bytes;
84{
[18289]85  PTR_T temp;
[12958]86
[18289]87  temp = malloc (bytes);
[12958]88
89  if (temp == 0)
90    {
91#if defined (HAVE_SBRK)
92      allocated = findbrk ();
[21275]93      fatal_error (_("xmalloc: cannot allocate %lu bytes (%lu bytes allocated)"), (unsigned long)bytes, (unsigned long)allocated);
[12958]94#else
[21275]95      fatal_error (_("xmalloc: cannot allocate %lu bytes"), (unsigned long)bytes);
[12958]96#endif /* !HAVE_SBRK */
97    }
98
99  return (temp);
100}
101
[18289]102PTR_T
[12958]103xrealloc (pointer, bytes)
104     PTR_T pointer;
105     size_t bytes;
106{
[18289]107  PTR_T temp;
[12958]108
[18289]109  temp = pointer ? realloc (pointer, bytes) : malloc (bytes);
[12958]110
111  if (temp == 0)
112    {
113#if defined (HAVE_SBRK)
114      allocated = findbrk ();
[21275]115      fatal_error (_("xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"), (unsigned long)bytes, (unsigned long)allocated);
[12958]116#else
[21275]117      fatal_error (_("xrealloc: cannot allocate %lu bytes"), (unsigned long)bytes);
[12958]118#endif /* !HAVE_SBRK */
119    }
120
121  return (temp);
122}
123
124/* Use this as the function to call when adding unwind protects so we
125   don't need to know what free() returns. */
126void
127xfree (string)
[16806]128     PTR_T string;
[12958]129{
130  if (string)
131    free (string);
132}
[18289]133
134#ifdef USING_BASH_MALLOC
135#include <malloc/shmalloc.h>
136
137PTR_T
138sh_xmalloc (bytes, file, line)
139     size_t bytes;
140     char *file;
141     int line;
142{
143  PTR_T temp;
144
145  temp = sh_malloc (bytes, file, line);
146
147  if (temp == 0)
148    {
149#if defined (HAVE_SBRK)
150      allocated = findbrk ();
[21275]151      fatal_error (_("xmalloc: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"), file, line, (unsigned long)bytes, (unsigned long)allocated);
[18289]152#else
[21275]153      fatal_error (_("xmalloc: %s:%d: cannot allocate %lu bytes"), file, line, (unsigned long)bytes);
[18289]154#endif /* !HAVE_SBRK */
155    }
156
157  return (temp);
158}
159
160PTR_T
161sh_xrealloc (pointer, bytes, file, line)
162     PTR_T pointer;
163     size_t bytes;
164     char *file;
165     int line;
166{
167  PTR_T temp;
168
169  temp = pointer ? sh_realloc (pointer, bytes, file, line) : sh_malloc (bytes, file, line);
170
171  if (temp == 0)
172    {
173#if defined (HAVE_SBRK)
174      allocated = findbrk ();
[21275]175      fatal_error (_("xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)"), file, line, (unsigned long)bytes, (unsigned long)allocated);
[18289]176#else
[21275]177      fatal_error (_("xrealloc: %s:%d: cannot allocate %lu bytes"), file, line, (unsigned long)bytes);
[18289]178#endif /* !HAVE_SBRK */
179    }
180
181  return (temp);
182}
183
184void
185sh_xfree (string, file, line)
186     PTR_T string;
187     char *file;
188     int line;
189{
190  if (string)
191    sh_free (string, file, line);
192}
193#endif
Note: See TracBrowser for help on using the repository browser.