search for: pungetc

Displaying 20 results from an estimated 20 matches for "pungetc".

Did you mean: ungetc
2019 Jan 25
0
[klibc:update-dash] input: Allow two consecutive calls to pungetc
...mit;h=39d9f472762cd928024a5cb836aef46f14031756 Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Mon, 5 Jan 2015 22:50:57 +1100 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Fri, 25 Jan 2019 02:57:21 +0000 [klibc] input: Allow two consecutive calls to pungetc The commit ef91d3d6a4c39421fd3a391e02cd82f9f3aee4a8 ([PARSER] Handle backslash newlines properly after dollar sign) created cases where we make two consecutive calls to pungetc. As we don't explicitly support that there are corner cases where you end up with garbage input leading to undefined...
2020 Mar 28
0
[klibc:update-dash] dash: input: Allow two consecutive calls to pungetc
...21178cb4e427385a4aba8dc2a2df50f34ae6684e Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Mon, 5 Jan 2015 22:50:57 +1100 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Sat, 28 Mar 2020 21:42:54 +0000 [klibc] dash: input: Allow two consecutive calls to pungetc [ dash commit 17db43b5841504b694203952fb0e82246c06a97f ] The commit ef91d3d6a4c39421fd3a391e02cd82f9f3aee4a8 ([PARSER] Handle backslash newlines properly after dollar sign) created cases where we make two consecutive calls to pungetc. As we don't explicitly support that there are corner case...
2019 Jan 25
0
[klibc:update-dash] [PARSER] Removed unnecessary pungetc on EOF from parser
...it;a=commit;h=68538dfb6bf8b4d98d973c80cd77e843fa0b24b7 Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Tue, 28 Oct 2014 10:32:03 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Fri, 25 Jan 2019 02:57:21 +0000 [klibc] [PARSER] Removed unnecessary pungetc on EOF from parser Doing a pungetc on an EOF is a noop and is only useful when we don't know what character we're putting back. This patch removes an unnecessary pungetc when we know it's EOF. Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchin...
2020 Mar 28
0
[klibc:update-dash] dash: [PARSER] Removed unnecessary pungetc on EOF from parser
...ommit;h=1e4af96f419af543624e38676fecd88c6691883d Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Tue, 28 Oct 2014 10:32:03 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Sat, 28 Mar 2020 21:42:54 +0000 [klibc] dash: [PARSER] Removed unnecessary pungetc on EOF from parser [ dash commit a31c812b02d7fc331f8a0c5aedbbf12b4025c1db ] Doing a pungetc on an EOF is a noop and is only useful when we don't know what character we're putting back. This patch removes an unnecessary pungetc when we know it's EOF. Signed-off-by: Herbert Xu <her...
2019 Jan 25
0
[klibc:update-dash] parser: use pgetc_eatbnl() in more places
...n(void) setprompt(2); } for (;;) { /* until token or start of word found */ - c = pgetc(); + c = pgetc_eatbnl(); switch (c) { case ' ': case '\t': case PEOA: @@ -791,30 +794,23 @@ xxreadtoken(void) while ((c = pgetc()) != '\n' && c != PEOF); pungetc(); continue; - case '\\': - if (pgetc() == '\n') { - nlprompt(); - continue; - } - pungetc(); - goto breakloop; case '\n': nlnoprompt(); RETURN(TNL); case PEOF: RETURN(TEOF); case '&': - if (pgetc() == '&') +...
2020 Mar 28
0
[klibc:update-dash] dash: parser: use pgetc_eatbnl() in more places
...n(void) setprompt(2); } for (;;) { /* until token or start of word found */ - c = pgetc(); + c = pgetc_eatbnl(); switch (c) { case ' ': case '\t': case PEOA: @@ -791,30 +794,23 @@ xxreadtoken(void) while ((c = pgetc()) != '\n' && c != PEOF); pungetc(); continue; - case '\\': - if (pgetc() == '\n') { - nlprompt(); - continue; - } - pungetc(); - goto breakloop; case '\n': nlnoprompt(); RETURN(TNL); case PEOF: RETURN(TEOF); case '&': - if (pgetc() == '&') +...
2019 Jan 25
0
[klibc:update-dash] [PARSER] Handle backslash newlines properly after dollar sign
...it a/usr/dash/parser.c b/usr/dash/parser.c index c4eaae2b..2b07437e 100644 --- a/usr/dash/parser.c +++ b/usr/dash/parser.c @@ -827,6 +827,24 @@ breakloop: #undef RETURN } +static int pgetc_eatbnl(void) +{ + int c; + + while ((c = pgetc()) == '\\') { + if (pgetc() != '\n') { + pungetc(); + break; + } + + plinno++; + if (doprompt) + setprompt(2); + } + + return c; +} + /* @@ -1179,7 +1197,7 @@ parsesub: { char *p; static const char types[] = "}-+?="; - c = pgetc(); + c = pgetc_eatbnl(); if ( (checkkwd & CHKEOFMARK) || c <= PEOA || @@ -1...
2020 Mar 28
0
[klibc:update-dash] dash: [PARSER] Handle backslash newlines properly after dollar sign
...it a/usr/dash/parser.c b/usr/dash/parser.c index c4eaae2b..2b07437e 100644 --- a/usr/dash/parser.c +++ b/usr/dash/parser.c @@ -827,6 +827,24 @@ breakloop: #undef RETURN } +static int pgetc_eatbnl(void) +{ + int c; + + while ((c = pgetc()) == '\\') { + if (pgetc() != '\n') { + pungetc(); + break; + } + + plinno++; + if (doprompt) + setprompt(2); + } + + return c; +} + /* @@ -1179,7 +1197,7 @@ parsesub: { char *p; static const char types[] = "}-+?="; - c = pgetc(); + c = pgetc_eatbnl(); if ( (checkkwd & CHKEOFMARK) || c <= PEOA || @@ -1...
2019 Jan 25
0
[klibc:update-dash] parser: Add syntax stack for recursive parsing
...USTPUTC(c, out); break; case CCTL: - if (eofmark == NULL || dblquote) + if (eofmark == NULL || synstack->dblquote) USTPUTC(CTLESC, out); USTPUTC(c, out); break; @@ -929,13 +947,18 @@ readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs) pungetc(); } else { if ( - dblquote && + synstack->dblquote && c != '\\' && c != '`' && c != '$' && ( c != '"' || - eofmark != NULL + (eofmark != NULL && + !...
2020 Mar 28
0
[klibc:update-dash] dash: parser: Add syntax stack for recursive parsing
...USTPUTC(c, out); break; case CCTL: - if (eofmark == NULL || dblquote) + if (eofmark == NULL || synstack->dblquote) USTPUTC(CTLESC, out); USTPUTC(c, out); break; @@ -929,13 +947,18 @@ readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs) pungetc(); } else { if ( - dblquote && + synstack->dblquote && c != '\\' && c != '`' && c != '$' && ( c != '"' || - eofmark != NULL + (eofmark != NULL && + !...
2019 Jan 25
0
[klibc:update-dash] [PARSER] Add nlprompt/nlnoprompt helpers
...ompt(void) +{ + plinno++; + needprompt = doprompt; +} + /* * Read the next input token. @@ -786,16 +799,13 @@ xxreadtoken(void) continue; case '\\': if (pgetc() == '\n') { - plinno++; - if (doprompt) - setprompt(2); + nlprompt(); continue; } pungetc(); goto breakloop; case '\n': - plinno++; - needprompt = doprompt; + nlnoprompt(); RETURN(TNL); case PEOF: RETURN(TEOF); @@ -837,9 +847,7 @@ static int pgetc_eatbnl(void) break; } - plinno++; - if (doprompt) - setprompt(2); + nlprompt(); } return...
2020 Mar 28
0
[klibc:update-dash] dash: [PARSER] Add nlprompt/nlnoprompt helpers
...ompt(void) +{ + plinno++; + needprompt = doprompt; +} + /* * Read the next input token. @@ -786,16 +799,13 @@ xxreadtoken(void) continue; case '\\': if (pgetc() == '\n') { - plinno++; - if (doprompt) - setprompt(2); + nlprompt(); continue; } pungetc(); goto breakloop; case '\n': - plinno++; - needprompt = doprompt; + nlnoprompt(); RETURN(TNL); case PEOF: RETURN(TEOF); @@ -837,9 +847,7 @@ static int pgetc_eatbnl(void) break; } - plinno++; - if (doprompt) - setprompt(2); + nlprompt(); } return...
2019 Jan 25
0
[klibc:update-dash] input: Make preadbuffer static
...char *q; int more; diff --git a/usr/dash/input.h b/usr/dash/input.h index 775291b8..90ff6c33 100644 --- a/usr/dash/input.h +++ b/usr/dash/input.h @@ -52,7 +52,6 @@ extern char *parsenextc; /* next character in input buffer */ int pgetc(void); int pgetc2(void); -int preadbuffer(void); void pungetc(void); void pushstring(char *, void *); void popstring(void);
2019 Jan 25
0
[klibc:update-dash] parser: Fix parameter expansion inside inner double quotes
...by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/parser.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usr/dash/parser.c b/usr/dash/parser.c index efa8060f..8e407816 100644 --- a/usr/dash/parser.c +++ b/usr/dash/parser.c @@ -1325,10 +1325,11 @@ badsub: pungetc(); } - if (newsyn == ARISYNTAX && subtype > VSNORMAL) + if (newsyn == ARISYNTAX) newsyn = DQSYNTAX; - if (newsyn != synstack->syntax) { + if ((newsyn != synstack->syntax || synstack->innerdq) && + subtype != VSNORMAL) { synstack_push(&synstack...
2020 Mar 28
0
[klibc:update-dash] dash: input: Make preadbuffer static
...char *q; int more; diff --git a/usr/dash/input.h b/usr/dash/input.h index 775291b8..90ff6c33 100644 --- a/usr/dash/input.h +++ b/usr/dash/input.h @@ -52,7 +52,6 @@ extern char *parsenextc; /* next character in input buffer */ int pgetc(void); int pgetc2(void); -int preadbuffer(void); void pungetc(void); void pushstring(char *, void *); void popstring(void);
2020 Mar 28
0
[klibc:update-dash] dash: parser: Fix parameter expansion inside inner double quotes
...by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/parser.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usr/dash/parser.c b/usr/dash/parser.c index efa8060f..8e407816 100644 --- a/usr/dash/parser.c +++ b/usr/dash/parser.c @@ -1325,10 +1325,11 @@ badsub: pungetc(); } - if (newsyn == ARISYNTAX && subtype > VSNORMAL) + if (newsyn == ARISYNTAX) newsyn = DQSYNTAX; - if (newsyn != synstack->syntax) { + if ((newsyn != synstack->syntax || synstack->innerdq) && + subtype != VSNORMAL) { synstack_push(&synstack...
2019 Jan 25
0
[klibc:update-dash] input: Move all input state into parsefile
...} #endif if (vflag) { - out2str(parsenextc); + out2str(parsefile->nextc); #ifdef FLUSHERR flushout(out2); #endif @@ -312,7 +286,7 @@ again: *q = savec; - return (signed char)*parsenextc++; + return (signed char)*parsefile->nextc++; } /* @@ -323,8 +297,8 @@ again: void pungetc(void) { - parsenleft++; - parsenextc--; + parsefile->nleft++; + parsefile->nextc--; } /* @@ -346,15 +320,15 @@ pushstring(char *s, void *ap) parsefile->strpush = sp; } else sp = parsefile->strpush = &(parsefile->basestrpush); - sp->prevstring = parsenextc; - sp-&g...
2020 Mar 28
0
[klibc:update-dash] dash: input: Move all input state into parsefile
...} #endif if (vflag) { - out2str(parsenextc); + out2str(parsefile->nextc); #ifdef FLUSHERR flushout(out2); #endif @@ -312,7 +286,7 @@ again: *q = savec; - return (signed char)*parsenextc++; + return (signed char)*parsefile->nextc++; } /* @@ -323,8 +297,8 @@ again: void pungetc(void) { - parsenleft++; - parsenextc--; + parsefile->nleft++; + parsefile->nextc--; } /* @@ -346,15 +320,15 @@ pushstring(char *s, void *ap) parsefile->strpush = sp; } else sp = parsefile->strpush = &(parsefile->basestrpush); - sp->prevstring = parsenextc; - sp-&g...
2019 Jan 25
0
[klibc:update-dash] [SHELL] Optimize dash -c "command" to avoid a fork
...ken read */ -MKINIT int tokpushback; /* last token pushed back */ +int tokpushback; /* last token pushed back */ char *wordtext; /* text of last word returned by readtoken */ int checkkwd; struct nodelist *backquotelist; @@ -210,6 +210,7 @@ list(int nlflag) parseheredoc(); else pungetc(); /* push back EOF on input */ + tokpushback++; return n1; default: if (nlflag == 1) diff --git a/usr/dash/parser.h b/usr/dash/parser.h index e6caed63..2875cce6 100644 --- a/usr/dash/parser.h +++ b/usr/dash/parser.h @@ -34,6 +34,8 @@ * @(#)parser.h 8.3 (Berkeley) 5/4/95 */ +#in...
2020 Mar 28
0
[klibc:update-dash] dash: [SHELL] Optimize dash -c "command" to avoid a fork
...ken read */ -MKINIT int tokpushback; /* last token pushed back */ +int tokpushback; /* last token pushed back */ char *wordtext; /* text of last word returned by readtoken */ int checkkwd; struct nodelist *backquotelist; @@ -210,6 +210,7 @@ list(int nlflag) parseheredoc(); else pungetc(); /* push back EOF on input */ + tokpushback++; return n1; default: if (nlflag == 1) diff --git a/usr/dash/parser.h b/usr/dash/parser.h index e6caed63..2875cce6 100644 --- a/usr/dash/parser.h +++ b/usr/dash/parser.h @@ -34,6 +34,8 @@ * @(#)parser.h 8.3 (Berkeley) 5/4/95 */ +#in...