summaryrefslogtreecommitdiff
path: root/Src/linklist.c
diff options
context:
space:
mode:
authorAxel Beckert <abe@deuxchevaux.org>2017-08-10 17:16:37 +0200
committerAxel Beckert <abe@deuxchevaux.org>2017-08-10 17:16:37 +0200
commite3b67a8198c852bf6c9db3a0a1a20e87a4e1da74 (patch)
tree8486633f6232f49ea330ab8e036decb5dc3bbf74 /Src/linklist.c
parentf8edeff2494bf23e2ee29d4c761361b1c878e09d (diff)
parentdc475bfa0ec6cd03789dde3bf28f71e0ea9d5003 (diff)
downloadzsh-e3b67a8198c852bf6c9db3a0a1a20e87a4e1da74.tar.gz
zsh-e3b67a8198c852bf6c9db3a0a1a20e87a4e1da74.zip
Merge tag '5.4.1' into debian
Release 5.4.1.
Diffstat (limited to 'Src/linklist.c')
-rw-r--r--Src/linklist.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/Src/linklist.c b/Src/linklist.c
index 3aa8125d9..85d9bb367 100644
--- a/Src/linklist.c
+++ b/Src/linklist.c
@@ -348,6 +348,35 @@ newsizedlist(int size)
}
/*
+ * Join two linked lists. Neither may be null, though either
+ * may be empty.
+ *
+ * It is assumed the pieces come from the heap, but if not it is
+ * safe to free LinkList second.
+ */
+
+/**/
+mod_export LinkList
+joinlists(LinkList first, LinkList second)
+{
+ LinkNode moveme = firstnode(second);
+ if (moveme) {
+ if (firstnode(first)) {
+ LinkNode anchor = lastnode(first);
+ anchor->next = moveme;
+ moveme->prev = anchor;
+ } else {
+ first->list.first = moveme;
+ moveme->prev = &first->node;
+ }
+ first->list.last = second->list.last;
+
+ second->list.first = second->list.last = NULL;
+ }
+ return first;
+}
+
+/*
* Return the node whose data is the pointer "dat", else NULL.
* Can be used as a boolean test.
*/