From b51a3420b00502315e608dac0cb33917c235d277 Mon Sep 17 00:00:00 2001 From: yanghuang Date: Wed, 11 Oct 2023 17:21:09 +0800 Subject: [kernel] 解决rt_slist_for_each_entry宏不能正常遍历slist链表中元素的问题 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 因rt_slist_for_each_entry宏不能正常调用,在实际开发中去循环再调用rt_slist_entry很不简洁,所以修改了rt_slist_for_each_entry宏中关于链表next的判空处理。目前相关代码在GD32系统的MCU上均能正常工作,相关应用也在生产产品中经过验证。 --- include/rtservice.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'include') 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 -- cgit v1.3.1