Do not rely on return value of 0 to indicate error, pass along an Error pointer to be set.
Signed-off-by: Richard Henderson <richard.hender...@linaro.org> --- include/qemu/log.h | 2 +- bsd-user/main.c | 6 ++++-- linux-user/main.c | 7 +++++-- monitor/hmp-cmds.c | 5 +++-- softmmu/vl.c | 7 +++++-- util/log.c | 5 +++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/include/qemu/log.h b/include/qemu/log.h index df59bfabcd..9b92d2663e 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -87,7 +87,7 @@ bool qemu_set_log_filename(const char *filename, Error **errp); bool qemu_set_log_filename_flags(const char *name, int flags, Error **errp); void qemu_set_dfilter_ranges(const char *ranges, Error **errp); bool qemu_log_in_addr_range(uint64_t addr); -int qemu_str_to_log_mask(const char *str); +int qemu_str_to_log_mask(const char *str, Error **errp); /* Print a usage message listing all the valid logging categories * to the specified FILE*. diff --git a/bsd-user/main.c b/bsd-user/main.c index 703f3e2c41..a981239a0b 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -411,8 +411,10 @@ int main(int argc, char **argv) { int mask = 0; if (log_mask) { - mask = qemu_str_to_log_mask(log_mask); - if (!mask) { + Error *err = NULL; + mask = qemu_str_to_log_mask(log_mask, &err); + if (err) { + error_report_err(err); qemu_print_log_usage(stdout); exit(1); } diff --git a/linux-user/main.c b/linux-user/main.c index 0c23584a96..d0464736cc 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -264,8 +264,11 @@ static void handle_arg_help(const char *arg) static void handle_arg_log(const char *arg) { - last_log_mask = qemu_str_to_log_mask(arg); - if (!last_log_mask) { + Error *err = NULL; + + last_log_mask = qemu_str_to_log_mask(arg, &err); + if (err) { + error_report_err(err); qemu_print_log_usage(stdout); exit(EXIT_FAILURE); } diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 6c559b48c8..c4bd97d467 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -291,8 +291,9 @@ void hmp_log(Monitor *mon, const QDict *qdict) if (!strcmp(items, "none")) { mask = 0; } else { - mask = qemu_str_to_log_mask(items); - if (!mask) { + mask = qemu_str_to_log_mask(items, &err); + if (err) { + error_free(err); hmp_help_cmd(mon, "log"); return; } diff --git a/softmmu/vl.c b/softmmu/vl.c index 98e071e63b..02193696b9 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2486,8 +2486,11 @@ static void qemu_process_early_options(void) { int mask = 0; if (log_mask) { - mask = qemu_str_to_log_mask(log_mask); - if (!mask) { + Error *err = NULL; + + mask = qemu_str_to_log_mask(log_mask, &err); + if (err) { + error_report_err(err); qemu_print_log_usage(stdout); exit(1); } diff --git a/util/log.c b/util/log.c index def88a9402..b5f08db202 100644 --- a/util/log.c +++ b/util/log.c @@ -500,8 +500,8 @@ const QEMULogItem qemu_log_items[] = { { 0, NULL, NULL }, }; -/* takes a comma separated list of log masks. Return 0 if error. */ -int qemu_str_to_log_mask(const char *str) +/* Takes a comma separated list of log masks. */ +int qemu_str_to_log_mask(const char *str, Error **errp) { const QEMULogItem *item; int mask = 0; @@ -524,6 +524,7 @@ int qemu_str_to_log_mask(const char *str) goto found; } } + error_setg(errp, "Invalid -d option \"%s\"", *tmp); goto error; found: mask |= item->mask; -- 2.34.1