sh: Allow empty << EOF markers.

This commit is contained in:
Jilles Tjoelker 2015-09-02 19:49:55 +00:00
parent 81dacd8beb
commit 92fe71faae
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=287408
3 changed files with 30 additions and 2 deletions

View File

@ -106,6 +106,8 @@ static int startlinno; /* line # where last token started */
static int funclinno; /* line # where the current function started */
static struct parser_temp *parser_temp;
#define NOEOFMARK ((const char *)&heredoclist)
static union node *list(int);
static union node *andor(void);
@ -972,6 +974,10 @@ checkend(int c, const char *eofmark, int striptabs)
pungetc();
pushstring(eofmark + 1, q - (eofmark + 1), NULL);
}
} else if (c == '\n' && *eofmark == '\0') {
c = PEOF;
plinno++;
needprompt = doprompt;
}
return (c);
}
@ -1383,7 +1389,7 @@ readtoken1(int firstc, char const *initialsyntax, const char *eofmark,
STARTSTACKSTR(out);
loop: { /* for each line, until end of word */
if (eofmark)
if (eofmark && eofmark != NOEOFMARK)
/* set c to PEOF if at end of here document */
c = checkend(c, eofmark, striptabs);
for (;;) { /* until end of line or end of word */
@ -2046,7 +2052,7 @@ expandstr(const char *ps)
parser_temp = NULL;
setinputstring(ps, 1);
doprompt = 0;
readtoken1(pgetc(), DQSYNTAX, "", 0);
readtoken1(pgetc(), DQSYNTAX, NOEOFMARK, 0);
if (backquotelist != NULL)
error("Command substitution not allowed here");

View File

@ -57,6 +57,7 @@ FILES+= heredoc9.0
FILES+= heredoc10.0
FILES+= heredoc11.0
FILES+= heredoc12.0
FILES+= heredoc13.0
FILES+= line-cont1.0
FILES+= line-cont2.0
FILES+= line-cont3.0

View File

@ -0,0 +1,21 @@
# $FreeBSD$
failures=0
check() {
if ! eval "[ $* ]"; then
echo "Failed: $*"
: $((failures += 1))
fi
}
check '"$(cat <<""
echo yes)" = "yes"'
check '"$(cat <<""
yes
)" = "yes"'
exit $((failures != 0))