diff options
Diffstat (limited to 'src/common/dllist.h')
-rw-r--r-- | src/common/dllist.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/common/dllist.h b/src/common/dllist.h index 499151e..504291e 100644 --- a/src/common/dllist.h +++ b/src/common/dllist.h @@ -121,6 +121,10 @@ void __dl_list_del(dl_list_item *, dl_list_head *); (iter->member.next == &head->member ? \ NULL : container_of(iter->member.next, type, member)) +#define dl_list_prev_iter(iter, head, type, member) \ + (&iter->member == &head->member ? \ + NULL : container_of(iter->member.prev, type, member)) + #define dl_list_for_each(pos, head, type, member) \ for (pos = head; \ pos != NULL; \ @@ -140,8 +144,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *); #define dl_list_for_each_rev(pos, head, type, member) \ for (pos = dl_list_last(head, type, member); \ pos != NULL; \ - pos = (pos == head ? \ - NULL : container_of(pos->member.prev, type, member))) + pos = dl_list_prev_iter(pos, (head), type, member)) |