1 /* xalloc.h -- malloc with out-of-memory checking
2 Copyright (C) 1990-1998, 1999 Free Software Foundation, Inc.
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)
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.
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. */
22 # if defined PROTOTYPES || (defined __STDC__ && __STDC__)
23 # define PARAMS(Args) Args
25 # define PARAMS(Args) ()
29 # ifndef __attribute__
30 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
31 # define __attribute__(x)
35 # ifndef ATTRIBUTE_NORETURN
36 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
39 /* Exit value when the requested amount of memory is not available.
40 It is initialized to EXIT_FAILURE, but the caller may set it to
42 extern int xalloc_exit_failure
;
44 /* If this pointer is non-zero, run the specified function upon each
45 allocation failure. It is initialized to zero. */
46 extern void (*xalloc_fail_func
) PARAMS ((void));
48 /* If XALLOC_FAIL_FUNC is undefined or a function that returns, this
49 message must be non-NULL. It is translated via gettext.
50 The default value is "Memory exhausted". */
51 extern char *const xalloc_msg_memory_exhausted
;
53 /* This function is always triggered when memory is exhausted. It is
54 in charge of honoring the three previous items. This is the
55 function to call when one wants the program to die because of a
56 memory allocation failure. */
57 extern void xalloc_die
PARAMS ((void)) ATTRIBUTE_NORETURN
;
59 void *xmalloc
PARAMS ((size_t n
));
60 void *xcalloc
PARAMS ((size_t n
, size_t s
));
61 void *xrealloc
PARAMS ((void *p
, size_t n
));
62 char *xstrdup
PARAMS ((const char *str
));
64 # define XMALLOC(Type, N_items) ((Type *) xmalloc (sizeof (Type) * (N_items)))
65 # define XCALLOC(Type, N_items) ((Type *) xcalloc (sizeof (Type), (N_items)))
66 # define XREALLOC(Ptr, Type, N_items) \
67 ((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_items)))
69 /* Declare and alloc memory for VAR of type TYPE. */
70 # define NEW(Type, Var) Type *(Var) = XMALLOC (Type, 1)
72 /* Free VAR only if non NULL. */
79 /* Return a pointer to a malloc'ed copy of the array SRC of NUM elements. */
80 # define CCLONE(Src, Num) \
81 (memcpy (xmalloc (sizeof (*Src) * (Num)), (Src), sizeof (*Src) * (Num)))
83 /* Return a malloc'ed copy of SRC. */
84 # define CLONE(Src) CCLONE (Src, 1)
87 #endif /* !XALLOC_H_ */