mirror of https://github.com/mpv-player/mpv
m_option: remove redundant indirections
Remove the various redundant m_config_set_option* calls, rename the remaining one to m_config_set_option_cli(), and merge the m_config_parse_option() function.
This commit is contained in:
parent
66478cff14
commit
3d31807198
|
@ -243,7 +243,7 @@ static int m_config_set_obj_params(struct m_config *config, struct mp_log *log,
|
||||||
for (int n = 0; args && args[n * 2 + 0]; n++) {
|
for (int n = 0; args && args[n * 2 + 0]; n++) {
|
||||||
bstr opt = bstr0(args[n * 2 + 0]);
|
bstr opt = bstr0(args[n * 2 + 0]);
|
||||||
bstr val = bstr0(args[n * 2 + 1]);
|
bstr val = bstr0(args[n * 2 + 1]);
|
||||||
if (m_config_set_option(config, opt, val) < 0)
|
if (m_config_set_option_cli(config, opt, val, 0) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -755,7 +755,7 @@ int m_config_set_option_raw_direct(struct m_config *config,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Similar to m_config_set_option_ext(), but set as data in its native format.
|
// Similar to m_config_set_option_cli(), but set as data in its native format.
|
||||||
// This takes care of some details like sending change notifications.
|
// This takes care of some details like sending change notifications.
|
||||||
// The type data points to is as in: co->opt
|
// The type data points to is as in: co->opt
|
||||||
int m_config_set_option_raw(struct m_config *config, struct m_config_option *co,
|
int m_config_set_option_raw(struct m_config *config, struct m_config_option *co,
|
||||||
|
@ -833,21 +833,30 @@ static struct m_config_option *m_config_mogrify_cli_opt(struct m_config *config,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int m_config_parse_option(struct m_config *config, struct bstr name,
|
// Set the named option to the given string. This is for command line and config
|
||||||
struct bstr param, int flags)
|
// file use only.
|
||||||
|
// flags: combination of M_SETOPT_* flags (0 for normal operation)
|
||||||
|
// Returns >= 0 on success, otherwise see OptionParserReturn.
|
||||||
|
int m_config_set_option_cli(struct m_config *config, struct bstr name,
|
||||||
|
struct bstr param, int flags)
|
||||||
{
|
{
|
||||||
|
int r;
|
||||||
assert(config != NULL);
|
assert(config != NULL);
|
||||||
|
|
||||||
bool negate;
|
bool negate;
|
||||||
struct m_config_option *co =
|
struct m_config_option *co =
|
||||||
m_config_mogrify_cli_opt(config, &name, &negate, &(int){0});
|
m_config_mogrify_cli_opt(config, &name, &negate, &(int){0});
|
||||||
|
|
||||||
if (!co)
|
if (!co) {
|
||||||
return M_OPT_UNKNOWN;
|
r = M_OPT_UNKNOWN;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (negate) {
|
if (negate) {
|
||||||
if (param.len)
|
if (param.len) {
|
||||||
return M_OPT_DISALLOW_PARAM;
|
r = M_OPT_DISALLOW_PARAM;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
param = bstr0("no");
|
param = bstr0("no");
|
||||||
}
|
}
|
||||||
|
@ -855,12 +864,11 @@ static int m_config_parse_option(struct m_config *config, struct bstr name,
|
||||||
// This is the only mandatory function
|
// This is the only mandatory function
|
||||||
assert(co->opt->type->parse);
|
assert(co->opt->type->parse);
|
||||||
|
|
||||||
int r = handle_set_opt_flags(config, co, flags);
|
r = handle_set_opt_flags(config, co, flags);
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
return r;
|
goto done;
|
||||||
bool set = r == 2;
|
|
||||||
|
|
||||||
if (set) {
|
if (r == 2) {
|
||||||
MP_VERBOSE(config, "Setting option '%.*s' = '%.*s' (flags = %d)\n",
|
MP_VERBOSE(config, "Setting option '%.*s' = '%.*s' (flags = %d)\n",
|
||||||
BSTR_P(name), BSTR_P(param), flags);
|
BSTR_P(name), BSTR_P(param), flags);
|
||||||
}
|
}
|
||||||
|
@ -879,13 +887,7 @@ static int m_config_parse_option(struct m_config *config, struct bstr name,
|
||||||
|
|
||||||
m_option_free(co->opt, &val);
|
m_option_free(co->opt, &val);
|
||||||
|
|
||||||
return r;
|
done:
|
||||||
}
|
|
||||||
|
|
||||||
int m_config_set_option_ext(struct m_config *config, struct bstr name,
|
|
||||||
struct bstr param, int flags)
|
|
||||||
{
|
|
||||||
int r = m_config_parse_option(config, name, param, flags);
|
|
||||||
if (r < 0 && r != M_OPT_EXIT) {
|
if (r < 0 && r != M_OPT_EXIT) {
|
||||||
MP_ERR(config, "Error parsing option %.*s (%s)\n",
|
MP_ERR(config, "Error parsing option %.*s (%s)\n",
|
||||||
BSTR_P(name), m_option_strerror(r));
|
BSTR_P(name), m_option_strerror(r));
|
||||||
|
@ -894,12 +896,6 @@ int m_config_set_option_ext(struct m_config *config, struct bstr name,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_config_set_option(struct m_config *config, struct bstr name,
|
|
||||||
struct bstr param)
|
|
||||||
{
|
|
||||||
return m_config_set_option_ext(config, name, param, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int m_config_set_option_node(struct m_config *config, bstr name,
|
int m_config_set_option_node(struct m_config *config, bstr name,
|
||||||
struct mpv_node *data, int flags)
|
struct mpv_node *data, int flags)
|
||||||
{
|
{
|
||||||
|
@ -1076,7 +1072,7 @@ void m_profile_set_desc(struct m_profile *p, bstr desc)
|
||||||
int m_config_set_profile_option(struct m_config *config, struct m_profile *p,
|
int m_config_set_profile_option(struct m_config *config, struct m_profile *p,
|
||||||
bstr name, bstr val)
|
bstr name, bstr val)
|
||||||
{
|
{
|
||||||
int i = m_config_set_option_ext(config, name, val,
|
int i = m_config_set_option_cli(config, name, val,
|
||||||
M_SETOPT_CHECK_ONLY |
|
M_SETOPT_CHECK_ONLY |
|
||||||
M_SETOPT_FROM_CONFIG_FILE);
|
M_SETOPT_FROM_CONFIG_FILE);
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
@ -1103,7 +1099,7 @@ int m_config_set_profile(struct m_config *config, char *name, int flags)
|
||||||
}
|
}
|
||||||
config->profile_depth++;
|
config->profile_depth++;
|
||||||
for (int i = 0; i < p->num_opts; i++) {
|
for (int i = 0; i < p->num_opts; i++) {
|
||||||
m_config_set_option_ext(config,
|
m_config_set_option_cli(config,
|
||||||
bstr0(p->opts[2 * i]),
|
bstr0(p->opts[2 * i]),
|
||||||
bstr0(p->opts[2 * i + 1]),
|
bstr0(p->opts[2 * i + 1]),
|
||||||
flags | M_SETOPT_FROM_CONFIG_FILE);
|
flags | M_SETOPT_FROM_CONFIG_FILE);
|
||||||
|
|
|
@ -163,27 +163,9 @@ enum {
|
||||||
// Flags for safe option setting during runtime.
|
// Flags for safe option setting during runtime.
|
||||||
#define M_SETOPT_RUNTIME M_SETOPT_NO_FIXED
|
#define M_SETOPT_RUNTIME M_SETOPT_NO_FIXED
|
||||||
|
|
||||||
// Set the named option to the given string.
|
int m_config_set_option_cli(struct m_config *config, struct bstr name,
|
||||||
// flags: combination of M_SETOPT_* flags (0 for normal operation)
|
|
||||||
// Returns >= 0 on success, otherwise see OptionParserReturn.
|
|
||||||
int m_config_set_option_ext(struct m_config *config, struct bstr name,
|
|
||||||
struct bstr param, int flags);
|
struct bstr param, int flags);
|
||||||
|
|
||||||
/* Set an option. (Like: m_config_set_option_ext(config, name, param, 0))
|
|
||||||
* \param config The config object.
|
|
||||||
* \param name The option's name.
|
|
||||||
* \param param The value of the option, can be NULL.
|
|
||||||
* \return See \ref OptionParserReturn.
|
|
||||||
*/
|
|
||||||
int m_config_set_option(struct m_config *config, struct bstr name,
|
|
||||||
struct bstr param);
|
|
||||||
|
|
||||||
static inline int m_config_set_option0(struct m_config *config,
|
|
||||||
const char *name, const char *param)
|
|
||||||
{
|
|
||||||
return m_config_set_option(config, bstr0(name), bstr0(param));
|
|
||||||
}
|
|
||||||
|
|
||||||
int m_config_set_option_raw(struct m_config *config, struct m_config_option *co,
|
int m_config_set_option_raw(struct m_config *config, struct m_config_option *co,
|
||||||
void *data, int flags);
|
void *data, int flags);
|
||||||
|
|
||||||
|
@ -193,7 +175,6 @@ int m_config_set_option_raw_direct(struct m_config *config,
|
||||||
struct m_config_option *co,
|
struct m_config_option *co,
|
||||||
void *data, int flags);
|
void *data, int flags);
|
||||||
|
|
||||||
// Similar to m_config_set_option_ext(), but set as data using mpv_node.
|
|
||||||
struct mpv_node;
|
struct mpv_node;
|
||||||
int m_config_set_option_node(struct m_config *config, bstr name,
|
int m_config_set_option_node(struct m_config *config, bstr name,
|
||||||
struct mpv_node *data, int flags);
|
struct mpv_node *data, int flags);
|
||||||
|
|
|
@ -2621,7 +2621,7 @@ static int get_obj_param(struct mp_log *log, bstr opt_name, bstr obj_name,
|
||||||
// If it's just "name", and the associated option exists and is a flag,
|
// If it's just "name", and the associated option exists and is a flag,
|
||||||
// don't accept it as positional argument.
|
// don't accept it as positional argument.
|
||||||
if (val.start || m_config_option_requires_param(config, name) == 0 || nopos) {
|
if (val.start || m_config_option_requires_param(config, name) == 0 || nopos) {
|
||||||
r = m_config_set_option_ext(config, name, val, flags);
|
r = m_config_set_option_cli(config, name, val, flags);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r == M_OPT_UNKNOWN) {
|
if (r == M_OPT_UNKNOWN) {
|
||||||
mp_err(log, "Option %.*s: %.*s doesn't have a %.*s parameter.\n",
|
mp_err(log, "Option %.*s: %.*s doesn't have a %.*s parameter.\n",
|
||||||
|
@ -2652,7 +2652,7 @@ static int get_obj_param(struct mp_log *log, bstr opt_name, bstr obj_name,
|
||||||
BSTR_P(opt_name), BSTR_P(obj_name), *nold, *nold);
|
BSTR_P(opt_name), BSTR_P(obj_name), *nold, *nold);
|
||||||
return M_OPT_OUT_OF_RANGE;
|
return M_OPT_OUT_OF_RANGE;
|
||||||
}
|
}
|
||||||
r = m_config_set_option_ext(config, bstr0(opt), val, flags);
|
r = m_config_set_option_cli(config, bstr0(opt), val, flags);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
if (r != M_OPT_EXIT)
|
if (r != M_OPT_EXIT)
|
||||||
mp_err(log, "Option %.*s: "
|
mp_err(log, "Option %.*s: "
|
||||||
|
|
|
@ -146,7 +146,7 @@ int m_config_parse_mp_command_line(m_config_t *config, struct playlist *files,
|
||||||
int flags = M_SETOPT_FROM_CMDLINE;
|
int flags = M_SETOPT_FROM_CMDLINE;
|
||||||
if (mode == LOCAL)
|
if (mode == LOCAL)
|
||||||
flags |= M_SETOPT_BACKUP | M_SETOPT_CHECK_ONLY;
|
flags |= M_SETOPT_BACKUP | M_SETOPT_CHECK_ONLY;
|
||||||
int r = m_config_set_option_ext(config, p.arg, p.param, flags);
|
int r = m_config_set_option_cli(config, p.arg, p.param, flags);
|
||||||
if (r == M_OPT_EXIT) {
|
if (r == M_OPT_EXIT) {
|
||||||
ret = r;
|
ret = r;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
@ -291,7 +291,7 @@ void m_config_preparse_command_line(m_config_t *config, struct mpv_global *globa
|
||||||
// Ignore non-pre-parse options. They will be set later.
|
// Ignore non-pre-parse options. They will be set later.
|
||||||
// Option parsing errors will be handled later as well.
|
// Option parsing errors will be handled later as well.
|
||||||
int flags = M_SETOPT_FROM_CMDLINE | M_SETOPT_PRE_PARSE_ONLY;
|
int flags = M_SETOPT_FROM_CMDLINE | M_SETOPT_PRE_PARSE_ONLY;
|
||||||
m_config_set_option_ext(config, p.arg, p.param, flags);
|
m_config_set_option_cli(config, p.arg, p.param, flags);
|
||||||
if (bstrcmp0(p.arg, "v") == 0)
|
if (bstrcmp0(p.arg, "v") == 0)
|
||||||
opts->verbose++;
|
opts->verbose++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -800,7 +800,7 @@ static void load_per_file_options(m_config_t *conf,
|
||||||
int params_count)
|
int params_count)
|
||||||
{
|
{
|
||||||
for (int n = 0; n < params_count; n++) {
|
for (int n = 0; n < params_count; n++) {
|
||||||
m_config_set_option_ext(conf, params[n].name, params[n].value,
|
m_config_set_option_cli(conf, params[n].name, params[n].value,
|
||||||
M_SETOPT_RUNTIME | M_SETOPT_BACKUP);
|
M_SETOPT_RUNTIME | M_SETOPT_BACKUP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue