Re: Casting (struct rtable*) to (struct dst_entry*)
From: N N Ashok <hidden>
Date: 2003-03-20 06:02:38
On Thursday 20 March 2003 00:33, David S. Miller wrote:
From: N N Ashok [off-list ref]
Date: Thu, 20 Mar 2003 00:27:41 -0500
I did see that. But however, I could not understand how "struct rtable"
can be casted to "struct dst_entry" and then back again, all the while
accessing fields of both structures.
You miss the point that they are the same structure. It is allocated
the size of "struct rtable" but it may be casted back and forth
between rtable and dst_entry as desired.
void foo(void)
{
struct rtable rt;
struct dst_entry *dst;
rt->u.dst.bar = 1;
dst = (struct dst_entry *) &rt;
ASSERT(dst->bar == 1);
dst = &rt->u.dst;
ASSERT(dst->bar == 1);
}I think I finally understand the whole setup. Please correct if I'm wrong. "struct rtable" has its first field "u" which is a union of "dst_entry" and "struct rtable *". Thus when we cast rtable to dst_entry, we are accessing the rtable.u.dst_entry itself and not any other part of rtable. Since originally the data was allocated the size of "rtable", when we cast "dst_entry" to "struct rtable" we can access all the fields of "struct table". Thanks a lot for the clarification. Ashok