changeset 1953:134bb4a01712

(__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.
author Jim Meyering <jim@meyering.net>
date Sun, 26 Sep 1999 18:42:56 +0000
parents 8c28becce781
children cb76cc7fd316
files lib/xalloc.h
diffstat 1 files changed, 34 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
 # 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_ */