From 1db3a390bb5797b0d9d99e295aa68244d5419eb9 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 24 Apr 2024 18:21:50 +0200 Subject: [PATCH] MINOR: list: add a macro to detect that a list contains at most one element The new LIST_ATMOST1() test verifies that the designated element is either alone or points on both sides to the same element. This is used to detect that a list has at most a single element, or that an element about to be deleted was the last one of a list. --- include/haproxy/list.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/haproxy/list.h b/include/haproxy/list.h index 368e6d76b..b922bc19b 100644 --- a/include/haproxy/list.h +++ b/include/haproxy/list.h @@ -106,6 +106,13 @@ */ #define LIST_INLIST(el) ((el)->n != (el)) +/* checks if the list element has the same prev and next, i.e. it's either + * detached or alone in a list since (it points to itself or to a single other + * node). One can check that an element is strictly attached and alone by + * combining this with LIST_INLIST(). + */ +#define LIST_ATMOST1(el) ((el)->n == (el)->p) + /* atomically checks if the list element's next pointer points to anything * different from itself, implying the element should be part of a list. This * usually is similar to LIST_INLIST() except that while that one might be -- 2.47.3