list: Introduce a handy list_first_entry macro

From: Pavel Emelianov <xemul@sw.ru>

There are many places where the construction like

   foo = list_entry(head->next, struct foo_struct, list);

are used.

The code might look more descriptive and neat if using the macro

   list_first_entry(head, type, member) \
             list_entry((head)->next, type, member)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Pavel Emelianov 2008-06-28 09:59:54 -03:00 committed by Arnaldo Carvalho de Melo
parent a7d599c203
commit 041f60ec0d
1 changed files with 11 additions and 0 deletions

11
list.h
View File

@ -280,6 +280,17 @@ static inline void list_splice_init(struct list_head *list,
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
/**
* list_first_entry - get the first element from a list
* @ptr: the list head to take the element from.
* @type: the type of the struct this is embedded in.
* @member: the name of the list_struct within the struct.
*
* Note, that list is expected to be not empty.
*/
#define list_first_entry(ptr, type, member) \
list_entry((ptr)->next, type, member)
/**
* list_for_each - iterate over a list
* @pos: the &struct list_head to use as a loop cursor.