From ac21141ce497c7d8d8426f42b953ae82ec9da916 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 26 Mar 2019 18:33:01 +0100 Subject: [PATCH] qemu: monitor: Avoid unnecessary copies of command string 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 Reviewed-by: Laine Stump --- 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; -- GitLab