diff options
author | wm4 <wm4@nowhere> | 2012-08-04 12:07:35 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-08-04 19:59:56 +0200 |
commit | f7e9c15c7babadc23bd6deeb340925e6eb2a6776 (patch) | |
tree | f1be7f6e632c949a1695498cf2ba5af889558aa1 /parser-mpcmd.c | |
parent | 70c455a59610242fc982e257c375f43c880ff0f7 (diff) | |
download | mpv-f7e9c15c7babadc23bd6deeb340925e6eb2a6776.tar.bz2 mpv-f7e9c15c7babadc23bd6deeb340925e6eb2a6776.tar.xz |
m_config: always reject setting global options in per-file mode
Now the command line parser sets the m_config object into file local
mode, so that m_config can check for this condition. Makes trying to
set global options from a profile fail.
Note: global options can be considered read-only by m_config, so maybe
there should be an additional check for this. Reusing the file-
local check is more practical for now, though.
Diffstat (limited to 'parser-mpcmd.c')
-rw-r--r-- | parser-mpcmd.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/parser-mpcmd.c b/parser-mpcmd.c index 33d3deabbf..d84ec16432 100644 --- a/parser-mpcmd.c +++ b/parser-mpcmd.c @@ -97,6 +97,7 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files, struct playlist_param *local_params = 0; assert(config != NULL); + assert(!config->file_local_mode); assert(argv != NULL); assert(argc >= 1); @@ -122,6 +123,8 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files, goto err_out; } mode = LOCAL; + // Needed for option checking. + m_config_enter_file_local(config); assert(!local_start); local_start = files->last; continue; @@ -149,6 +152,7 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files, } local_params_count = 0; mode = GLOBAL; + m_config_leave_file_local(config); local_start = NULL; continue; } @@ -173,12 +177,6 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files, BSTR_P(opt)); goto print_err; } - if (mode == LOCAL && (mp_opt->flags & M_OPT_GLOBAL)) { - mp_tmsg(MSGT_CFGPARSER, MSGL_ERR, - "Option --%.*s is global and can't be set per-file\n", - BSTR_P(opt)); - goto print_err; - } // Handle some special arguments outside option parser. // --loop when it applies to a group of files (per-file is option) if (bstrcasecmp0(opt, "shuffle") == 0) { @@ -280,6 +278,7 @@ bool m_config_parse_mp_command_line(m_config_t *config, struct playlist *files, playlist_shuffle(files); talloc_free(local_params); + assert(!config->file_local_mode); return true; print_err: @@ -288,6 +287,8 @@ print_err: BSTR_P(orig_opt)); err_out: talloc_free(local_params); + if (config->file_local_mode) + m_config_leave_file_local(config); return false; } |