[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 24/30] qapi: Simplify how qmp_dispatch() gets the request ID
From: |
Markus Armbruster |
Subject: |
[PULL 24/30] qapi: Simplify how qmp_dispatch() gets the request ID |
Date: |
Tue, 17 Mar 2020 22:01:09 +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>
Message-Id: <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
- [PULL 01/30] docs/devel/qapi-code-gen: Fix typo in grammar, (continued)
- [PULL 01/30] docs/devel/qapi-code-gen: Fix typo in grammar, Markus Armbruster, 2020/03/17
- [PULL 20/30] qapi/schema: Call QAPIDoc.connect_member() in just one place, Markus Armbruster, 2020/03/17
- [PULL 07/30] tests/test-qmp-cmds: Check responses more thoroughly, Markus Armbruster, 2020/03/17
- [PULL 10/30] tests/test-qmp-event: Use qobject_is_equal(), Markus Armbruster, 2020/03/17
- [PULL 04/30] docs/devel/qapi-code-gen: Clarify allow-oob introspection, Markus Armbruster, 2020/03/17
- [PULL 06/30] tests/test-qmp-cmds: Factor out qmp_dispatch() test helpers, Markus Armbruster, 2020/03/17
- [PULL 05/30] docs/devel/qapi-code-gen: Document 'features' introspection, Markus Armbruster, 2020/03/17
- [PULL 23/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP, Markus Armbruster, 2020/03/17
- [PULL 30/30] net: Track netdevs in NetClientState rather than QemuOpt, Markus Armbruster, 2020/03/17
- [PULL 08/30] tests/test-qmp-cmds: Simplify test data setup, Markus Armbruster, 2020/03/17
- [PULL 24/30] qapi: Simplify how qmp_dispatch() gets the request ID,
Markus Armbruster <=
- [PULL 12/30] qapi/schema: Clean up around QAPISchemaEntity.connect_doc(), Markus Armbruster, 2020/03/17
- [PULL 09/30] tests/test-qmp-event: Simplify test data setup, Markus Armbruster, 2020/03/17
- [PULL 28/30] qmp: constify QmpCommand and list, Markus Armbruster, 2020/03/17
- [PULL 14/30] qapi: Consistently put @features parameter right after @ifcond, Markus Armbruster, 2020/03/17
- [PULL 19/30] qapi/schema: Rename QAPISchemaObjectType{Variant, Variants}, Markus Armbruster, 2020/03/17
- [PULL 26/30] qapi: New special feature flag "deprecated", Markus Armbruster, 2020/03/17
- [PULL 27/30] qapi: Mark deprecated QMP parts with feature 'deprecated', Markus Armbruster, 2020/03/17
- [PULL 17/30] qapi/schema: Change _make_features() to a take feature list, Markus Armbruster, 2020/03/17
- [PULL 22/30] qapi: Inline do_qmp_dispatch() into qmp_dispatch(), Markus Armbruster, 2020/03/17
- [PULL 18/30] qapi/schema: Reorder classes so related ones are together, Markus Armbruster, 2020/03/17