XenevaOS
Loading...
Searching...
No Matches
Macros
container_of.h File Reference
#include <linux/build_bug.h>
#include <linux/stddef.h>
Include dependency graph for container_of.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define typeof_member(T, m)   typeof(((T*)0)->m)
 
#define container_of(ptr, type, member)
 
#define container_of_const(ptr, type, member)
 

Macro Definition Documentation

◆ container_of

#define container_of (   ptr,
  type,
  member 
)
Value:
({ \
void *__mptr = (void *)(ptr); \
static_assert(__same_type(*(ptr), ((type *)0)->member) || \
__same_type(*(ptr), void), \
"pointer type mismatch in container_of()"); \
((type *)(__mptr - offsetof(type, member))); })
#define __same_type(a, b)
Definition compiler.h:154
#define offsetof(type, member)
Definition kernel.h:177

container_of - cast a member of a structure out to the containing structure @ptr: the pointer to the member. @type: the type of the container struct this is embedded in. @member: the name of the member within the struct.

WARNING: any const qualifier of @ptr is lost. Do not use container_of() in new code.

◆ container_of_const

#define container_of_const (   ptr,
  type,
  member 
)
Value:
_Generic(ptr, \
const typeof(*(ptr)) *: ((const type *)container_of(ptr, type, member)),\
default: ((type *)container_of(ptr, type, member)) \
)
#define container_of(ptr, type, member)
Definition container_of.h:19

container_of_const - cast a member of a structure out to the containing structure and preserve the const-ness of the pointer @ptr: the pointer to the member @type: the type of the container struct this is embedded in. @member: the name of the member within the struct.

Always prefer container_of_const() instead of container_of() in new code.

◆ typeof_member

#define typeof_member (   T,
  m 
)    typeof(((T*)0)->m)