summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-02-24 23:02:20 +0100
committerwm4 <wm4@nowhere>2014-02-24 23:02:20 +0100
commit761975d47b4e8536df837f999642430d19087b79 (patch)
tree6f791d85220d027612167440cc6750a2fb42553a
parent0adb8a9aaf1e1c76300d717a0a3dd04849e70d1d (diff)
downloadmpv-761975d47b4e8536df837f999642430d19087b79.tar.bz2
mpv-761975d47b4e8536df837f999642430d19087b79.tar.xz
command: fix loadfile command
This was broken by commit bb6b543812a724. Note that the original pull request was fine, but it was broken by my own stupidity when I was "improving" it. The problem is that the new loadfile argument was not considered optional anymore after my changes. The original pull request did handle this by setting .defval to a dummy value, but I removed that part. Fix it again by introducing a flag that designates that the parameter is optional. (I didn't want to add it to m_option.h, because technically, all options are optional, and it's not possible to have non-optional options.)
-rw-r--r--input/cmd_list.c2
-rw-r--r--input/cmd_list.h2
-rw-r--r--input/cmd_parse.c5
3 files changed, 6 insertions, 3 deletions
diff --git a/input/cmd_list.c b/input/cmd_list.c
index 982d4f366c..4fd5331631 100644
--- a/input/cmd_list.c
+++ b/input/cmd_list.c
@@ -122,7 +122,7 @@ const struct mp_cmd_def mp_cmds[] = {
ARG_STRING,
OARG_CHOICE(0, ({"replace", 0}, {"0", 0},
{"append", 1}, {"1", 1})),
- OPT_KEYVALUELIST(ARG(str_list), 0),
+ OPT_KEYVALUELIST(ARG(str_list), MP_CMD_OPT_ARG),
}},
{ MP_CMD_LOADLIST, "loadlist", {
ARG_STRING,
diff --git a/input/cmd_list.h b/input/cmd_list.h
index e74a21921e..9a3c25018f 100644
--- a/input/cmd_list.h
+++ b/input/cmd_list.h
@@ -24,6 +24,8 @@
#define MP_CMD_MAX_ARGS 10
+#define MP_CMD_OPT_ARG 0x1000
+
struct mp_cmd_def {
int id; // one of MP_CMD_...
const char *name; // user-visible name (as used in input.conf)
diff --git a/input/cmd_parse.c b/input/cmd_parse.c
index e2296ce215..64b23ac05f 100644
--- a/input/cmd_parse.c
+++ b/input/cmd_parse.c
@@ -199,10 +199,11 @@ static struct mp_cmd *parse_cmd(struct parse_ctx *ctx, int def_flags)
if (is_vararg)
continue;
// Skip optional arguments
- if (opt->defval) {
+ if (opt->defval || (opt->flags & MP_CMD_OPT_ARG)) {
struct mp_cmd_arg *cmdarg = &cmd->args[cmd->nargs];
cmdarg->type = opt;
- m_option_copy(opt, &cmdarg->v, opt->defval);
+ if (opt->defval)
+ m_option_copy(opt, &cmdarg->v, opt->defval);
cmd->nargs++;
continue;
}