summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2016-10-02 23:47:34 +0200
committerDenys Vlasenko2016-10-02 23:47:34 +0200
commitce332a23a3ff45a5aeb3e737da15b469badd5d12 (patch)
tree88de12acf709b1d3a84b9bdd6dd6ea679347ebfe
parent80729a4472e3876c885139414e035fe50e696cbf (diff)
downloadbusybox-ce332a23a3ff45a5aeb3e737da15b469badd5d12.zip
busybox-ce332a23a3ff45a5aeb3e737da15b469badd5d12.tar.gz
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>
-rw-r--r--shell/ash.c42
1 files changed, 23 insertions, 19 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 714b011..a317d00 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);