From acf79f9913e4cf9b2889404af6758ec8a0d6b090 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 14 Feb 2020 16:12:06 +0100 Subject: [PATCH] ash: use pgetc_eatbnl() in more places, take 2 Adding previously skipped "readtoken1(pgetc_eatbnl(), DQSYNTAX..." changes from upstream commit: Date: Thu Mar 8 08:37:11 2018 +0100 Author: Harald van Dijk parser: use pgetc_eatbnl() in more places dash has a pgetc_eatbnl function in parser.c which skips any backslash-newline combinations. It's not used everywhere it could be. There is also some duplicated backslash-newline handling elsewhere in parser.c. Replace most of the calls to pgetc() with calls to pgetc_eatbnl() and remove the duplicated backslash-newline handling. Signed-off-by: Herbert Xu Signed-off-by: Denys Vlasenko --- shell/ash.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index fb4028219..c177ac038 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -12194,7 +12194,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) } USTPUTC(c, out); nlprompt(); - c = pgetc(); + c = synstack->syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl(); goto loop; /* continue outer loop */ case CWORD: USTPUTC(c, out); @@ -12226,8 +12226,6 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) USTPUTC(CTLESC, out); USTPUTC('\\', out); pungetc(); - } else if (c == '\n') { - nlprompt(); } else { if (pssyntax && c == '$') { USTPUTC(CTLESC, out); @@ -12347,7 +12345,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) IF_ASH_ALIAS(if (c != PEOA)) USTPUTC(c, out); } - c = pgetc(); + c = synstack->syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl(); } /* for (;;) */ endword: @@ -13093,8 +13091,10 @@ parseheredoc(void) while (here) { tokpushback = 0; setprompt_if(needprompt, 2); - readtoken1(pgetc(), here->here->type == NHERE ? SQSYNTAX : DQSYNTAX, - here->eofmark, here->striptabs); + if (here->here->type == NHERE) + readtoken1(pgetc(), SQSYNTAX, here->eofmark, here->striptabs); + else + readtoken1(pgetc_eatbnl(), DQSYNTAX, here->eofmark, here->striptabs); n = stzalloc(sizeof(struct narg)); n->narg.type = NARG; /*n->narg.next = NULL; - stzalloc did it */