parse-options: sanity check PARSE_OPT_NOARG flag
Some option types cannot use an argument --- boolean options that would set a bit or flag or increment a counter, for example. If configured in the flag word to accept an argument anyway, the result is an argument that is advertised in "program -h" output only to be rejected by parse-options::get_value. Luckily all current users of these option types use PARSE_OPT_NOARG and do not use PARSE_OPT_OPTARG. Add a check to ensure that that remains true. The check is run once for each invocation of parse_option_start(). Improved-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
a02dd4ff7d
commit
5c400ed2e0
@ -330,6 +330,19 @@ static void parse_options_check(const struct option *opts)
|
|||||||
opts->long_name))
|
opts->long_name))
|
||||||
err |= optbug(opts, "uses feature "
|
err |= optbug(opts, "uses feature "
|
||||||
"not supported for dashless options");
|
"not supported for dashless options");
|
||||||
|
switch (opts->type) {
|
||||||
|
case OPTION_BOOLEAN:
|
||||||
|
case OPTION_BIT:
|
||||||
|
case OPTION_NEGBIT:
|
||||||
|
case OPTION_SET_INT:
|
||||||
|
case OPTION_SET_PTR:
|
||||||
|
case OPTION_NUMBER:
|
||||||
|
if ((opts->flags & PARSE_OPT_OPTARG) ||
|
||||||
|
!(opts->flags & PARSE_OPT_NOARG))
|
||||||
|
err |= optbug(opts, "should not accept an argument");
|
||||||
|
default:
|
||||||
|
; /* ok. (usually accepts an argument) */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (err)
|
if (err)
|
||||||
exit(128);
|
exit(128);
|
||||||
|
Loading…
Reference in New Issue
Block a user