[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObject
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObject |
Date: |
Thu, 3 Aug 2017 20:25:39 -0500 |
When we don't have to do any % interpolation in qmp() and friends,
there is no point wasting time allocating a QObject from the format
string only to then format it back into the string we send over
the wire.
This is a temporary measure: it becomes important in the next
patch, where test-qga will be refactored to do interpolation in
place, and where we must not re-interpolate the string; but will
go away when further refactoring makes it easier to directly
output a string without going through qmp_fd_sendv().
Signed-off-by: Eric Blake <address@hidden>
---
tests/libqtest.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/tests/libqtest.c b/tests/libqtest.c
index cde737ec5a..0cb439eefa 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -448,7 +448,7 @@ QDict *qtest_qmp_receive(QTestState *s)
*/
void qmp_fd_sendv(int fd, const char *fmt, va_list ap)
{
- QObject *qobj;
+ QObject *qobj = NULL;
int log = getenv("QTEST_LOG") != NULL;
QString *qstr;
const char *str;
@@ -462,9 +462,17 @@ void qmp_fd_sendv(int fd, const char *fmt, va_list ap)
}
assert(*fmt);
- /* Going through qobject ensures we escape strings properly. */
- qobj = qobject_from_jsonv(fmt, ap);
- qstr = qobject_to_json(qobj);
+ /*
+ * A round trip through QObject is only needed if % interpolation
+ * is used. We interpolate through QObject rather than sprintf in
+ * order to escape strings properly.
+ */
+ if (strchr(fmt, '%')) {
+ qobj = qobject_from_jsonv(fmt, ap);
+ qstr = qobject_to_json(qobj);
+ } else {
+ qstr = qstring_from_str(fmt);
+ }
/*
* BUG: QMP doesn't react to input until it sees a newline, an
--
2.13.3
- [Qemu-devel] [PATCH v4 03/22] tests/libqtest: Clean up how we read the QMP greeting, (continued)
- [Qemu-devel] [PATCH v4 03/22] tests/libqtest: Clean up how we read the QMP greeting, Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 04/22] tests: Add assertion for no qmp(""), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 07/22] numa-test: Use hmp(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 08/22] qtest: Avoid passing raw strings through hmp(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 09/22] qtest: Document calling conventions, Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 06/22] qobject: Perform %% interpolation in qobject_from_jsonf(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 10/22] libqtest: Skip round-trip through QObject,
Eric Blake <=
- [Qemu-devel] [PATCH v4 05/22] qobject: Simplify qobject_from_jsonv(), Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 12/22] libqtest: Change qmp_fd_send() to drop varargs, Eric Blake, 2017/08/03
- [Qemu-devel] [PATCH v4 11/22] test-qga: Simplify command construction, Eric Blake, 2017/08/03