From: Jilles Tjoelker <jilles@stack.nl>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Eric Blake <eblake@redhat.com>, Oleg Bulatov <oleg@bulatov.me>,
dash@vger.kernel.org
Subject: Re: Line continuation and variables
Date: Wed, 29 Oct 2014 22:52:30 +0100 [thread overview]
Message-ID: <20141029215230.GA48394@stack.nl> (raw)
In-Reply-To: <20140929145507.GA3670@gondor.apana.org.au>
On Mon, Sep 29, 2014 at 10:55:07PM +0800, Herbert Xu wrote:
> On Tue, Aug 26, 2014 at 12:34:42PM +0000, Eric Blake wrote:
> [snip]
> > So the fact that dash is treating the elided backslash-newline as a
> > token separator, and parsing your input as if ${EDIT}OR instead of
> > ${EDITOR} is a bug in dash.
> I agree. The following patch should fix this:
> commit ef91d3d6a4c39421fd3a391e02cd82f9f3aee4a8
> Author: Herbert Xu <herbert@gondor.apana.org.au>
> Date: Mon Sep 29 22:52:41 2014 +0800
> [PARSER] Handle backslash newlines properly after dollar sign
> [snip]
> diff --git a/ChangeLog b/ChangeLog
> index 0fbc514..398bd15 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,6 +1,7 @@
> 2014-09-29 Herbert Xu <herbert@gondor.apana.org.au>
>
> * Kill pgetc_macro.
> + * Handle backslash newlines properly after dollar sign.
>
> 2014-09-28 Herbert Xu <herbert@gondor.apana.org.au>
>
> diff --git a/src/parser.c b/src/parser.c
> index c4eaae2..2b07437 100644
> --- a/src/parser.c
> +++ b/src/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;
> +}
> +
>
>
> /*
This implementation of pgetc_eatbnl() does not allow pushing back a
backslash, since that would call pungetc() twice without an intervening
pgetc(). However, some places do attempt to push back a backslash. As a
result, a script file containing many repeated ${w#\#} will not be
parsed correctly. There is a similar bug with repeated $\# but this is
not specified by POSIX.
--
Jilles Tjoelker
next prev parent reply other threads:[~2014-10-29 21:52 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 12:15 Line continuation and variables Oleg Bulatov
2014-08-26 12:34 ` Eric Blake
2014-09-29 14:55 ` Herbert Xu
2014-09-29 14:57 ` Herbert Xu
2014-10-29 21:52 ` Jilles Tjoelker [this message]
2014-10-30 2:10 ` Herbert Xu
2015-01-05 12:00 ` [0/4] input: Allow two consecutive calls to pungetc Herbert Xu
2015-01-05 12:01 ` [PATCH 1/4] input: Make preadbuffer static Herbert Xu
2015-01-05 12:01 ` [PATCH 2/4] input: Remove HETIO Herbert Xu
2015-01-05 12:01 ` [PATCH 3/4] input: Move all input state into parsefile Herbert Xu
2015-01-05 12:01 ` [PATCH 4/4] input: Allow two consecutive calls to pungetc Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141029215230.GA48394@stack.nl \
--to=jilles@stack.nl \
--cc=dash@vger.kernel.org \
--cc=eblake@redhat.com \
--cc=herbert@gondor.apana.org.au \
--cc=oleg@bulatov.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.