rework LISTNODE2STRUCT macro, squelch inline limit compiler warnings
[olsrd.git] / src / lq_list.h
index f54693a..d048eb5 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_list.h,v 1.6 2007/09/05 16:11:10 bernd67 Exp $
  */
 
 #ifndef _LQ_LIST_H
 #define _LQ_LIST_H
 
+#include "stddef.h"
+
 struct list_node
 {
   struct list_node *next;
@@ -60,5 +61,18 @@ void list_add_after(struct list_node *, struct list_node *);
 
 void list_remove(struct list_node *);
 
+/*
+ * Macro to define an inline function to map from a list_node offset back to the
+ * base of the datastructure. This saves you from populating the data field.
+ */
+#define LISTNODE2STRUCT(funcname, structname, listnodename) \
+static inline structname * funcname (struct list_node *ptr)\
+{\
+  return( \
+    ptr ? \
+      (structname *) (((olsr_u8_t *) ptr) - offsetof(structname, listnodename)) : \
+      NULL); \
+}
+
 #endif