Eric Blake <eblake@xxxxxxxxxx> writes: > On Sat, Oct 09, 2021 at 02:09:43PM +0200, Markus Armbruster wrote: >> This copies the code implementing the policy from qapi/qmp-dispatch.c >> to qapi/qobject-input-visitor.c. Tolerable, but if we acquire more >> copes, we should look into factoring them out. > > copies Fixing, thanks! >> >> Signed-off-by: Markus Armbruster <armbru@xxxxxxxxxx> >> --- >> docs/devel/qapi-code-gen.rst | 6 ++++-- >> qapi/compat.json | 3 ++- >> include/qapi/util.h | 6 +++++- >> qapi/qapi-visit-core.c | 18 +++++++++++++++--- >> scripts/qapi/types.py | 17 ++++++++++++++++- >> 5 files changed, 42 insertions(+), 8 deletions(-) >> >> diff --git a/docs/devel/qapi-code-gen.rst b/docs/devel/qapi-code-gen.rst >> index 00334e9fb8..006a6f4a9a 100644 >> --- a/docs/devel/qapi-code-gen.rst >> +++ b/docs/devel/qapi-code-gen.rst >> @@ -708,8 +708,10 @@ QEMU shows a certain behaviour. >> Special features >> ~~~~~~~~~~~~~~~~ >> >> -Feature "deprecated" marks a command, event, or struct member as >> -deprecated. It is not supported elsewhere so far. >> +Feature "deprecated" marks a command, event, struct or enum member as > > Do we want the comma before the conjunction? (I've seen style guides > that recommend it, and style guides that discourage it; while I tend > to write by the former style, I usually don't care about the latter. > Rather, switching styles mid-patch caught my attention). With a comma there, we claim structs can be marked, which is actually wrong. Correct is "command, event, struct member, or enum member". I'll rephrase to "marks a command, event, enum value, or struct member deprecated." >> +deprecated. It is not supported elsewhere so far. Interfaces so >> +marked may be withdrawn in future releases in accordance with QEMU's >> +deprecation policy. >> >> >> +++ b/qapi/qapi-visit-core.c >> @@ -393,7 +393,7 @@ static bool input_type_enum(Visitor *v, const char *name, int *obj, >> const QEnumLookup *lookup, Error **errp) >> { >> int64_t value; >> - char *enum_str; >> + g_autofree char *enum_str = NULL; > > Nice change while touching the code. Is it worth mentioning in the > commit message? I figure it would be more distracting than useful. >> >> if (!visit_type_str(v, name, &enum_str, errp)) { >> return false; >> @@ -402,11 +402,23 @@ static bool input_type_enum(Visitor *v, const char *name, int *obj, >> value = qapi_enum_parse(lookup, enum_str, -1, NULL); >> if (value < 0) { >> error_setg(errp, QERR_INVALID_PARAMETER, enum_str); >> - g_free(enum_str); >> return false; >> } >> >> - g_free(enum_str); >> + if (lookup->flags && (lookup->flags[value] & QAPI_ENUM_DEPRECATED)) { >> + switch (v->compat_policy.deprecated_input) { >> + case COMPAT_POLICY_INPUT_ACCEPT: >> + break; >> + case COMPAT_POLICY_INPUT_REJECT: >> + error_setg(errp, "Deprecated value '%s' disabled by policy", >> + enum_str); >> + return false; >> + case COMPAT_POLICY_INPUT_CRASH: >> + default: >> + abort(); >> + } >> + } >> + >> *obj = value; >> return true; >> } > > Grammar fixes are minor, so: > > Reviewed-by: Eric Blake <eblake@xxxxxxxxxx> Thanks!