No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / dist / texinfo / lib / xalloc.h
blobdffb878989a8c87f599d611b7e5916d56bd98f1f
1 /* $NetBSD$ */
3 /* xalloc.h -- malloc with out-of-memory checking
5 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
6 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software Foundation,
20 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22 #ifndef XALLOC_H_
23 # define XALLOC_H_
25 # include <stddef.h>
28 # ifdef __cplusplus
29 extern "C" {
30 # endif
33 # ifndef __attribute__
34 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
35 # define __attribute__(x)
36 # endif
37 # endif
39 # ifndef ATTRIBUTE_NORETURN
40 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
41 # endif
43 /* This function is always triggered when memory is exhausted.
44 It must be defined by the application, either explicitly
45 or by using gnulib's xalloc-die module. This is the
46 function to call when one wants the program to die because of a
47 memory allocation failure. */
48 extern void xalloc_die (void) ATTRIBUTE_NORETURN;
50 void *xmalloc (size_t s);
51 void *xnmalloc (size_t n, size_t s);
52 void *xzalloc (size_t s);
53 void *xcalloc (size_t n, size_t s);
54 void *xrealloc (void *p, size_t s);
55 void *xnrealloc (void *p, size_t n, size_t s);
56 void *x2realloc (void *p, size_t *pn);
57 void *x2nrealloc (void *p, size_t *pn, size_t s);
58 void *xclone (void const *p, size_t s);
59 char *xstrdup (const char *str);
61 /* Return 1 if an array of N objects, each of size S, cannot exist due
62 to size arithmetic overflow. S must be positive and N must be
63 nonnegative. This is a macro, not an inline function, so that it
64 works correctly even when SIZE_MAX < N.
66 By gnulib convention, SIZE_MAX represents overflow in size
67 calculations, so the conservative dividend to use here is
68 SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
69 However, malloc (SIZE_MAX) fails on all known hosts where
70 sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
71 exactly-SIZE_MAX allocations on such hosts; this avoids a test and
72 branch when S is known to be 1. */
73 # define xalloc_oversized(n, s) \
74 ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
76 /* These macros are deprecated; they will go away soon, and are retained
77 temporarily only to ease conversion to the functions described above. */
78 # define CCLONE(p, n) xclone (p, (n) * sizeof *(p))
79 # define CLONE(p) xclone (p, sizeof *(p))
80 # define NEW(type, var) type *var = xmalloc (sizeof (type))
81 # define XCALLOC(type, n) xcalloc (n, sizeof (type))
82 # define XMALLOC(type, n) xnmalloc (n, sizeof (type))
83 # define XREALLOC(p, type, n) xnrealloc (p, n, sizeof (type))
84 # define XFREE(p) free (p)
87 # ifdef __cplusplus
89 # endif
92 #endif /* !XALLOC_H_ */