Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2022-04-29 13:57:25 +0300
committerFelix Fietkau <nbd@nbd.name>2022-04-29 13:57:52 +0300
commit45210ce14136d9410d7139fba816c4465b4c7af5 (patch)
tree0d11b2b03e1b06aecbf0305ccf56f92d5fead652
parentf2d6752901f2f2d8612fb43e10061570c9198af1 (diff)
list.h: add container_of_safe macro
It works like container_of, except that it also deals with NULL pointers Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--list.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/list.h b/list.h
index a2cb241..6aa7b2a 100644
--- a/list.h
+++ b/list.h
@@ -42,6 +42,14 @@
})
#endif
+#ifndef container_of_safe
+#define container_of_safe(ptr, type, member) \
+ ({ \
+ const __typeof__(((type *) NULL)->member) *__mptr = (ptr); \
+ __mptr ? (type *)((char *) __mptr - offsetof(type, member)) : NULL; \
+ })
+#endif
+
struct list_head {
struct list_head *next;
struct list_head *prev;