]> git.saurik.com Git - bison.git/blame - lib/xalloc.h
(operator<<(std::ostream&, const Position&)):
[bison.git] / lib / xalloc.h
CommitLineData
d7913476 1/* xalloc.h -- malloc with out-of-memory checking
0d8f3c8a 2 Copyright (C) 1990-1998, 1999, 2000 Free Software Foundation, Inc.
d7913476
AD
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#ifndef XALLOC_H_
19# define XALLOC_H_
20
e9665d16
PE
21# include <stddef.h>
22
d7913476
AD
23# ifndef PARAMS
24# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
25# define PARAMS(Args) Args
26# else
27# define PARAMS(Args) ()
28# endif
29# endif
30
31# ifndef __attribute__
32# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
33# define __attribute__(x)
34# endif
35# endif
36
37# ifndef ATTRIBUTE_NORETURN
38# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
39# endif
40
41/* Exit value when the requested amount of memory is not available.
42 It is initialized to EXIT_FAILURE, but the caller may set it to
43 some other value. */
44extern int xalloc_exit_failure;
45
46/* If this pointer is non-zero, run the specified function upon each
47 allocation failure. It is initialized to zero. */
48extern void (*xalloc_fail_func) PARAMS ((void));
49
50/* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
0d8f3c8a
AD
51 message is output. It is translated via gettext.
52 Its value is "memory exhausted". */
53extern char const xalloc_msg_memory_exhausted[];
d7913476
AD
54
55/* This function is always triggered when memory is exhausted. It is
56 in charge of honoring the three previous items. This is the
57 function to call when one wants the program to die because of a
58 memory allocation failure. */
59extern void xalloc_die PARAMS ((void)) ATTRIBUTE_NORETURN;
60
61void *xmalloc PARAMS ((size_t n));
62void *xcalloc PARAMS ((size_t n, size_t s));
63void *xrealloc PARAMS ((void *p, size_t n));
64char *xstrdup PARAMS ((const char *str));
65
66# define XMALLOC(Type, N_items) ((Type *) xmalloc (sizeof (Type) * (N_items)))
67# define XCALLOC(Type, N_items) ((Type *) xcalloc (sizeof (Type), (N_items)))
68# define XREALLOC(Ptr, Type, N_items) \
69 ((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_items)))
70
71/* Declare and alloc memory for VAR of type TYPE. */
72# define NEW(Type, Var) Type *(Var) = XMALLOC (Type, 1)
73
74/* Free VAR only if non NULL. */
75# define XFREE(Var) \
76 do { \
77 if (Var) \
78 free (Var); \
79 } while (0)
80
81/* Return a pointer to a malloc'ed copy of the array SRC of NUM elements. */
82# define CCLONE(Src, Num) \
83 (memcpy (xmalloc (sizeof (*Src) * (Num)), (Src), sizeof (*Src) * (Num)))
84
85/* Return a malloc'ed copy of SRC. */
86# define CLONE(Src) CCLONE (Src, 1)
87
88
89#endif /* !XALLOC_H_ */