Use virJSONValueToBuffer so that we can append the command terminator
string without copying of the string again. Also avoid a 'strlen' as we
can query the buffer use size.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_monitor_json.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index c7a7e3fa56..8e6c3ccd63 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -277,7 +277,7 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
{
int ret = -1;
qemuMonitorMessage msg;
- char *cmdstr = NULL;
+ VIR_AUTOCLEAN(virBuffer) cmdbuf = VIR_BUFFER_INITIALIZER;
char *id = NULL;
*reply = NULL;
@@ -294,11 +294,15 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
}
}
- if (!(cmdstr = virJSONValueToString(cmd, false)))
+ if (virJSONValueToBuffer(cmd, &cmdbuf, false) < 0)
goto cleanup;
- if (virAsprintf(&msg.txBuffer, "%s\r\n", cmdstr) < 0)
+ virBufferAddLit(&cmdbuf, "\r\n");
+
+ if (virBufferCheckError(&cmdbuf) < 0)
goto cleanup;
- msg.txLength = strlen(msg.txBuffer);
+
+ msg.txLength = virBufferUse(&cmdbuf);
+ msg.txBuffer = virBufferContentAndReset(&cmdbuf);
msg.txFD = scm_fd;
ret = qemuMonitorSend(mon, &msg);
@@ -315,7 +319,6 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
cleanup:
VIR_FREE(id);
- VIR_FREE(cmdstr);
VIR_FREE(msg.txBuffer);
return ret;
--
2.20.1