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