From 66b93be793af309fb78d54199aed2306650079d0 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 7 Apr 2010 17:56:20 -0700 Subject: getopt mishandles optstring of "+:" --- posix/getopt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'posix') diff --git a/posix/getopt.c b/posix/getopt.c index b778047..2746364 100644 --- a/posix/getopt.c +++ b/posix/getopt.c @@ -395,8 +395,6 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; - if (optstring[0] == ':') - print_errors = 0; if (argc < 1) return -1; @@ -411,6 +409,10 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring, posixly_correct); d->__initialized = 1; } + else if (optstring[0] == '-' || optstring[0] == '+') + optstring++; + if (optstring[0] == ':') + print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag -- cgit v1.1