[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 23/34] qapi: Simplify how qmp_dispatch() gets the request ID
From: |
Markus Armbruster |
Subject: |
[PATCH v4 23/34] qapi: Simplify how qmp_dispatch() gets the request ID |
Date: |
Tue, 17 Mar 2020 12:54:48 +0100 |
We convert the request object to a QDict twice: first in
qmp_dispatch() to get the request ID, and then again in
qmp_dispatch_check_obj(), which converts to QDict, then checks and
returns it. We can't get the request ID from the latter, because it's
null when the qdict flunks the checks.
Move the checked conversion to QDict from qmp_dispatch_check_obj() to
qmp_dispatch(), and drop the duplicate there.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Marc-André Lureau <address@hidden>
---
qapi/qmp-dispatch.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 550d1fe8d2..91e50fa0dd 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -19,20 +19,13 @@
#include "sysemu/runstate.h"
#include "qapi/qmp/qbool.h"
-static QDict *qmp_dispatch_check_obj(const QObject *request, bool allow_oob,
+static QDict *qmp_dispatch_check_obj(QDict *dict, bool allow_oob,
Error **errp)
{
const char *exec_key = NULL;
const QDictEntry *ent;
const char *arg_name;
const QObject *arg_obj;
- QDict *dict;
-
- dict = qobject_to(QDict, request);
- if (!dict) {
- error_setg(errp, "QMP input must be a JSON object");
- return NULL;
- }
for (ent = qdict_first(dict); ent;
ent = qdict_next(dict, ent)) {
@@ -103,13 +96,21 @@ QDict *qmp_dispatch(QmpCommandList *cmds, QObject *request,
const char *command;
QDict *args;
QmpCommand *cmd;
- QDict *dict = qobject_to(QDict, request);
- QObject *id = dict ? qdict_get(dict, "id") : NULL;
+ QDict *dict;
+ QObject *id;
QObject *ret = NULL;
QDict *rsp = NULL;
- dict = qmp_dispatch_check_obj(request, allow_oob, &err);
+ dict = qobject_to(QDict, request);
if (!dict) {
+ id = NULL;
+ error_setg(&err, "QMP input must be a JSON object");
+ goto out;
+ }
+
+ id = qdict_get(dict, "id");
+
+ if (!qmp_dispatch_check_obj(dict, allow_oob, &err)) {
goto out;
}
--
2.21.1
- [PATCH v4 03/34] docs/devel/qapi-code-gen: Clarify allow-oob introspection, (continued)
- [PATCH v4 03/34] docs/devel/qapi-code-gen: Clarify allow-oob introspection, Markus Armbruster, 2020/03/17
- [PATCH v4 01/34] qemu-doc: Belatedly document QMP command arg & result deprecation, Markus Armbruster, 2020/03/17
- [PATCH v4 04/34] docs/devel/qapi-code-gen: Document 'features' introspection, Markus Armbruster, 2020/03/17
- [PATCH v4 08/34] tests/test-qmp-event: Simplify test data setup, Markus Armbruster, 2020/03/17
- [PATCH v4 05/34] tests/test-qmp-cmds: Factor out qmp_dispatch() test helpers, Markus Armbruster, 2020/03/17
- [PATCH v4 02/34] qapi: Belatedly update doc comment for @wait deprecation, Markus Armbruster, 2020/03/17
- [PATCH v4 06/34] tests/test-qmp-cmds: Check responses more thoroughly, Markus Armbruster, 2020/03/17
- [PATCH v4 07/34] tests/test-qmp-cmds: Simplify test data setup, Markus Armbruster, 2020/03/17
- [PATCH v4 16/34] qapi/schema: Change _make_features() to a take feature list, Markus Armbruster, 2020/03/17
- [PATCH v4 23/34] qapi: Simplify how qmp_dispatch() gets the request ID,
Markus Armbruster <=
- [PATCH v4 09/34] tests/test-qmp-event: Use qobject_is_equal(), Markus Armbruster, 2020/03/17
- [PATCH v4 11/34] qapi/schema: Clean up around QAPISchemaEntity.connect_doc(), Markus Armbruster, 2020/03/17
- [PATCH v4 24/34] qapi: Replace qmp_dispatch()'s TODO comment by an explanation, Markus Armbruster, 2020/03/17
- [PATCH v4 30/34] qapi: Implement deprecated-output=hide for QMP event data, Markus Armbruster, 2020/03/17
- [PATCH v4 22/34] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP, Markus Armbruster, 2020/03/17
- [PATCH v4 10/34] tests/test-qmp-event: Check event is actually emitted, Markus Armbruster, 2020/03/17
- [PATCH v4 18/34] qapi/schema: Rename QAPISchemaObjectType{Variant, Variants}, Markus Armbruster, 2020/03/17