From a1be0e1aecdd88bbc56b940e00d3bf51b96c0e4c Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 8 Feb 2013 23:52:06 +0100 Subject: options: change --no-config option, make it apply to input.conf as well Simplify --no-config and make it a normal flag option, and doesn't take an argument anymore. You can get the same behavior by using --no-config and then --include to explicitly load a certain config file. Make --no-config work for input.conf as well. Make it so that --input:conf=file still works in this case. As a technically unrelated change, the file argument now works as one would expect, instead of making it relatively to "~/.mpv/". This makes for simpler code and easier to understand option semantics. We can also print better error messages. --- core/cfg-mplayer.h | 3 +-- core/defaultopts.c | 1 + core/input/input.c | 43 ++++++++++++++++++------------------------- core/input/input.h | 3 ++- core/mplayer.c | 10 +++++----- core/options.h | 2 +- core/parser-mpcmd.c | 2 +- 7 files changed, 29 insertions(+), 35 deletions(-) (limited to 'core') diff --git a/core/cfg-mplayer.h b/core/cfg-mplayer.h index 92f7d87906..78d85aa9ed 100644 --- a/core/cfg-mplayer.h +++ b/core/cfg-mplayer.h @@ -297,8 +297,7 @@ const m_option_t common_opts[] = { #ifdef CONFIG_PRIORITY {"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL}, #endif - OPT_CHOICE("no-config", noconfig, CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE, - ({"no", 0}, {"user", 1}, {"system", 2}, {"all", 3})), + OPT_FLAG("config", load_config, CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE), // ------------------------- stream options -------------------- diff --git a/core/defaultopts.c b/core/defaultopts.c index d0205cb3d3..36407cc71d 100644 --- a/core/defaultopts.c +++ b/core/defaultopts.c @@ -31,6 +31,7 @@ void set_default_mplayer_options(struct MPOpts *opts) .loop_times = -1, .ordered_chapters = 1, .chapter_merge_threshold = 100, + .load_config = 1, .stream_cache_min_percent = 20.0, .stream_cache_seek_min_percent = 50.0, .stream_cache_pause = 10.0, diff --git a/core/input/input.c b/core/input/input.c index 0e2955116b..171909b015 100644 --- a/core/input/input.c +++ b/core/input/input.c @@ -520,7 +520,7 @@ static int print_cmd_list(m_option_t *cfg, char *optname, char *optparam); // Our command line options static const m_option_t input_conf[] = { - OPT_STRING("conf", input.config_file, CONF_GLOBAL, OPTDEF_STR("input.conf")), + OPT_STRING("conf", input.config_file, CONF_GLOBAL), OPT_INT("ar-delay", input.ar_delay, CONF_GLOBAL), OPT_INT("ar-rate", input.ar_rate, CONF_GLOBAL), { "keylist", print_key_list, CONF_TYPE_PRINT_FUNC, CONF_GLOBAL | CONF_NOCFG }, @@ -1721,15 +1721,16 @@ static int parse_config(struct input_ctx *ictx, bool builtin, bstr data, return n_binds; } -static int parse_config_file(struct input_ctx *ictx, char *file) +static int parse_config_file(struct input_ctx *ictx, char *file, bool warn) { if (!mp_path_exists(file)) { - mp_msg(MSGT_INPUT, MSGL_V, "Input config file %s missing.\n", file); + mp_msg(MSGT_INPUT, warn ? MSGL_ERR : MSGL_V, + "Input config file %s not found.\n", file); return 0; } stream_t *s = open_stream(file, NULL, NULL); if (!s) { - mp_msg(MSGT_INPUT, MSGL_V, "Can't open input config file %s.\n", file); + mp_msg(MSGT_INPUT, MSGL_ERR, "Can't open input config file %s.\n", file); return 0; } bstr res = stream_read_complete(s, NULL, 1000000, 0); @@ -1754,7 +1755,8 @@ char *mp_input_get_section(struct input_ctx *ictx) return ictx->section; } -struct input_ctx *mp_input_init(struct input_conf *input_conf) +struct input_ctx *mp_input_init(struct input_conf *input_conf, + bool load_default_conf) { struct input_ctx *ictx = talloc_ptrtype(NULL, ictx); *ictx = (struct input_ctx){ @@ -1786,27 +1788,18 @@ struct input_ctx *mp_input_init(struct input_conf *input_conf) NULL, NULL); #endif - char *file; - char *config_file = input_conf->config_file; - file = config_file[0] != '/' ? - mp_find_user_config_file(config_file) : config_file; - if (!file) - return ictx; - - if (!parse_config_file(ictx, file)) { - // free file if it was allocated by get_path(), - // before it gets overwritten - if (file != config_file) - talloc_free(file); + bool config_ok = false; + if (input_conf->config_file) + config_ok = parse_config_file(ictx, input_conf->config_file, true); + if (!config_ok && load_default_conf) { // Try global conf dir - file = MPLAYER_CONFDIR "/input.conf"; - if (!parse_config_file(ictx, file)) - mp_msg(MSGT_INPUT, MSGL_V, "Falling back on default (hardcoded) " - "input config\n"); - } else { - // free file if it was allocated by get_path() - if (file != config_file) - talloc_free(file); + char *file = mp_find_config_file("input.conf"); + config_ok = file && parse_config_file(ictx, file, false); + talloc_free(file); + } + if (!config_ok) { + mp_msg(MSGT_INPUT, MSGL_V, "Falling back on default (hardcoded) " + "input config\n"); } #ifdef CONFIG_JOYSTICK diff --git a/core/input/input.h b/core/input/input.h index 974ca3d6c4..14d100e152 100644 --- a/core/input/input.h +++ b/core/input/input.h @@ -203,7 +203,8 @@ char *mp_input_get_section(struct input_ctx *ictx); // Initialize the input system struct input_conf; -struct input_ctx *mp_input_init(struct input_conf *input_conf); +struct input_ctx *mp_input_init(struct input_conf *input_conf, + bool load_default_conf); void mp_input_uninit(struct input_ctx *ictx); diff --git a/core/mplayer.c b/core/mplayer.c index 65bd1f2f8e..5dc719d97f 100644 --- a/core/mplayer.c +++ b/core/mplayer.c @@ -689,8 +689,9 @@ static bool parse_cfgfiles(struct MPContext *mpctx, m_config_t *conf) struct MPOpts *opts = &mpctx->opts; char *conffile; int conffile_fd; - if (!(opts->noconfig & 2) && - m_config_parse_config_file(conf, MPLAYER_CONFDIR "/mpv.conf") < 0) + if (!opts->load_config) + return true; + if (!m_config_parse_config_file(conf, MPLAYER_CONFDIR "/mpv.conf") < 0) return false; if ((conffile = mp_find_user_config_file("")) == NULL) mp_tmsg(MSGT_CPLAYER, MSGL_WARN, "Cannot find HOME directory.\n"); @@ -708,8 +709,7 @@ static bool parse_cfgfiles(struct MPContext *mpctx, m_config_t *conf) write(conffile_fd, DEF_CONFIG, sizeof(DEF_CONFIG) - 1); close(conffile_fd); } - if (!(opts->noconfig & 1) && - m_config_parse_config_file(conf, conffile) < 0) + if (m_config_parse_config_file(conf, conffile) < 0) return false; talloc_free(conffile); } @@ -3657,7 +3657,7 @@ static void check_previous_track_selection(struct MPContext *mpctx) static void init_input(struct MPContext *mpctx) { - mpctx->input = mp_input_init(&mpctx->opts.input); + mpctx->input = mp_input_init(&mpctx->opts.input, mpctx->opts.load_config); mpctx->key_fifo = mp_fifo_create(mpctx->input, &mpctx->opts); if (slave_mode) mp_input_add_cmd_fd(mpctx->input, 0, USE_FD0_CMD_SELECT, MP_INPUT_SLAVE_CMD_FUNC, NULL); diff --git a/core/options.h b/core/options.h index 10eb7135fd..b261731f16 100644 --- a/core/options.h +++ b/core/options.h @@ -54,7 +54,7 @@ typedef struct MPOpts { int ordered_chapters; int chapter_merge_threshold; int quiet; - int noconfig; + int load_config; char *codecs_file; int stream_cache_size; float stream_cache_min_percent; diff --git a/core/parser-mpcmd.c b/core/parser-mpcmd.c index 9914e7a614..1a7a4dcbc9 100644 --- a/core/parser-mpcmd.c +++ b/core/parser-mpcmd.c @@ -289,7 +289,7 @@ err_out: extern int mp_msg_levels[]; /* Parse some command line options early before main parsing. - * --noconfig prevents reading configuration files (otherwise done before + * --no-config prevents reading configuration files (otherwise done before * command line parsing), and --really-quiet suppresses messages printed * during normal options parsing. */ -- cgit v1.2.3