Your usage example
While the first
Most probably this mix up is provoking all that headache. In fact the
Taking this container for example:
Effectively you just have to subtract the offset of the member
That's exactly what the last line of the macro does.
container_of(dev, struct wifi_device, dev); might be a bit misleading as you are mixing two namespaces there.While the first
dev in your example refers to the name of pointer the second dev refers to the name of a structure member.Most probably this mix up is provoking all that headache. In fact the
member parameter in your quote refers to the name given to that member in the container structure.Taking this container for example:
struct container {
int some_other_data;
int this_data;
}
And a pointer int *my_ptr to the this_data member you'd use the macro to get a pointer to struct container *my_container by using:struct container *my_container;
my_container = container_of(my_ptr, struct container, this_data);
Taking the offset of this_data to the beginning of the struct into account is essential to getting the correct pointer location.Effectively you just have to subtract the offset of the member
this_data from your pointer my_ptr to get the correct location.That's exactly what the last line of the macro does.
No comments:
Post a Comment