Macro kernel::container_of
source · macro_rules! container_of { ($ptr:expr, $type:ty, $($f:tt)*) => { ... }; }
Expand description
Produces a pointer to an object from a pointer to one of its fields.
§Safety
The pointer passed to this macro, and the pointer returned by this macro, must both be in bounds of the same allocation.
§Examples
struct Test {
a: u64,
b: u32,
}
let test = Test { a: 10, b: 20 };
let b_ptr = &test.b;
// SAFETY: The pointer points at the `b` field of a `Test`, so the resulting pointer will be
// in-bounds of the same allocation as `b_ptr`.
let test_alias = unsafe { container_of!(b_ptr, Test, b) };
assert!(core::ptr::eq(&test, test_alias));