diff options
Diffstat (limited to 'missing/getopt_long.c')
-rw-r--r-- | missing/getopt_long.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/missing/getopt_long.c b/missing/getopt_long.c index 80857369..37062404 100644 --- a/missing/getopt_long.c +++ b/missing/getopt_long.c @@ -495,16 +495,32 @@ start: } } - if ((optchar = (int)*place++) == (int)':' || - (optchar == (int)'-' && *place != '\0') || - (oli = strchr(options, optchar)) == NULL) { + optchar = (int)*place++; + /* + * If the user specified "-" and '-' isn't listed in + * options, return -1 (non-option) as per POSIX. + */ + if (optchar == (int)'-' && *place == '\0') + return (-1); + if (optchar == (int)':') { + if (!*place) + ++optind; +#ifdef GNU_COMPATIBLE + if (PRINT_ERROR) + warnx(posixly_correct ? illoptchar : gnuoptchar, + optchar); +#else + if (PRINT_ERROR) + warnx(illoptchar, optchar); +#endif + optopt = optchar; + return (BADCH); + } + oli = strchr(options, optchar); + if (oli == NULL) { /* - * If the user specified "-" and '-' isn't listed in - * options, return -1 (non-option) as per POSIX. - * Otherwise, it is an unknown option character (or ':'). + * Unknown option character. */ - if (optchar == (int)'-' && *place == '\0') - return (-1); if (!*place) ++optind; #ifdef GNU_COMPATIBLE |