From: Kevin Wolf <kwolf@redhat.com>
To: "Richard W.M. Jones" <rjones@redhat.com>
Cc: Max Reitz <mreitz@redhat.com>, Eric Blake <eblake@redhat.com>,
qemu-block@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command.
Date: Tue, 8 Jan 2019 13:16:25 +0100 [thread overview]
Message-ID: <20190108121625.GA11492@linux.fritz.box> (raw)
In-Reply-To: <20190107184058.GN27120@redhat.com>
Am 07.01.2019 um 19:40 hat Richard W.M. Jones geschrieben:
> On Mon, Jan 07, 2019 at 06:50:53PM +0100, Max Reitz wrote:
> [...]
>
> I don't particularly care how we fix this, but it breaks the nbdkit
> tests on FreeBSD so I am keen to fix it one way or another.
>
> > And if optreset not being available for glibc is the only issue, I'd say
> > adding it as a weak global variable would work without #ifdefs.
>
> The weak global variable doesn't make the code "#ifdef free". I tried
> a patch like this:
>
> +int optreset __attribute__((weak));
>
> ...
>
> static int command(...)
> {
> ...
> optind = 0;
> + optreset = 1;
> ...
> }
>
> but that still doesn't work on FreeBSD.
>
> You have to set optind=1 apparently. So if we want to set optreset=1
> we still end up with #ifdef __FreeBSD__. The final patch will
> end up looking something like:
>
> static int command(...)
> {
> ...
> +#ifdef __FreeBSD__
> + optind = 1;
> + optreset = 1;
> +#else
> optind = 0;
> +#endif
> ...
> }
Unconditionally setting optind = 1 looks fine. I would, however, quote a
different part of the glibc man page (in addition or instead of the
paragraph you already quoted):
The variable optind is the index of the next element to be
processed in argv. The system initializes this value to 1. The
caller can reset it to 1 to restart scanning of the same argv, or
when scanning a new argument vector.
This makes it pretty clear that optind = 1 is fine for our case with
glibc. The FreeBSD man page still suggests that we need optreset = 1, so
I suppose we'd end up with something like:
...
optind = 1;
#ifdef __FreeBSD__
optreset = 1;
#endif
...
I think I slightly prefer the #ifdef to a weak variable, but that's
another option.
Kevin
next prev parent reply other threads:[~2019-01-08 12:16 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-03 9:47 [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command Richard W.M. Jones
2019-01-03 9:47 ` Richard W.M. Jones
2019-01-03 19:46 ` Eric Blake
2019-01-07 17:17 ` Max Reitz
2019-01-07 17:46 ` Eric Blake
2019-01-07 17:50 ` Max Reitz
2019-01-07 17:59 ` Eric Blake
2019-01-07 18:14 ` Max Reitz
2019-01-07 18:45 ` Eric Blake
2019-01-09 12:30 ` Max Reitz
2019-01-07 18:40 ` Richard W.M. Jones
2019-01-08 12:16 ` Kevin Wolf [this message]
2019-01-08 14:51 ` Eric Blake
2019-01-08 15:13 ` Kevin Wolf
2019-01-08 15:35 ` Richard W.M. Jones
2019-01-09 12:33 ` Max Reitz
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=20190108121625.GA11492@linux.fritz.box \
--to=kwolf@redhat.com \
--cc=eblake@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rjones@redhat.com \
/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.