summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-09-26 17:14:16 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2007-09-26 17:14:16 +0800
commit5025e10a003d5ce73d845e89a1638a626ab52fa4 (patch)
treecedb134fdcc43c93be2f48bfdf09b4b98960b019 /src
parent[EXPAND] Refresh stack pointers after makestrspace in _rmescapes (diff)
downloaddash-5025e10a003d5ce73d845e89a1638a626ab52fa4.tar.gz
dash-5025e10a003d5ce73d845e89a1638a626ab52fa4.zip
[PARSER] Recognise here-doc delimiters terminated by EOF
Previously dash required a <newline> character to be present in order for
a here-document delimiter to be detected.  Allowing EOF in the absence of
a <newline> to play the same purpose allows some intuitive scripts to
succeed.  POSIX seems to be silence on this so this should be OK.

Test case:

	eval 'cat <<- NOT
		test
	NOT'
	echo OK

Old result:

	test
	NOTOK

New result:

	test
	OK
Diffstat (limited to 'src')
-rw-r--r--src/parser.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/parser.c b/src/parser.c
index 1a483d4..cac0aa5 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1049,8 +1049,14 @@ checkend: {
 				char *p, *q;
 
 				p = line;
-				for (q = eofmark + 1 ; *q && *p == *q ; p++, q++);
-				if (*p == '\n' && *q == '\0') {
+				for (q = eofmark + 1;; p++, q++) {
+					c = *p;
+					if (c == '\n')
+						c = 0;
+					if (!*q || c != *q)
+						break;
+				}
+				if (c == *q) {
 					c = PEOF;
 					plinno++;
 					needprompt = doprompt;
'> In an attempt to be layout agnostic. 2017-06-06Add Tarmak layoutsJune McEnroe From <https://github.com/sblaurock/tarmak-layouts>. 2017-05-26Rename keyboard layout ProgrammingJune McEnroe 2017-05-25Fix Library install conditionJune McEnroe 2017-05-25Revert "Remove macOS keyboard layout"June McEnroe This reverts commit ba72f89c0354810ff576ea9892db55dfa9844dca. 2017-05-08Fix copy mode bindings for tmux 2.4June McEnroe Incompatible change that makes no sense to me. 2017-05-02Remove option unnecessary in nvim 0.2June McEnroe 2017-05-01Reorder lines in psqlrcJune McEnroe 2017-05-01Clean up Karabiner configurationJune McEnroe 2017-05-01Fix prune script loopJune McEnroe For loop was getting one string with several paths separated by newlines. 2017-05-01Fix prune scriptJune McEnroe The for loop was overriding zsh's $path variable, causing it to not be able to find rm. 2017-05-01Clean up SSH configJune McEnroe 2017-05-01Rename colorscheme "trivial"June McEnroe 2017-05-01Update vendored pathogenJune McEnroe 2017-05-01Clean up git configJune McEnroe 2017-05-01Clean up style in xxJune McEnroe 2017-05-01Clean up style in pbdJune McEnroe 2017-05-01Use EX_OK in pbcopyJune McEnroe 2017-04-30Clean up clockJune McEnroe 2017-04-30Clean up error strings in briJune McEnroe 2017-03-18Add -u option to xxJune McEnroe 2017-03-15Fix non-string-literal-format-string in briJune McEnroe 2017-03-15Fix bri compilationJune McEnroe cc will remove the file itself just fine. Always exit in case any of the shell commands fail. 2017-03-15Use psvar for title settingJune McEnroe Prevents prompt expansion from happening on the command being run when it is set in the title. 2017-03-14Add bri brightness control scriptJune McEnroe This is probably terrible. 2017-03-14Add comment to tmux terminal overrideJune McEnroe 2017-03-13Have tmux set block cursor on linux consoleJune McEnroe 2017-03-13Use inverse for Visual in colorschemeJune McEnroe