diff options
author | wm4 <wm4@nowhere> | 2012-09-20 03:32:01 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-02-09 00:21:16 +0100 |
commit | 830560979c02b4e06924a813cf9bacb1629d40c9 (patch) | |
tree | c90295bcc2bc77bee2d2a8c13d661d5b20772117 /core/m_option.c | |
parent | ae070a6f1eff9f38dcd3ec785dd1f251e3761472 (diff) | |
download | mpv-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.c | 25 |
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 |