qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]