summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/list.h
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src/list.h')
-rw-r--r--libglusterfs/src/list.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/libglusterfs/src/list.h b/libglusterfs/src/list.h
index 04b404712..3bb991fac 100644
--- a/libglusterfs/src/list.h
+++ b/libglusterfs/src/list.h
@@ -212,4 +212,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 */