From: Rusty Russell <rusty@rustcorp.com.au>
To: Daniel Mierswa <impulze@impulze.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [RFC] Re: Parsing kernel parameters and escaping "
Date: Mon, 13 Jul 2009 09:27:15 +0930 [thread overview]
Message-ID: <200907130927.16203.rusty@rustcorp.com.au> (raw)
In-Reply-To: <4A5A248B.1070606@impulze.org>
On Mon, 13 Jul 2009 03:29:39 am Daniel Mierswa wrote:
> Tested:
> |param| => [param[(none)]]
> |param=| => [param[]]
> |param=value| => [param[value]]
> |param=value=withequal | => [param[value=withequal]]
> |param="value with spaces" | => [param[value with spaces]]
> |param="value with spaces and quotes \"" | => [param[value with spaces and
> | quotes "]] param=\"foo\" | => [param[\"foo" ]]
> |"param = value" | => [param = value[(none)]]
Hi Daniel!
It might be nice to have that test code somewhere at the bottom of param.c,
at least while we're playing with the code.
> Thanks for your kind feedback, I'm willing to put more effort into this
> when needed. I really first wanted to check if patches for this are
> welcomed.
Well, IMO it's a maintainer's job to give feedback, and patches should always be welcomed (even if not applied!).
Now to the details:
> +static size_t pull_token(char *args, char const *delim)
> {
> - unsigned int i, equals = 0;
> - int in_quote = 0, quoted = 0;
> - char *next;
> + size_t length = 0;
> + char *iterator = NULL, *last_quote = NULL;
> +
> + for (iterator = args; *iterator; iterator++, length++) {
I really prefer "i" instead of "iterator". I actually think i as an
unsigned/size_t here would probably make the code neater, but that's an aside.
> + if (*iterator == '"') {
> + if (last_quote) {
> + char *mover = last_quote;
> +
> + /* move whole string back until current " is reached */
> + while (mover != iterator - 1) {
> + *mover = *(mover + 1);
> + mover++;
> + }
memmove?
> + {
> + /* check for delimiter */
> + char const *delim_iterator = NULL;
> + for (delim_iterator = delim; *delim_iterator; delim_iterator++) {
> + if (*iterator == *delim_iterator) {
> + return length;
> + }
> + }
How about:
if (strchr(delim, *iterator))
return length;
> +static char *next_arg(char *args, char **param, char **val)
> +{
> + size_t len;
> +
> + /* Chew leading spaces */
> + while (*args == ' ')
> + args++;
Note that this will undo another pending patch, which changes this to
isspace() to handle tabs et al.
Thanks!
Rusty.
next prev parent reply other threads:[~2009-07-12 23:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-05 13:54 Parsing kernel parameters and escaping " Daniel Mierswa
2009-07-06 23:03 ` [RFC] " Daniel Mierswa
2009-07-06 23:05 ` Daniel Mierswa
2009-07-07 0:54 ` Daniel Mierswa
2009-07-12 9:41 ` Rusty Russell
2009-07-12 17:59 ` Daniel Mierswa
2009-07-12 23:57 ` Rusty Russell [this message]
2009-07-13 2:49 ` Daniel Mierswa
2009-07-14 2:49 ` Rusty Russell
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=200907130927.16203.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=impulze@impulze.org \
--cc=linux-kernel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox