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
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).
+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?
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>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization:
qemu.org |
libvirt.org