X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=list.h;h=66c6d91525031261ff94cd3028e672cb340c06cd;hp=d28de9cc1a9dd30fa06f3a0426bdf6f4ba83c308;hb=refs%2Fheads%2Fnext;hpb=c921f9ce6eaa8f2620c28b9bab931074c382449f diff --git a/list.h b/list.h index d28de9cc..82f5b36d 100644 --- a/list.h +++ b/list.h @@ -25,9 +25,11 @@ struct list_head { #define INITIALIZED_LIST_HEAD(name) struct list_head name = {&(name), &(name)} /** This must be called before using any other list functions. */ -#define INIT_LIST_HEAD(ptr) do { \ - (ptr)->next = (ptr); (ptr)->prev = (ptr); \ -} while (0) +static inline void init_list_head(struct list_head *head) +{ + head->next = head; + head->prev = head; +} /** * Insert a new entry after the specified head. @@ -103,6 +105,16 @@ static inline int list_empty(const struct list_head *head) return head->next == head; } +/** + * Test whether a list has just one entry. + * + * \param head The list to test. + */ +static inline int list_is_singular(const struct list_head *head) +{ + return !list_empty(head) && (head->next == head->prev); +} + /** * Get the struct in which this entry is embedded in. * @@ -115,7 +127,7 @@ static inline int list_empty(const struct list_head *head) /** * Iterate over a list. * - * \param pos A list head pointer which serves as the iterator. + * \param pos A struct pointer which serves as the iterator. * \param head The head of the list. * \param member The name of the list head member within the structure. */ @@ -127,8 +139,8 @@ static inline int list_empty(const struct list_head *head) /** * Iterate over list, safe against removal of list entry. * - * \param pos The iterator. - * \param n A list head pointer which is used as temporary storage. + * \param pos The iterator struct pointer. + * \param n A second struct pointer which is used as temporary storage. * \param head The head of the list. * \param member The name of the list head member within the structure. */ @@ -149,13 +161,5 @@ static inline int list_empty(const struct list_head *head) */ #define list_first_entry(ptr, type, member) \ list_entry((ptr)->next, type, member) - -/** - * Test whether a list has just one entry. - * - * \param head The list to test. - */ -static inline int list_is_singular(const struct list_head *head) -{ - return !list_empty(head) && (head->next == head->prev); -} +#define list_last_entry(ptr, type, member) \ + list_entry((ptr)->prev, type, member)