Module: xenomai-forge Branch: next Commit: c67409451cad54f239df28e4a3ddc138fd41054f URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=c67409451cad54f239df28e4a3ddc138fd41054f
Author: Philippe Gerum <r...@xenomai.org> Date: Sat Jun 28 21:05:23 2014 +0200 boilerplate/list: add safe reverse scanners --- include/boilerplate/private-list.h | 9 +++++++++ include/boilerplate/shared-list.h | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/boilerplate/private-list.h b/include/boilerplate/private-list.h index d1167c2..4e70ac7 100644 --- a/include/boilerplate/private-list.h +++ b/include/boilerplate/private-list.h @@ -187,4 +187,13 @@ static inline int pvlist_heading_p(const struct pvholder *holder, pos = pvlist_entry(pos->member.prev, \ typeof(*pos), member)) +#define pvlist_for_each_entry_reverse_safe(pos, tmp, list, member) \ + for (pos = pvlist_entry((list)->head.prev, \ + typeof(*pos), member), \ + tmp = pvlist_entry((pos)->member.prev, \ + typeof(*pos), member); \ + &(pos)->member != &(list)->head; \ + pos = tmp, tmp = pvlist_entry((pos)->member.prev, \ + typeof(*pos), member)) + #endif /* !_BOILERPLATE_PRIVATE_LIST_H */ diff --git a/include/boilerplate/shared-list.h b/include/boilerplate/shared-list.h index 51e1ea4..a98cbe0 100644 --- a/include/boilerplate/shared-list.h +++ b/include/boilerplate/shared-list.h @@ -294,6 +294,15 @@ static inline int list_heading_p(const struct holder *holder, pos = tmp, tmp = list_entry(__hptr((heap), (pos)->member.next), \ typeof(*pos), member)) +#define __list_for_each_entry_reverse_safe(heap, pos, tmp, list, member) \ + for (pos = list_entry(__hptr((heap), (list)->head.prev), \ + typeof(*pos), member), \ + tmp = list_entry(__hptr((heap), (pos)->member.prev), \ + typeof(*pos), member); \ + &(pos)->member != &(list)->head; \ + pos = tmp, tmp = list_entry(__hptr((heap), (pos)->member.prev), \ + typeof(*pos), member)) + #define list_for_each_entry_safe(pos, tmp, list, member) \ __list_for_each_entry_safe(__main_heap, pos, tmp, list, member) @@ -307,4 +316,7 @@ static inline int list_heading_p(const struct holder *holder, #define list_for_each_entry_reverse(pos, list, member) \ __list_for_each_entry_reverse(__main_heap, pos, list, member) +#define list_for_each_entry_reverse_safe(pos, tmp, list, member) \ + __list_for_each_entry_reverse_safe(__main_heap, pos, tmp, list, member) + #endif /* !_BOILERPLATE_SHARED_LIST_H */ _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git