diff options
| author | yanghuang <[email protected]> | 2023-10-11 17:21:09 +0800 |
|---|---|---|
| committer | guo <[email protected]> | 2023-11-06 10:03:04 +0800 |
| commit | b51a3420b00502315e608dac0cb33917c235d277 (patch) | |
| tree | 90195abd2761a463929679a86002f9f961a26e5a /include | |
| parent | bb8667e13b728d0584c21c30daac9bc517b6e300 (diff) | |
[kernel] 解决rt_slist_for_each_entry宏不能正常遍历slist链表中元素的问题
因rt_slist_for_each_entry宏不能正常调用,在实际开发中去循环再调用rt_slist_entry很不简洁,所以修改了rt_slist_for_each_entry宏中关于链表next的判空处理。目前相关代码在GD32系统的MCU上均能正常工作,相关应用也在生产产品中经过验证。
Diffstat (limited to 'include')
| -rw-r--r-- | include/rtservice.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/rtservice.h b/include/rtservice.h index ae7e69cf5e..03301aa99a 100644 --- a/include/rtservice.h +++ b/include/rtservice.h @@ -280,9 +280,9 @@ rt_inline int rt_slist_isempty(rt_slist_t *l) * @param member the name of the list_struct within the struct. */ #define rt_slist_for_each_entry(pos, head, member) \ - for (pos = rt_slist_entry((head)->next, typeof(*pos), member); \ - &pos->member != (RT_NULL); \ - pos = rt_slist_entry(pos->member.next, typeof(*pos), member)) + for (pos = ((head)->next == (RT_NULL) ? (RT_NULL) : rt_slist_entry((head)->next, typeof(*pos), member)); \ + pos != (RT_NULL) && &pos->member != (RT_NULL); \ + pos = (pos->member.next == (RT_NULL) ? (RT_NULL) : rt_slist_entry(pos->member.next, typeof(*pos), member))) /** * rt_slist_first_entry - get the first element from a slist |
