From: Willy Tarreau Date: Fri, 16 Aug 2019 09:27:50 +0000 (+0200) Subject: MINOR: list: add LIST_SPLICE() to merge one list into another X-Git-Tag: v2.1-dev2~199 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bead8c7f5f6acd236c3adbabad796153fcae4cc;p=thirdparty%2Fhaproxy.git MINOR: list: add LIST_SPLICE() to merge one list into another This will move the contents of list at the beginning of list . --- diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h index 592bb96136..0cdddce04f 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); })