diff options
author | Jim Meyering <jim@meyering.net> | 1999-09-26 18:42:56 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 1999-09-26 18:42:56 +0000 |
commit | 0f97cac3402bc9860215198f8dc6f5e5eb0b71d8 (patch) | |
tree | 079ae1b4917ab883da436c0e4080cd15659d69f7 /lib | |
parent | 6710abd4ae3935e6ded11489fcd71188c2233173 (diff) | |
download | coreutils-0f97cac3402bc9860215198f8dc6f5e5eb0b71d8.tar.xz |
(__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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/xalloc.h | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/lib/xalloc.h b/lib/xalloc.h index 38463abba..063c3a164 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_ */ |