This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] manual: Document optind zero set behaviour (BZ#23157)
- From: Carlos O'Donell <carlos at redhat dot com>
- To: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>, libc-alpha at sourceware dot org
- Date: Wed, 23 May 2018 13:52:39 -0400
- Subject: Re: [PATCH] manual: Document optind zero set behaviour (BZ#23157)
- References: <1526931539-11863-1-git-send-email-adhemerval.zanella@linaro.org>
On 05/21/2018 03:38 PM, Adhemerval Zanella wrote:
> POSIX [1] does not explicit state the expected way to rescans the same
> vector more than once. FreeBSD [2], for instance, exports a non-standard
> variable 'optreset' which must be set to '1' prior the second and each
> additional call to 'getopt'. GLIBC in turn requires the program to
> reset 'optind' to 0 instead (and POSIX states the behavior is unspecified).
I see 5 getopt test cases that use optind = 1 to reparse the options.
Is it optind = 1 or optind = 0?
Can you verify the exact behaviour by adding a specific test case that
tests for *just* this particular behaviour?
> Unfortunately this is not documented on the manual, only on man-pages [3]
> (on NOTES). This patch adds an explanation of this behavior on manual.
>
> * manual/getopt.texi: Document optind zero set behaviour.
>
> [1] http://pubs.opengroup.org/onlinepubs/9699919799/
> [2] https://www.freebsd.org/cgi/man.cgi?getopt(3)
> [3] http://man7.org/linux/man-pages/man3/getopt.3.html
> ---
> ChangeLog | 4 ++++
> manual/getopt.texi | 6 ++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/manual/getopt.texi b/manual/getopt.texi
> index 5485fc4..a4f6366 100644
> --- a/manual/getopt.texi
> +++ b/manual/getopt.texi
> @@ -45,6 +45,12 @@ of the @var{argv} array to be processed. Once @code{getopt} has found
> all of the option arguments, you can use this variable to determine
> where the remaining non-option arguments begin. The initial value of
> this variable is @code{1}.
> +
> +Resetting the variable value to @code{0} forces the invocation of an
> +internal initialization routine and it is used mainly when a program
> +wants to rescan the same vector more than once. It also should be used
> +to scan multiple argument vectors or if @code{POSIXLY_CORRECT} is changed
> +between scans.
> @end deftypevar
Suggest:
Resetting the variable's value to @code{0} forces the invocation of an
internal initialization routine and, on subsequent calls to getopt, causes
the program to rescan the same vector more than once. This behaviour may
also be used to scan multiple argument vectors or if @code{POSIXLY_CORRECT}
is changed between scans.
> @deftypevar {char *} optarg
>
--
Cheers,
Carlos.