From 9bead8c7f5f6acd236c3adbabad796153fcae4cc Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 16 Aug 2019 11:27:50 +0200 Subject: [PATCH] MINOR: list: add LIST_SPLICE() to merge one list into another This will move the contents of list at the beginning of list . --- include/common/mini-clist.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h index 592bb9613..0cdddce04 100644 --- a/include/common/mini-clist.h +++ b/include/common/mini-clist.h @@ -86,6 +86,14 @@ struct cond_wordlist { /* adds an element at the end of a list ; returns the element */ #define LIST_ADDQ(lh, el) ({ (el)->p = (lh)->p; (el)->p->n = (lh)->p = (el); (el)->n = (lh); (el); }) +/* adds the contents of a list at the beginning of another list . The old list head remains untouched. */ +#define LIST_SPLICE(new, old) do { \ + if (!LIST_ISEMPTY(old)) { \ + (old)->p->n = (new)->n; (old)->n->p = (new); \ + (new)->n->p = (old)->p; (new)->n = (old)->n; \ + } \ + } while (0) + /* removes an element from a list and returns it */ #define LIST_DEL(el) ({ typeof(el) __ret = (el); (el)->n->p = (el)->p; (el)->p->n = (el)->n; (__ret); })