list.h: implement type safety for container_of()
authorFelix Fietkau <nbd@openwrt.org>
Mon, 18 Mar 2013 04:54:44 +0000 (05:54 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 18 Mar 2013 04:55:00 +0000 (05:55 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
list.h

diff --git a/list.h b/list.h
index 47ce33b..ab52acf 100644 (file)
--- a/list.h
+++ b/list.h
 #define        prefetch(x)
 
 #ifndef container_of
-#define container_of(ptr, type, member) (           \
-    (type *)( (char *)ptr - offsetof(type,member) ))
+#define container_of(ptr, type, member)                                        \
+       ({                                                              \
+               const typeof(((type *) NULL)->member) *__mptr = (ptr);  \
+               (type *) ((char *) __mptr - offsetof(type, member));    \
+       })
 #endif
 
 struct list_head {