On Wednesday, May 13, 2015 at 8:52:10 AM UTC+8, Daniel Doron wrote:
>
> Hi,
>
> I am working on some stuff involving hlists in kernel. I have seen this in
> lists.h:
>
> #define hlist_for_each_entry(tpos, pos, head, member) \
> for (pos = (head)->first; \
> pos && \
> ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
> pos = pos->next)
>
>
> I have never encountered this syntax in C before, I am referring to the
> curly braces and dangling "1" inside the for loop second parameter.
> Can someone explain this?
>
>
look at the definition for hlist_entry (include/linux/list.h):
#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
and then container_of:
61 #define container_of(ptr, type, member) ({ \
62 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
63 (type *)( (char *)__mptr - offsetof(type,member) );})
and so on.
But "1" in general means TRUE.
--
You received this message because you are subscribed to the Google Groups
"linuxkernelnewbies" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.