[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) be
From: |
Kevin Wolf |
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 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
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
- [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., (continued)
- [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Richard W.M. Jones, 2019/01/03
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Eric Blake, 2019/01/03
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Max Reitz, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Eric Blake, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Max Reitz, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Eric Blake, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Max Reitz, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Eric Blake, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Max Reitz, 2019/01/09
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Richard W.M. Jones, 2019/01/07
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command.,
Kevin Wolf <=
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Eric Blake, 2019/01/08
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Kevin Wolf, 2019/01/08
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Richard W.M. Jones, 2019/01/08
- Re: [Qemu-devel] [PATCH v2] qemu-io: Reinitialize optind to 1 (not 0) before parsing inner command., Max Reitz, 2019/01/09