summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1999-09-26 18:42:56 +0000
committerJim Meyering <jim@meyering.net>1999-09-26 18:42:56 +0000
commit0f97cac3402bc9860215198f8dc6f5e5eb0b71d8 (patch)
tree079ae1b4917ab883da436c0e4080cd15659d69f7 /lib
parent6710abd4ae3935e6ded11489fcd71188c2233173 (diff)
downloadcoreutils-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.h36
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_ */