Eric Blake <eblake(a)redhat.com> 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(a)redhat.com>
> ---
> 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(a)redhat.com>
Thanks!