summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authoryanghuang <[email protected]>2023-10-11 17:21:09 +0800
committerguo <[email protected]>2023-11-06 10:03:04 +0800
commitb51a3420b00502315e608dac0cb33917c235d277 (patch)
tree90195abd2761a463929679a86002f9f961a26e5a /include
parentbb8667e13b728d0584c21c30daac9bc517b6e300 (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.h6
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