summary refs log tree commit diff
path: root/Src/Zle/zle_utils.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2005-01-26 18:12:08 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2005-01-26 18:12:08 +0000
commit85e0b5f3770fc0bb84b080740dd578169d4e511c (patch)
treeef55f3c5749a70f8100765f9e19a1bdd43ce639d /Src/Zle/zle_utils.c
parent3934f7a40208adc9334b5f957be4c5b9dee29979 (diff)
downloadzsh-85e0b5f3770fc0bb84b080740dd578169d4e511c.tar.gz
zsh-85e0b5f3770fc0bb84b080740dd578169d4e511c.tar.xz
zsh-85e0b5f3770fc0bb84b080740dd578169d4e511c.zip
20752: fix access to ZLE parameters
Diffstat (limited to 'Src/Zle/zle_utils.c')
-rw-r--r--Src/Zle/zle_utils.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/Src/Zle/zle_utils.c b/Src/Zle/zle_utils.c
index 0e8099bd2..ffd94def8 100644
--- a/Src/Zle/zle_utils.c
+++ b/Src/Zle/zle_utils.c
@@ -410,9 +410,14 @@ foredel(int ct)
 
 /**/
 void
-setline(char const *s)
+setline(char *s, int flags)
 {
-    char *scp = ztrdup(s);
+    char *scp;
+
+    if (flags & ZSL_COPY)
+	scp = ztrdup(s);
+    else
+	scp = s;
     /*
      * TBD: we could make this more efficient by passing the existing
      * allocated line to stringaszleline.
@@ -421,10 +426,13 @@ setline(char const *s)
 
     zleline = stringaszleline(scp, &zlell, &linesz);
 
-    if ((zlecs = zlell) && invicmdmode())
+    if ((flags & ZSL_TOEND) && (zlecs = zlell) && invicmdmode())
 	zlecs--;
+    else if (zlecs > zlell)
+	zlecs = zlell;
 
-    free(scp);
+    if (flags & ZSL_COPY)
+	free(scp);
 }
 
 /**/