aboutsummaryrefslogtreecommitdiffstats
path: root/src/list.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/list.h')
-rw-r--r--src/list.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/list.h b/src/list.h
index 0f0909bb..de656b9d 100644
--- a/src/list.h
+++ b/src/list.h
@@ -66,7 +66,13 @@ hlist_add_after(struct hlist_node *n, struct hlist_node *prev)
; pos != container_of(NULL, typeof(*pos), member) \
; pos = container_of(pos->member.next, typeof(*pos), member))
-#define hlist_for_each_entry_safe(pos, pprev, head, member) \
+#define hlist_for_each_entry_safe(pos, n, head, member) \
+ for (pos = container_of((head)->first, typeof(*pos), member) \
+ ; pos != container_of(NULL, typeof(*pos), member) \
+ && ({ n = pos->member.next; 1; }) \
+ ; pos = container_of(n, typeof(*pos), member))
+
+#define hlist_for_each_entry_pprev(pos, pprev, head, member) \
for (pprev = &(head)->first \
; *pprev && ({ pos=container_of(*pprev, typeof(*pos), member); 1; }) \
; pprev = &(*pprev)->next)