+#define M_ABORT 1
+
+/* In case you want to specifically specify the offset to the link */
+#define OFFSET(item, link) (int)((char *)(link) - (char *)(item))
+/*
+ * There is a lot of extra casting here to work around the fact
+ * that some compilers (Sun and Visual C++) do not accept
+ * (void *) as an lvalue on the left side of an equal.
+ *
+ * Loop var through each member of list
+ */
+#ifdef HAVE_GCC
+#define foreach_dlist(var, list) \
+ for((var)=NULL; ((var)=(typeof(var))(list)->next(var)); )
+#else
+#define foreach_dlist(var, list) \
+ for((var)=NULL; (*((void **)&(var))=(void*)((list)->next(var))); )
+#endif
+
+