summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2015-09-02 14:20:44 +0100
committerPeter Stephenson <pws@zsh.org>2015-09-02 14:20:44 +0100
commit0e63286bd47bab051d49597d3df160b1e9dbb6a3 (patch)
tree64e3ef590205fce45a6065df33b4cf1f4a57055e
parent8e3ca08f13f198caa7cd7dc2bb37863238bea4f2 (diff)
downloadzsh-0e63286bd47bab051d49597d3df160b1e9dbb6a3.tar.gz
zsh-0e63286bd47bab051d49597d3df160b1e9dbb6a3.zip
36399: Shell code text with multiple here documents wasn't shown properly.
-rw-r--r--ChangeLog5
-rw-r--r--Src/text.c4
-rw-r--r--Test/A04redirect.ztst31
3 files changed, 38 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 167d2f408..805d3eade 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-02 Peter Stephenson <p.stephenson@samsung.com>
+
+ * 36399: Src/text.c, Test/A04redirect.ztst: shell code with
+ multiple here documents wasn't shown properly.
+
2015-09-01 Mikael Magnusson <mikachu@gmail.com>
* 36380: Src/utils.c: Avoid gcc case syntax
diff --git a/Src/text.c b/Src/text.c
index 3978a26a9..7e65f43a4 100644
--- a/Src/text.c
+++ b/Src/text.c
@@ -77,8 +77,8 @@ taddpending(char *str1, char *str2)
*/
if (tpending) {
int oldlen = strlen(tpending);
- tpending = zrealloc(tpending, len + oldlen);
- sprintf(tpending + oldlen, "%s%s", str1, str2);
+ tpending = zrealloc(tpending, len + oldlen + 1);
+ sprintf(tpending + oldlen, "\n%s%s", str1, str2);
} else {
tpending = (char *)zalloc(len);
sprintf(tpending, "%s%s", str1, str2);
diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst
index 602341d05..d7fe22fb0 100644
--- a/Test/A04redirect.ztst
+++ b/Test/A04redirect.ztst
@@ -555,3 +555,34 @@
0:Assignment with exec used for redirection: POSIX_BUILTINS
>x=And this
?This should appear, too
+
+ fn-two-heres() {
+# tabs below
+ cat <<-x <<-y
+ foo
+ x
+ bar
+ y
+ }
+ which -x2 fn-two-heres
+ fn-two-heres
+ eval "$(which -x2 fn-two-heres)"
+ fn-two-heres
+ print $functions[fn-two-heres]
+0:Two here-documents in a line are shown correctly.
+>fn-two-heres () {
+> cat <<x <<y
+>foo
+>x
+>bar
+>y
+>}
+>foo
+>bar
+>foo
+>bar
+> cat <<x <<y
+>foo
+>x
+>bar
+>y