diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/misc/getopt_long.c | 13 | 
1 files changed, 6 insertions, 7 deletions
| diff --git a/src/misc/getopt_long.c b/src/misc/getopt_long.c index e5a4a75a..ffbcd423 100644 --- a/src/misc/getopt_long.c +++ b/src/misc/getopt_long.c @@ -23,7 +23,6 @@ static int __getopt_long_core(int argc, char *const *argv, const char *optstring  static int __getopt_long(int argc, char *const *argv, const char *optstring, const struct option *longopts, int *idx, int longonly)  {  	int ret, skipped, resumed; -	const char *optstring2 = optstring + 1;  	if (!optind || __optreset) {  		__optreset = 0;  		__optpos = 0; @@ -38,10 +37,9 @@ static int __getopt_long(int argc, char *const *argv, const char *optstring, con  			if (argv[i][0] == '-' && argv[i][1]) break;  		}  		optind = i; -		optstring2 = optstring;  	}  	resumed = optind; -	ret = __getopt_long_core(argc, argv, optstring2, longopts, idx, longonly); +	ret = __getopt_long_core(argc, argv, optstring, longopts, idx, longonly);  	if (resumed > skipped) {  		int i, cnt = optind-resumed;  		for (i=0; i<cnt; i++) @@ -58,6 +56,7 @@ static int __getopt_long_core(int argc, char *const *argv, const char *optstring  		((longonly && argv[optind][1]) ||  		 (argv[optind][1] == '-' && argv[optind][2])))  	{ +		int colon = optstring[optstring[0]=='+'||optstring[0]=='-']==':';  		int i, cnt, match;  		char *opt;  		for (cnt=i=0; longopts[i].name; i++) { @@ -79,7 +78,7 @@ static int __getopt_long_core(int argc, char *const *argv, const char *optstring  			optopt = longopts[i].val;  			if (*opt == '=') {  				if (!longopts[i].has_arg) { -					if (optstring[0] == ':' || !opterr) +					if (colon || !opterr)  						return '?';  					__getopt_msg(argv[0],  						": option does not take an argument: ", @@ -91,8 +90,8 @@ static int __getopt_long_core(int argc, char *const *argv, const char *optstring  			} else {  				if (longopts[i].has_arg == required_argument) {  					if (!(optarg = argv[optind])) { -						if (optstring[0] == ':' || !opterr) -							return ':'; +						if (colon) return ':'; +						if (!opterr) return '?';  						__getopt_msg(argv[0],  							": option requires an argument: ",  							longopts[i].name, @@ -110,7 +109,7 @@ static int __getopt_long_core(int argc, char *const *argv, const char *optstring  			return longopts[i].val;  		}  		if (argv[optind][1] == '-') { -			if (optstring[0] != ':' && opterr) +			if (!colon && opterr)  				__getopt_msg(argv[0], cnt ?  					": option is ambiguous: " :  					": unrecognized option: ", | 
