From b1d6e5e8aded3ec7682e27f9b8fe83539da96c12 Mon Sep 17 00:00:00 2001
From: Benoit Fouet <benoit.fouet@free.fr>
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 e8de2f36ab0..c2e7d064b1b 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) {
-- 
GitLab