mirror of https://github.com/mpv-player/mpv
options: commandline: print error type for parse failures
If parsing an option fails, print a string corresponding to the parse function return value (M_OPT_MISSING_PARAM etc). The primary motivation is that the parsing code already outputs messages explaining most problems, but does not itself print anything in the missing parameter case. Before double-dash --options such errors were rare (or rather they resulted in the next commandline argument being silently misinterpreted as an argument to the previous option instead); but now an argument like "--ss" should give a better indication about the problem than just "Error parsing option".
This commit is contained in:
parent
5d5ca22a6d
commit
ad48f8038c
18
m_option.c
18
m_option.c
|
@ -36,6 +36,24 @@
|
|||
#include "stream/url.h"
|
||||
#include "libavutil/avstring.h"
|
||||
|
||||
char *m_option_strerror(int code)
|
||||
{
|
||||
switch (code) {
|
||||
case M_OPT_UNKNOWN:
|
||||
return mp_gtext("Unrecognized option name");
|
||||
case M_OPT_MISSING_PARAM:
|
||||
return mp_gtext("Required parameter for option missing");
|
||||
case M_OPT_INVALID:
|
||||
return mp_gtext("Option parameter could not be parsed");
|
||||
case M_OPT_OUT_OF_RANGE:
|
||||
return mp_gtext("Parameter is outside values allowed for option");
|
||||
case M_OPT_PARSER_ERR:
|
||||
return mp_gtext("Parser error");
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static const struct m_option *m_option_list_findb(const struct m_option *list,
|
||||
struct bstr name)
|
||||
{
|
||||
|
|
|
@ -423,6 +423,8 @@ struct m_option {
|
|||
#define ERR_OUT_OF_RANGE M_OPT_OUT_OF_RANGE
|
||||
#define ERR_FUNC_ERR M_OPT_PARSER_ERR
|
||||
|
||||
char *m_option_strerror(int code);
|
||||
|
||||
// Find the option matching the given name in the list.
|
||||
/** \ingroup Options
|
||||
* This function takes the possible wildcards into account (see
|
||||
|
|
|
@ -192,8 +192,15 @@ play_tree_t *m_config_parse_mp_command_line(m_config_t *config, int argc,
|
|||
if (r <= M_OPT_EXIT) {
|
||||
opt_exit = true;
|
||||
r = M_OPT_EXIT - r;
|
||||
} else if (r < 0)
|
||||
goto print_err;
|
||||
} else if (r < 0) {
|
||||
char *msg = m_option_strerror(r);
|
||||
if (!msg)
|
||||
goto print_err;
|
||||
mp_tmsg(MSGT_CFGPARSER, MSGL_FATAL,
|
||||
"Error parsing commandline option \"%.*s\": %s\n",
|
||||
BSTR_P(orig_opt), msg);
|
||||
goto err_out;
|
||||
}
|
||||
if (old_syntax)
|
||||
i += r;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue