[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/36] qmp-dispatch: Avoid dynamic JSON
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH 05/36] qmp-dispatch: Avoid dynamic JSON |
Date: |
Wed, 30 Nov 2016 13:44:23 -0600 |
The qobject_from_jsonf() function implements a pseudo-printf
language for creating a QObject through the extension of dynamic
JSON; however, it is hard-coded to only parse a subset of
formats understood by -Wformat and is not a straight synonym to
bare printf(). During a recent cleanup due to problems caused
by PRId64, it was questioned whether the maintenance burden of
keeping the dynamic JSON extension can be counterbalanced by
converting code to use alternative ways of describing QObject.
For these two conversions, the open-coded QObject creation is a
bit more verbose, but performs slightly faster than going through
a parse; futhermore, there is no correpsonding QAPI C type to
make for an easier representation than open-coding.
Signed-off-by: Eric Blake <address@hidden>
---
monitor.c | 10 +++++++---
qapi/qmp-dispatch.c | 8 +++++---
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/monitor.c b/monitor.c
index 2a877ef..f86a855 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3839,11 +3839,15 @@ void monitor_resume(Monitor *mon)
static QObject *get_qmp_greeting(void)
{
QObject *ver = NULL;
+ QDict *sub, *ret;
qmp_marshal_query_version(NULL, &ver, NULL);
-
- return qobject_from_jsonf("{'QMP': {'version': %p, 'capabilities': []}}",
- ver);
+ sub = qdict_new();
+ qdict_put_obj(sub, "version", ver);
+ qdict_put(sub, "capabilities", qlist_new());
+ ret = qdict_new();
+ qdict_put(ret, "QMP", sub);
+ return QOBJECT(ret);
}
static void monitor_qmp_event(void *opaque, int event)
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 505eb41..483ea68 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -111,9 +111,11 @@ static QObject *do_qmp_dispatch(QObject *request, Error
**errp)
QObject *qmp_build_error_object(Error *err)
{
- return qobject_from_jsonf("{ 'class': %s, 'desc': %s }",
- QapiErrorClass_lookup[error_get_class(err)],
- error_get_pretty(err));
+ QDict *ret = qdict_new();
+
+ qdict_put_str(ret, "class", QapiErrorClass_lookup[error_get_class(err)]);
+ qdict_put_str(ret, "desc", error_get_pretty(err));
+ return QOBJECT(ret);
}
QObject *qmp_dispatch(QObject *request)
--
2.7.4
- [Qemu-devel] [PATCH 00/36] Rip out dynamic JSON parsing, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 01/36] pci: Use struct instead of QDict to pass back parameters, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 03/36] qlist: Add convenience helpers for wrapped appends, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 08/36] test-qga: Actually test 0xff sync bytes, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 10/36] qtest: Avoid dynamic JSON in libqtest, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 09/36] qtest: Add a new helper qmp_cmd() and friends, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 06/36] qobject-input-visitor: Avoid dynamic JSON in tests, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 04/36] qmp-event: Avoid dynamic JSON, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 05/36] qmp-dispatch: Avoid dynamic JSON,
Eric Blake <=
- [Qemu-devel] [PATCH 07/36] fdc-test: Avoid deprecated 'change' command, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 22/36] qtest: Avoid dynamic JSON in pc-cpu-test, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 12/36] nbd: Use simpler QAPI_TO_QOBJECT(), Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 11/36] qapi: Add QAPI_TO_QOBJECT() convenience macro, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 19/36] qtest: Change qmp_discard_response() to drop varargs, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 25/36] qtest: Change qmp_fd_send() to drop varags, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 13/36] nfs: Use simpler QAPI_TO_QOBJECT(), Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 16/36] qapi: Promote blockdev-change-medium arguments to QAPI type, Eric Blake, 2016/11/30
- [Qemu-devel] [PATCH 14/36] qapi: Use simpler QAPI_TO_QOBJECT(), Eric Blake, 2016/11/30