From 83215a44b8ce6b6a8d4c132c70bc2a888ff46f3d Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Sun, 24 Sep 2017 11:26:02 +0200 Subject: [PATCH] MEDIUM: lists: list_for_each_entry{_safe}_from functions Add list_for_each_entry_from and list_for_each_entry_safe_from which allows to iterate in a list starting from a specific item. --- include/common/mini-clist.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h index da24b3379d..2988d2c20f 100644 --- a/include/common/mini-clist.h +++ b/include/common/mini-clist.h @@ -127,6 +127,16 @@ struct cond_wordlist { &item->member != (list_head); \ item = LIST_ELEM(item->member.n, typeof(item), member)) +/* + * Same as list_for_each_entry but starting from current point + * Iterates through the list starting from + * It's basically the same macro but without initializing item to the head of + * the list. + */ +#define list_for_each_entry_from(item, list_head, member) \ + for ( ; &item->member != (list_head); \ + item = LIST_ELEM(item->member.n, typeof(item), member)) + /* * Simpler FOREACH_ITEM_SAFE macro inspired from Linux sources. * Iterates through a list of items of type "typeof(*item)" which are @@ -142,4 +152,16 @@ struct cond_wordlist { item = back, back = LIST_ELEM(back->member.n, typeof(back), member)) +/* + * Same as list_for_each_entry_safe but starting from current point + * Iterates through the list starting from + * It's basically the same macro but without initializing item to the head of + * the list. + */ +#define list_for_each_entry_safe_from(item, back, list_head, member) \ + for (back = LIST_ELEM(item->member.n, typeof(item), member); \ + &item->member != (list_head); \ + item = back, back = LIST_ELEM(back->member.n, typeof(back), member)) + + #endif /* _COMMON_MINI_CLIST_H */