On Wed, Jan 04, 2023 at 11:18:49AM +0000, Harald van Dijk wrote: > > One is that because of what you say, the history recording for commands > greater than BUFSIZ is already buggy, but unlikely to pose a problem in > practice currently because normally, people don't write such long commands. It's not just that people don't write long lines, it's the fact that most people use the shell with a terminal device in canonical mode and the line length is capped in canonical mode to some value less than 8K. > Another is that the stripping of blank lines from history breaks when blank > lines are significant, as in > > $ cat <<EOF > > hello > > > > world > > EOF > hello > > world > $ fc 1 > 26 > q > hello > world > > Note how the blank line was lost. > > If there was already "something" (as the code puts it), then when more data > is appended, blanks must be preserved. Good point. This patch should fix it. ---8<--- Blank line should not be skipped if they're found on PS2. Reported-by: Harald van Dijk <harald@xxxxxxxxxxx> Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> diff --git a/src/input.c b/src/input.c index 7b37ae2..5dcc8a2 100644 --- a/src/input.c +++ b/src/input.c @@ -254,6 +254,7 @@ retry: static int preadbuffer(void) { + int first = whichprompt == 1; int something; char savec; int more; @@ -279,7 +280,7 @@ again: q = parsefile->nextc; /* delete nul characters */ - something = 0; + something = !first; for (;;) { int c; @@ -327,7 +328,7 @@ check: if (parsefile->fd == 0 && hist && something) { HistEvent he; INTOFF; - history(hist, &he, whichprompt == 1? H_ENTER : H_APPEND, + history(hist, &he, first ? H_ENTER : H_APPEND, parsefile->nextc); INTON; } -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt