summaryrefslogtreecommitdiffstats
path: root/core/m_option.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-09-20 03:32:01 +0200
committerwm4 <wm4@nowhere>2013-02-09 00:21:16 +0100
commit830560979c02b4e06924a813cf9bacb1629d40c9 (patch)
treec90295bcc2bc77bee2d2a8c13d661d5b20772117 /core/m_option.c
parentae070a6f1eff9f38dcd3ec785dd1f251e3761472 (diff)
downloadmpv-830560979c02b4e06924a813cf9bacb1629d40c9.tar.bz2
mpv-830560979c02b4e06924a813cf9bacb1629d40c9.tar.xz
options: change handling of "no-" options
Normally, all flag options can be negated by prepending a "no-", for example "--no-opt" becomes "--opt=no". Some flag options can't actually be negated, so add a CONF_TYPE_STORE option type to disallow the "no-" fallback. Do the same for choice options. Remove the explicit "no-" prefixed options, add "no" as choice. Move the handling of automatic "no-" options from parser-mpcmd.c to m_config.c, and use it in m_config_set_option/m_config_parse_option. This makes these options available in the config file. It also simplifies sub-option parsing, because it doesn't need to handle "no-" anymore.
Diffstat (limited to 'core/m_option.c')
-rw-r--r--core/m_option.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/core/m_option.c b/core/m_option.c
index c1d2ee4fbe..078f9f327b 100644
--- a/core/m_option.c
+++ b/core/m_option.c
@@ -152,6 +152,31 @@ const m_option_type_t m_option_type_flag = {
.clamp = clamp_flag,
};
+// Single-value, write-only flag
+
+static int parse_store(const m_option_t *opt, struct bstr name,
+ struct bstr param, void *dst)
+{
+ if (param.len == 0 || bstrcasecmp0(param, "yes") == 0) {
+ if (dst)
+ VAL(dst) = opt->max;
+ return 0;
+ } else {
+ mp_msg(MSGT_CFGPARSER, MSGL_ERR,
+ "Invalid parameter for %.*s flag: %.*s\n",
+ BSTR_P(name), BSTR_P(param));
+ return M_OPT_INVALID;
+ }
+}
+
+const m_option_type_t m_option_type_store = {
+ // can only be activated
+ .name = "Flag",
+ .size = sizeof(int),
+ .flags = M_OPT_TYPE_OLD_SYNTAX_NO_PARAM,
+ .parse = parse_store,
+};
+
// Integer
#undef VAL