From ce332a23a3ff45a5aeb3e737da15b469badd5d12 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 2 Oct 2016 23:47:34 +0200 Subject: [PATCH] ash: [PARSER] Add nlprompt/nlnoprompt helpers Upstream commit: Date: Mon, 29 Sep 2014 22:53:53 +0800 [PARSER] Add nlprompt/nlnoprompt helpers This patch adds the nlprompt/nlnoprompt helpers to isolate code dealing with newlines and prompting. Signed-off-by: Herbert Xu Signed-off-by: Denys Vlasenko --- shell/ash.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index 714b011a5..a317d0080 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -10030,6 +10030,19 @@ preadbuffer(void) return (unsigned char)*g_parsefile->next_to_pgetc++; } +static void +nlprompt(void) +{ + g_parsefile->linno++; + setprompt_if(doprompt, 2); +} +static void +nlnoprompt(void) +{ + g_parsefile->linno++; + needprompt = doprompt; +} + static int pgetc(void) { @@ -10118,8 +10131,7 @@ pgetc_eatbnl(void) break; } - g_parsefile->linno++; - setprompt_if(doprompt, 2); + nlprompt(); } return c; @@ -11409,8 +11421,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) if (syntax == BASESYNTAX) goto endword; /* exit outer loop */ USTPUTC(c, out); - g_parsefile->linno++; - setprompt_if(doprompt, 2); + nlprompt(); c = pgetc(); goto loop; /* continue outer loop */ case CWORD: @@ -11444,7 +11455,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) USTPUTC('\\', out); pungetc(); } else if (c == '\n') { - setprompt_if(doprompt, 2); + nlprompt(); } else { #if ENABLE_ASH_EXPAND_PRMT if (c == '$' && pssyntax) { @@ -11615,8 +11626,7 @@ checkend: { continue; if (*p == '\n' && *q == '\0') { c = PEOF; - g_parsefile->linno++; - needprompt = doprompt; + nlnoprompt(); } else { pushstring(line, NULL); } @@ -11898,8 +11908,7 @@ parsebackq: { case '\\': pc = pgetc(); if (pc == '\n') { - g_parsefile->linno++; - setprompt_if(doprompt, 2); + nlprompt(); /* * If eating a newline, avoid putting * the newline into the new character @@ -11924,8 +11933,7 @@ parsebackq: { raise_error_syntax("EOF in backquote substitution"); case '\n': - g_parsefile->linno++; - needprompt = doprompt; + nlnoprompt(); break; default: @@ -12057,16 +12065,14 @@ xxreadtoken(void) pungetc(); break; /* return readtoken1(...) */ } - startlinno = ++g_parsefile->linno; - setprompt_if(doprompt, 2); + nlprompt(); } else { const char *p; p = xxreadtoken_chars + sizeof(xxreadtoken_chars) - 1; if (c != PEOF) { if (c == '\n') { - g_parsefile->linno++; - needprompt = doprompt; + nlnoprompt(); } p = strchr(xxreadtoken_chars, c); @@ -12119,15 +12125,13 @@ xxreadtoken(void) continue; case '\\': if (pgetc() == '\n') { - startlinno = ++g_parsefile->linno; - setprompt_if(doprompt, 2); + nlprompt(); continue; } pungetc(); goto breakloop; case '\n': - g_parsefile->linno++; - needprompt = doprompt; + nlnoprompt(); RETURN(TNL); case PEOF: RETURN(TEOF); -- 2.25.1