mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
getopt: tidy up _getopt_initialize a bit
_getopt_data.__posixly_correct is completely redundant to _getopt_data.__ordering, and some work that logically belongs in _getopt_initialize was being done by _getopt_internal_r, making the code harder to understand. As a side effect, getenv will no longer be called if the first character of the options string is '+' or '-', which is probably a Good Thing. (Perhaps we should have a flag character that specifically asks for the permutation behavior?) * posix/getopt_int.h (_getopt_data): Remove __posixly_correct field. * posix/getopt.c (_getopt_internal_r): Move some initialization code... (_getopt_initialize): ...here. Don't set d->__posixly_correct.
This commit is contained in:
parent
7a7be6c9a2
commit
c1af8775f2
@ -1,5 +1,9 @@
|
||||
2017-04-07 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* posix/getopt_int.h (_getopt_data): Remove __posixly_correct field.
|
||||
* posix/getopt.c (_getopt_internal_r): Move some initialization code...
|
||||
(_getopt_initialize): ...here. Don't set d->__posixly_correct.
|
||||
|
||||
* posix/getopt.h: Add backup definition of __nonnull for
|
||||
consistency with gnulib. Define __getopt_argv_const to const
|
||||
if not already defined.
|
||||
|
@ -188,15 +188,13 @@ _getopt_initialize (int argc, char **argv, const char *optstring,
|
||||
/* Start processing options with ARGV-element 1 (since ARGV-element 0
|
||||
is the program name); the sequence of previously skipped
|
||||
non-option ARGV-elements is empty. */
|
||||
if (d->optind == 0)
|
||||
d->optind = 1;
|
||||
|
||||
d->__first_nonopt = d->__last_nonopt = d->optind;
|
||||
|
||||
d->__nextchar = NULL;
|
||||
|
||||
d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
|
||||
|
||||
/* Determine how to handle the ordering of options and nonoptions. */
|
||||
|
||||
if (optstring[0] == '-')
|
||||
{
|
||||
d->__ordering = RETURN_IN_ORDER;
|
||||
@ -207,11 +205,12 @@ _getopt_initialize (int argc, char **argv, const char *optstring,
|
||||
d->__ordering = REQUIRE_ORDER;
|
||||
++optstring;
|
||||
}
|
||||
else if (d->__posixly_correct)
|
||||
else if (posixly_correct || !!getenv ("POSIXLY_CORRECT"))
|
||||
d->__ordering = REQUIRE_ORDER;
|
||||
else
|
||||
d->__ordering = PERMUTE;
|
||||
|
||||
d->__initialized = 1;
|
||||
return optstring;
|
||||
}
|
||||
|
||||
@ -284,15 +283,10 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
|
||||
d->optarg = NULL;
|
||||
|
||||
if (d->optind == 0 || !d->__initialized)
|
||||
{
|
||||
if (d->optind == 0)
|
||||
d->optind = 1; /* Don't scan ARGV[0], the program name. */
|
||||
optstring = _getopt_initialize (argc, argv, optstring, d,
|
||||
posixly_correct);
|
||||
d->__initialized = 1;
|
||||
}
|
||||
optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct);
|
||||
else if (optstring[0] == '-' || optstring[0] == '+')
|
||||
optstring++;
|
||||
|
||||
if (optstring[0] == ':')
|
||||
print_errors = 0;
|
||||
|
||||
|
@ -83,10 +83,6 @@ struct _getopt_data
|
||||
/* See __ord above. */
|
||||
enum __ord __ordering;
|
||||
|
||||
/* True if behaving strictly as specified by POSIX. */
|
||||
int __posixly_correct;
|
||||
|
||||
|
||||
/* Handle permutation of arguments. */
|
||||
|
||||
/* Describe the part of ARGV that contains non-options that have
|
||||
|
Loading…
Reference in New Issue
Block a user