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>
This commit is contained in:
Felix Fietkau 2022-04-29 12:57:25 +02:00
parent f2d6752901
commit 45210ce141

8
list.h
View file

@ -42,6 +42,14 @@
}) })
#endif #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 {
struct list_head *next; struct list_head *next;
struct list_head *prev; struct list_head *prev;