about summary refs log tree commit diff
path: root/Src/linklist.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2017-04-26 09:44:38 +0100
committerPeter Stephenson <pws@zsh.org>2017-04-26 09:44:38 +0100
commit408b92b168078a338f5fc2c2f95f39f8aa8e5f67 (patch)
treee77e749ecc39de774bfab18e4acfe6adeac9d593 /Src/linklist.c
parentd78b02218eb64aa117f883716d0e039e8604081e (diff)
downloadzsh-408b92b168078a338f5fc2c2f95f39f8aa8e5f67.tar.gz
zsh-408b92b168078a338f5fc2c2f95f39f8aa8e5f67.tar.xz
zsh-408b92b168078a338f5fc2c2f95f39f8aa8e5f67.zip
41008: Handle expansions for precommand modifiers
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.
  */