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 */