| Commit message (Expand) | Author | Age | Files | Lines |
| * | declare __getopt_msg in stdio_impl.h•••it's not ideal, but the function is essentially an extended stdio
function specialized to getopt's needs. the only reason it exists is
avoiding pulling printf code into every program using getopt.
| Rich Felker | 2018-09-12 | 1 | -2/+1 |
| * | getopt_long_only: don't prefix-match long-options that match short ones•••for getopt_long, partial (prefix) matches of long options always begin
with "--" and thus can never be ambiguous with a short option. for
getopt_long_only, though, a single-character option can match both a
short option and as a prefix for a long option. in this case, we
wrongly interpreted it as a prefix for the long option.
introduce a new pass, only in long-only mode, to check the prefix
match against short options before accepting it. the only reason
there's a slightly nontrivial loop being introduced rather than strchr
is that our getopt already supports multibyte short options, and
getopt_long_long should handle them consistently. a temp buffer and
strstr could have been used, but the code to set it up would be just
as large as what's introduced here and it would unnecessarily pull in
relatively large code for strstr.
| Rich Felker | 2018-04-27 | 1 | -2/+15 |
| * | getopt_long: accept prefix match of long options containing equals signs•••Consider the first equals sign found in the option to be the delimiter
between it and its argument, even if it matches an equals sign in the
option name. This avoids consuming the equals sign, which would prevent
finding the argument. Instead, it forces a partial match of the part of
the option name before the equals sign.
Maintainer's note: GNU getopt_long does not explicitly document this
behavior, but it can be seen as a consequence of how partial matches
are specified, and at least GNU (bfd) ld is known to make use of it.
| Samuel Holland | 2018-01-31 | 1 | -1/+2 |
| * | fix getopt_long arguments to partial matches•••If we find a partial option name match, we need to keep looking for
ambiguous/conflicting options. However, we need to remember the position
in the candidate argument to find its option-argument later, if there is
one. This fixes e.g. option "foobar" being given as "--fooba=baz".
| Samuel Holland | 2018-01-31 | 1 | -1/+3 |
| * | fix getopt[_long] clobbering of optopt on success•••getopt is only specified to modify optopt on error, and some software
apparently infers an error from optopt!=0.
getopt_long is changed analogously. the resulting behavior differs
slightly from the behavior of the GNU implementation of getopt_long,
which keeps an internal shadow copy of optopt and copies it to the
public one on return, but since the GNU implementation also exhibits
this shadow-copy behavior for plain getopt where is is non-conforming,
I think this can reasonably be considered a bug rather than an
intentional behavior that merits mimicing.
| Rich Felker | 2017-01-04 | 1 | -1/+3 |
| * | fix getopt_long_only misinterpreting "--" as an option | Rich Felker | 2016-10-20 | 1 | -1/+1 |
| * | simplify part of getopt_long•••as a result of commit e8e4e56a8ce1f3d7e4a027ff5478f2f8ea70c46b,
the later code path for setting optarg to a null pointer is no longer
necessary, and removing it eliminates an indention level and arguably
makes the code more readable.
| Rich Felker | 2015-01-21 | 1 | -13/+11 |
| * | always set optarg in getopt_long•••the standard getopt does not touch optarg unless processing an option
with an argument. however, programs using the GNU getopt API, which we
attempt to provide in getopt_long, expect optarg to be a null pointer
after processing an option without an argument.
before argument permutation support was added, such programs typically
detected its absence and used their own replacement getopt_long,
masking the discrepency in behavior.
| Rich Felker | 2015-01-21 | 1 | -1/+1 |
| * | fix regression in getopt_long support for non-option arguments•••commit b72cd07f176b876aa51864d93aa8101477b1d732 added support for a
this feature in getopt, but it was later broken in the case where
getopt_long is used as a side effect of the changes made in commit
91184c4f16b143107fa9935edebe5d2b20bd70d8, which prevented the
underlying getopt call from seeing the leading '-' or '+' character in
optstring.
this commit changes the logic in the getopt_long core to check for a
leading colon, possibly after the leading '-' or '+', without
depending on the latter having been skipped by the caller. a minor
incorrectness in the return value for one error condition in
getopt_long is also fixed when opterr has been set to zero but
optstring has no leading ':'.
| Rich Felker | 2015-01-11 | 1 | -7/+6 |
| * | set optopt in getopt_long•••this is undocumented but possibly expected behavior of GNU
getopt_long, and useful when error message printing has been
suppressed.
| Rich Felker | 2014-12-20 | 1 | -0/+1 |
| * | add error message printing to getopt_long and make related improvements•••some related changes are also made to getopt, and the return value of
getopt_long in the case of missing arguments is fixed.
| Rich Felker | 2014-12-20 | 1 | -4/+30 |
| * | simplify getopt_long argv permutation loop logic | Rich Felker | 2014-12-13 | 1 | -3/+1 |
| * | fix handling of "--" with getopt_long argv permutation•••if argv permutation is used, the option terminator "--" should be
moved before any skipped non-option arguments rather than being left
in the argv tail where the caller will see and interpret it.
| Rich Felker | 2014-12-13 | 1 | -1/+0 |
| * | accept null longopts pointer in getopt_long•••this is an undocumented feature of GNU getopt_long that the BSD
version also mimics, and is reportedly needed by some programs.
| Rich Felker | 2014-12-11 | 1 | -1/+1 |
| * | support abbreviated options in getopt_long | Rich Felker | 2014-12-10 | 1 | -7/+18 |
| * | support options after non-option arguments in getopt_long (argv permutation) | Rich Felker | 2014-12-10 | 1 | -0/+39 |
| * | add support for non-option arguments extension to getopt•••this is a GNU extension, activated by including '-' as the first
character of the options string, whereby non-option arguments are
processed as if they were arguments to an option character '\1' rather
than ending option processing.
| Gianluca Anzolin | 2014-12-02 | 1 | -3/+4 |
| * | add getopt reset support•••based on proposed patches by Daniel Cegiełka, with minor changes:
- use a weak symbol for optreset so it doesn't clash with namespace
- also reset optpos (position in multi-option arg like -lR)
- also make getopt_long support reset
| Rich Felker | 2012-09-30 | 1 | -0/+7 |
| * | cleanup src/linux and src/misc trees, etc.•••previously, it was pretty much random which one of these trees a given
function appeared in. they have now been organized into:
src/linux: non-POSIX linux syscalls (possibly shard with other nixen)
src/legacy: various obsolete/legacy functions, mostly wrappers
src/misc: still mostly uncategorized; some misc POSIX, some nonstd
src/crypt: crypt hash functions
further cleanup will be done later.
| Rich Felker | 2012-09-07 | 1 | -0/+52 |