[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 23/30] qapi: Simplify how qmp_dispatch() gets the request ID
From: |
Markus Armbruster |
Subject: |
[PATCH v2 23/30] qapi: Simplify how qmp_dispatch() gets the request ID |
Date: |
Tue, 3 Mar 2020 17:34:58 +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 getting the request ID into qmp_dispatch_check_obj().
Signed-off-by: Markus Armbruster <address@hidden>
---
qapi/qmp-dispatch.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 550d1fe8d2..112d29a9ab 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -20,7 +20,7 @@
#include "qapi/qmp/qbool.h"
static QDict *qmp_dispatch_check_obj(const QObject *request, bool allow_oob,
- Error **errp)
+ QObject **id, Error **errp)
{
const char *exec_key = NULL;
const QDictEntry *ent;
@@ -30,10 +30,13 @@ static QDict *qmp_dispatch_check_obj(const QObject
*request, bool allow_oob,
dict = qobject_to(QDict, request);
if (!dict) {
+ *id = NULL;
error_setg(errp, "QMP input must be a JSON object");
return NULL;
}
+ *id = qdict_get(dict, "id");
+
for (ent = qdict_first(dict); ent;
ent = qdict_next(dict, ent)) {
arg_name = qdict_entry_key(ent);
@@ -103,12 +106,12 @@ 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 = qmp_dispatch_check_obj(request, allow_oob, &id, &err);
if (!dict) {
goto out;
}
--
2.21.1
- [PATCH v2 22/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP, (continued)
- [PATCH v2 22/30] qapi: Simplify how qmp_dispatch() deals with QCO_NO_SUCCESS_RESP, Markus Armbruster, 2020/03/03
- [PATCH v2 12/30] qapi: Add feature flags to remaining definitions, Markus Armbruster, 2020/03/03
- [PATCH v2 15/30] qapi/introspect: Factor out _make_tree(), Markus Armbruster, 2020/03/03
- [PATCH v2 30/30] qapi: New -compat deprecated-input=crash, Markus Armbruster, 2020/03/03
- [PATCH v2 17/30] qapi/schema: Reorder classes so related ones are together, Markus Armbruster, 2020/03/03
- [PATCH v2 21/30] qapi: Inline do_qmp_dispatch() into qmp_dispatch(), Markus Armbruster, 2020/03/03
- [PATCH v2 29/30] qapi: Implement -compat deprecated-input=reject, Markus Armbruster, 2020/03/03
- [PATCH v2 28/30] qapi: Implement -compat deprecated-output=hide, Markus Armbruster, 2020/03/03
- [PATCH v2 26/30] qapi: Mark deprecated QMP parts with feature 'deprecated', Markus Armbruster, 2020/03/03
- [PATCH v2 06/30] tests/test-qmp-cmds: Check responses more thoroughly, Markus Armbruster, 2020/03/03
- [PATCH v2 23/30] qapi: Simplify how qmp_dispatch() gets the request ID,
Markus Armbruster <=
- [PATCH v2 20/30] qapi: Add feature flags to struct members, Markus Armbruster, 2020/03/03
- [PATCH v2 14/30] qapi/introspect: Rename *qlit* to reduce confusion, Markus Armbruster, 2020/03/03
- Re: [PATCH v2 00/30] Configurable policy for handling deprecated interfaces, Peter Maydell, 2020/03/03
- Re: [PATCH v2 00/30] Configurable policy for handling deprecated interfaces, Peter Krempa, 2020/03/04
- Re: [PATCH v2 00/30] Configurable policy for handling deprecated interfaces, Markus Armbruster, 2020/03/04