From 53d976b63a1f26fdf9dc6a9eb3b55cbe758e8b37 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Sun, 8 May 2016 14:22:13 -0400 Subject: [PATCH] qemu: command: Add qemuBufferEscapeComma Centralize the magic invocation for escaping commas on the qemu command line, and document it a bit --- src/qemu/qemu_command.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 61c446e2b4..4745ecac47 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -149,6 +149,22 @@ VIR_ENUM_IMPL(qemuNumaPolicy, VIR_DOMAIN_NUMATUNE_MEM_LAST, "preferred", "interleave"); + +/** + * qemuBufferEscapeComma: + * @buf: buffer to append the escaped string + * @str: the string to escape + * + * qemu requires that any values passed on the command line which contain + * a ',' must escape it using an extra ',' as the escape character + */ +static void +qemuBufferEscapeComma(virBufferPtr buf, const char *str) +{ + virBufferEscape(buf, ',', ",", "%s", str); +} + + /** * qemuBuildHasMasterKey: * @qemuCaps: QEMU binary capabilities @@ -1211,7 +1227,8 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, break; } - virBufferEscape(&opt, ',', ",", "%s,", source); + qemuBufferEscapeComma(&opt, source); + virBufferAddLit(&opt, ","); if (disk->src->format > 0 && disk->src->type != VIR_STORAGE_TYPE_DIR) @@ -3783,7 +3800,7 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, goto error; } virBufferAsprintf(&buf, "virtio-input-host%s,id=%s,evdev=", suffix, dev->info.alias); - virBufferEscape(&buf, ',', ",", "%s", dev->source.evdev); + qemuBufferEscapeComma(&buf, dev->source.evdev); break; case VIR_DOMAIN_INPUT_TYPE_LAST: break; @@ -9084,10 +9101,10 @@ qemuBuildTPMBackendStr(const virDomainDef *def, goto error; } virBufferAddLit(&buf, ",path="); - virBufferEscape(&buf, ',', ",", "%s", devset ? devset : tpmdev); + qemuBufferEscapeComma(&buf, devset ? devset : tpmdev); virBufferAddLit(&buf, ",cancel-path="); - virBufferEscape(&buf, ',', ",", "%s", cancel_path); + qemuBufferEscapeComma(&buf, cancel_path); VIR_FREE(devset); VIR_FREE(cancel_path);