From fa2069e46c0ec6d9a82a00d2f1f43775e8a3cd92 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sun, 26 Sep 1999 18:42:56 +0000 Subject: [PATCH] (__attribute__): Define. (ATTRIBUTE_NORETURN): Define. (xalloc_fail_func): Add noreturn attribute. (xalloc_die): Declare. (NEW): Define as yet unused macro. (XFREE): Likewise (CCLONE): Likewise. (CLONE): Likewise. From Akim Demaille. --- lib/xalloc.h | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/xalloc.h b/lib/xalloc.h index 38463abba2..063c3a164b 100644 --- a/lib/xalloc.h +++ b/lib/xalloc.h @@ -26,20 +26,34 @@ # endif # endif +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __attribute__(x) +# endif + +# ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +# endif + /* Exit value when the requested amount of memory is not available. It is initialized to EXIT_FAILURE, but the caller may set it to some other value. */ extern int xalloc_exit_failure; /* If this pointer is non-zero, run the specified function upon each - allocation failure. It is initialized to zero. */ -extern void (*xalloc_fail_func) PARAMS ((void)); + allocation failure. It is initialized to zero. */ +extern void (*xalloc_fail_func) PARAMS ((void)) ATTRIBUTE_NORETURN; /* If XALLOC_FAIL_FUNC is undefined or a function that returns, this message must be non-NULL. It is translated via gettext. The default value is "Memory exhausted". */ extern char *const xalloc_msg_memory_exhausted; +/* This function is always triggered when memory is exhausted. It is + in charge of honoring the three previous items. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +extern void xalloc_die PARAMS ((void)); + void *xmalloc PARAMS ((size_t n)); void *xcalloc PARAMS ((size_t n, size_t s)); void *xrealloc PARAMS ((void *p, size_t n)); @@ -50,4 +64,22 @@ char *xstrdup PARAMS ((const char *str)); # define XREALLOC(Ptr, Type, N_bytes) \ ((Type *) xrealloc ((void *) (Ptr), sizeof (Type) * (N_bytes))) +/* Declare and alloc memory for VAR of type TYPE. */ +# define NEW(Type, Var) Type *(Var) = XMALLOC (Type, 1) + +/* Free VAR only if non NULL. */ +# define XFREE(Var) \ + do { \ + if (Var) \ + free (Var); \ + } while (0) + +/* Return a pointer to a malloc'ed copy of the array SRC of NUM elements. */ +# define CCLONE(Src, Num) \ + (memcpy (xmalloc (sizeof (*Src) * (Num)), (Src), sizeof (*Src) * (Num))) + +/* Return a malloc'ed copy of SRC. */ +# define CLONE(Src) CCLONE (Src, 1) + + #endif /* !XALLOC_H_ */ -- 2.30.2