diff --git a/src/frontend/parser/lexical.c b/src/frontend/parser/lexical.c index fbda40cd4..e34b3370e 100644 --- a/src/frontend/parser/lexical.c +++ b/src/frontend/parser/lexical.c @@ -104,6 +104,13 @@ pwlist_echo(wordlist *wlist, char *name) } +static int +cp_readchar(char **string, FILE *fptr) +{ + return (*string) ? *(*string)++ : input(fptr); +} + + /* CDHW */ wordlist * @@ -169,7 +176,7 @@ nloop: c = strip(c); if ((c == '\\' && DIR_TERM != '\\') || (c == '\026') /* ^V */ ) { - c = quote(string ? *string++ : input(cp_inp_cur)); + c = quote(cp_readchar(&string, cp_inp_cur)); linebuf[j++] = (char) strip(c); } @@ -212,7 +219,7 @@ nloop: goto done; case '\'': - while (((c = (string ? *string++ : input(cp_inp_cur))) != '\'') && + while (((c = cp_readchar(&string, cp_inp_cur)) != '\'') && (i < NEW_BSIZE_SP - 1)) { if ((c == '\n') || (c == EOF) || (c == ESCAPE)) @@ -227,14 +234,14 @@ nloop: case '`': d = c; buf[i++] = (char) d; - while (((c = (string ? *string++ : input(cp_inp_cur))) != d) && + while (((c = cp_readchar(&string, cp_inp_cur)) != d) && (i < NEW_BSIZE_SP - 2)) { if ((c == '\n') || (c == EOF) || (c == ESCAPE)) goto gotchar; if (c == '\\') { linebuf[j++] = (char) c; - c = (string ? *string++ : input(cp_inp_cur)); + c = cp_readchar(&string, cp_inp_cur); buf[i++] = (char) quote(c); linebuf[j++] = (char) c; } else {