list_for_each_entry() の内部で使うのが本来の用途だと思われるが、こんな風に使うこともできるはず。
struct hoge { int data_foo; struct list_head node; int data_bar; }; struct hoge hoge_1; struct hoge hoge_2; /* list_head は次の要素の list_head を指しているものとする、本当は list_add を使う */ hoge_1.node.next = &hoge_2.node; /* リストの途中の要素を指すポインタがわかっているとする */ struct hoge *hoge_list_entry1 = &hoge_1; /* リストの途中の要素を指すポインタから、次の要素を指すポインタを取得できる */ struct hoge *hoge_list_entry2 = list_next_entry(hoge_list_entry1, node);
/** * list_next_entry - get the next element in list * @pos: the type * to cursor * @member: the name of the list_head within the struct. */ #define list_next_entry(pos, member) \ list_entry((pos)->member.next, typeof(*(pos)), member)