On Thu, Jan 05, 2023 at 02:42:04PM +0100, наб wrote: > > I think this means we also need to turn the USTPUTC() into STPUTC(), > since the previous code explicitly over-accounted for it in growstackto(). Good catch. However, we can easily get rid of it by moving the USTPUTC to the top: ---8<--- As we are allowed to perform 4 USTPUTC's we can save a growstackstr call by adding the CTLBACKQ before we save the string. Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> diff --git a/src/parser.c b/src/parser.c index f5f76d5..299c260 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1360,6 +1360,7 @@ parsebackq: { struct heredoc *saveheredoclist; int uninitialized_var(saveprompt); + USTPUTC(CTLBACKQ, out); str = stackblock(); savelen = out - (char *)stackblock(); grabstackblock(savelen); @@ -1443,7 +1444,6 @@ done: if (oldstyle) tokpushback = 0; out = stnputs(str, savelen, stackblock()); - STPUTC(CTLBACKQ, out); if (oldstyle) goto parsebackq_oldreturn; else -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt