diff options
Diffstat (limited to 'libglusterfs/src/list.h')
-rw-r--r-- | libglusterfs/src/list.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libglusterfs/src/list.h b/libglusterfs/src/list.h index 7f3712b51..6fcf17f35 100644 --- a/libglusterfs/src/list.h +++ b/libglusterfs/src/list.h @@ -187,4 +187,18 @@ list_append_init (struct list_head *list, struct list_head *head) &pos->member != (head); \ pos = n, n = list_entry(n->member.prev, typeof(*n), member)) +/* + * This list implementation has some advantages, but one disadvantage: you + * can't use NULL to check whether you're at the head or tail. Thus, the + * address of the head has to be an argument for these macros. + */ + +#define list_next(ptr,head,type,member) \ + (((ptr)->member.next == head) ? NULL \ + : list_entry((ptr)->member.next,type,member)) + +#define list_prev(ptr,head,type,member) \ + (((ptr)->member.prev == head) ? NULL \ + : list_entry((ptr)->member.prev,type,member)) + #endif /* _LLIST_H */ |