diff options
Diffstat (limited to 'libglusterfs/src/list.h')
-rw-r--r-- | libglusterfs/src/list.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libglusterfs/src/list.h b/libglusterfs/src/list.h index 886c4f273..52d98fc51 100644 --- a/libglusterfs/src/list.h +++ b/libglusterfs/src/list.h @@ -120,6 +120,7 @@ list_splice (struct list_head *list, struct list_head *head) } +/* Splice moves @list to the head of the list at @head. */ static inline void list_splice_init (struct list_head *list, struct list_head *head) { @@ -131,6 +132,38 @@ list_splice_init (struct list_head *list, struct list_head *head) } +static inline void +__list_append (struct list_head *list, struct list_head *head) +{ + (head->prev)->next = (list->next); + (list->next)->prev = (head->prev); + (head->prev) = (list->prev); + (list->prev)->next = head; +} + + +static inline void +list_append (struct list_head *list, struct list_head *head) +{ + if (list_empty (list)) + return; + + __list_append (list, head); +} + + +/* Append moves @list to the end of @head */ +static inline void +list_append_init (struct list_head *list, struct list_head *head) +{ + if (list_empty (list)) + return; + + __list_append (list, head); + INIT_LIST_HEAD (list); +} + + #define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) |