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 <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-10-02 23:47:34 +02:00
parent 80729a4472
commit ce332a23a3

View File

@ -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);