~ubuntu-branches/ubuntu/breezy/gettext/breezy

« back to all changes in this revision

Viewing changes to gettext-tools/lib/xmalloc.c

  • Committer: Bazaar Package Importer
  • Author(s): Santiago Vila
  • Date: 2004-03-14 17:40:02 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040314174002-p1ad5ldve1hqzhye
Tags: 0.14.1-2
* Added libexpat1-dev to Build-Depends, for glade support.
* Added libc0.1-dev to Build-Depends, for GNU/kFreeBSD.
* Removed special-casing of knetbsd-gnu in debian/rules.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* xmalloc.c -- malloc with out of memory checking
 
2
   Copyright (C) 1990-1996, 2000-2003 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
/* Specification.  */
 
23
#include "xalloc.h"
 
24
 
 
25
#include <stdlib.h>
 
26
 
 
27
#include "error.h"
 
28
#include "exit.h"
 
29
#include "gettext.h"
 
30
 
 
31
#define _(str) gettext (str)
 
32
 
 
33
 
 
34
/* Exit value when the requested amount of memory is not available.
 
35
   The caller may set it to some other value.  */
 
36
int xmalloc_exit_failure = EXIT_FAILURE;
 
37
 
 
38
void
 
39
xalloc_die ()
 
40
{
 
41
  error (xmalloc_exit_failure, 0, _("memory exhausted"));
 
42
  /* The `noreturn' cannot be given to error, since it may return if
 
43
     its first argument is 0.  To help compilers understand the
 
44
     xalloc_die does terminate, call exit. */
 
45
  exit (EXIT_FAILURE);
 
46
}
 
47
 
 
48
static void *
 
49
fixup_null_alloc (size_t n)
 
50
{
 
51
  void *p;
 
52
 
 
53
  p = 0;
 
54
  if (n == 0)
 
55
    p = malloc ((size_t) 1);
 
56
  if (p == NULL)
 
57
    xalloc_die ();
 
58
  return p;
 
59
}
 
60
 
 
61
/* Allocate N bytes of memory dynamically, with error checking.  */
 
62
 
 
63
void *
 
64
xmalloc (size_t n)
 
65
{
 
66
  void *p;
 
67
 
 
68
  p = malloc (n);
 
69
  if (p == NULL)
 
70
    p = fixup_null_alloc (n);
 
71
  return p;
 
72
}
 
73
 
 
74
/* Allocate memory for N elements of S bytes, with error checking.  */
 
75
 
 
76
void *
 
77
xcalloc (size_t n, size_t s)
 
78
{
 
79
  void *p;
 
80
 
 
81
  p = calloc (n, s);
 
82
  if (p == NULL)
 
83
    p = fixup_null_alloc (n);
 
84
  return p;
 
85
}
 
86
 
 
87
/* Change the size of an allocated block of memory P to N bytes,
 
88
   with error checking.
 
89
   If P is NULL, run xmalloc.  */
 
90
 
 
91
void *
 
92
xrealloc (void *p, size_t n)
 
93
{
 
94
  if (p == NULL)
 
95
    return xmalloc (n);
 
96
  p = realloc (p, n);
 
97
  if (p == NULL)
 
98
    p = fixup_null_alloc (n);
 
99
  return p;
 
100
}