From b1d6e5e8aded3ec7682e27f9b8fe83539da96c12 Mon Sep 17 00:00:00 2001 From: Benoit Fouet Date: Mon, 3 Aug 2009 09:24:39 +0000 Subject: [PATCH] Handle noX for OPT_BOOL X. Originally committed as revision 19572 to svn://svn.ffmpeg.org/ffmpeg/trunk --- cmdutils.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cmdutils.c b/cmdutils.c index e8de2f36ab..c2e7d064b1 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -125,11 +125,19 @@ void parse_options(int argc, char **argv, const OptionDef *options, opt = argv[optindex++]; if (handleoptions && opt[0] == '-' && opt[1] != '\0') { + int bool_val = 1; if (opt[1] == '-' && opt[2] == '\0') { handleoptions = 0; continue; } po= find_option(options, opt + 1); + if (!po->name && opt[1] == 'n' && opt[2] == 'o') { + /* handle 'no' bool option */ + po = find_option(options, opt + 3); + if (!(po->name && (po->flags & OPT_BOOL))) + goto unknown_opt; + bool_val = 0; + } if (!po->name) po= find_option(options, "default"); if (!po->name) { @@ -150,7 +158,7 @@ unknown_opt: str = av_strdup(arg); *po->u.str_arg = str; } else if (po->flags & OPT_BOOL) { - *po->u.int_arg = 1; + *po->u.int_arg = bool_val; } else if (po->flags & OPT_INT) { *po->u.int_arg = parse_number_or_die(opt+1, arg, OPT_INT64, INT_MIN, INT_MAX); } else if (po->flags & OPT_INT64) {