From: Marc-André Lureau <marcandre.lur...@redhat.com> This allows for a more pleasant user experience.
Before: $ ./qemu-system-x86_64 -display egl-headless,gl= qemu-system-x86_64: -display egl-headless,gl=: Parameter 'gl' does not accept value '' After: $ ./qemu-system-x86_64 -display egl-headless,gl= qemu-system-x86_64: -display egl-headless,gl=: Parameter 'gl' does not accept value '' Acceptable values are 'off', 'on', 'core', 'es' Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- qapi/qapi-visit-core.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c index 6c13510a2b..7468b8c7b8 100644 --- a/qapi/qapi-visit-core.c +++ b/qapi/qapi-visit-core.c @@ -392,9 +392,25 @@ static bool output_type_enum(Visitor *v, const char *name, int *obj, return visit_type_str(v, name, &enum_str, errp); } +static void error_append_qapi_enum_hint(Error *const *errp, const QEnumLookup *lookup) +{ + int i; + + error_append_hint(errp, "Acceptable values are "); + for (i = 0; i < lookup->size; i++) { + error_append_hint(errp, "'%s'", lookup->array[i]); + if (i + 1 < lookup->size) { + error_append_hint(errp, ", "); + } + } + error_append_hint(errp, "\n"); +} + + static bool input_type_enum(Visitor *v, const char *name, int *obj, const QEnumLookup *lookup, Error **errp) { + ERRP_GUARD(); int64_t value; g_autofree char *enum_str = NULL; @@ -406,6 +422,7 @@ static bool input_type_enum(Visitor *v, const char *name, int *obj, if (value < 0) { error_setg(errp, "Parameter '%s' does not accept value '%s'", name ? name : "null", enum_str); + error_append_qapi_enum_hint(errp, lookup); return false; } -- 2.39.2