From f3802ec464da14e7c5f3168c59fdc4e367c11e89 Mon Sep 17 00:00:00 2001 From: CTCaer Date: Tue, 3 Mar 2020 04:24:38 +0200 Subject: [PATCH] lists: Fix list member iteration with no entries --- bootloader/utils/list.h | 5 +++-- nyx/nyx_gui/utils/list.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bootloader/utils/list.h b/bootloader/utils/list.h index 7d43e36..b891bb7 100644 --- a/bootloader/utils/list.h +++ b/bootloader/utils/list.h @@ -33,9 +33,10 @@ #define LIST_FOREACH_SAFE(iter, list) \ for(link_t *iter = (list)->next, *safe = iter->next; iter != (list); iter = safe, safe = iter->next) -/*! Iterate over all list members. */ +/*! Iterate over all list members and make sure that the list has at least one entry. */ #define LIST_FOREACH_ENTRY(etype, iter, list, mn) \ - for(etype *iter = CONTAINER_OF((list)->next, etype, mn); &iter->mn != (list); iter = CONTAINER_OF(iter->mn.next, etype, mn)) + if ((list)->next != (list)) \ + for(etype *iter = CONTAINER_OF((list)->next, etype, mn); &iter->mn != (list); iter = CONTAINER_OF(iter->mn.next, etype, mn)) typedef struct _link_t { diff --git a/nyx/nyx_gui/utils/list.h b/nyx/nyx_gui/utils/list.h index 7d43e36..b891bb7 100644 --- a/nyx/nyx_gui/utils/list.h +++ b/nyx/nyx_gui/utils/list.h @@ -33,9 +33,10 @@ #define LIST_FOREACH_SAFE(iter, list) \ for(link_t *iter = (list)->next, *safe = iter->next; iter != (list); iter = safe, safe = iter->next) -/*! Iterate over all list members. */ +/*! Iterate over all list members and make sure that the list has at least one entry. */ #define LIST_FOREACH_ENTRY(etype, iter, list, mn) \ - for(etype *iter = CONTAINER_OF((list)->next, etype, mn); &iter->mn != (list); iter = CONTAINER_OF(iter->mn.next, etype, mn)) + if ((list)->next != (list)) \ + for(etype *iter = CONTAINER_OF((list)->next, etype, mn); &iter->mn != (list); iter = CONTAINER_OF(iter->mn.next, etype, mn)) typedef struct _link_t {