From 354425dcd23ad3558859e331e9c6fed8f611b22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Wed, 18 Feb 2015 17:25:10 +0100 Subject: [PATCH] Make -boot arg generation more readable If we combine the boot order on the command line with other boot options, we prepend order= in front of it. Instead of checking if the number of added arguments is between 0 and 2, separate the strings for boot order and options and prepend boot order only if both strings are not empty. --- src/qemu/qemu_command.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 4901205806..d0eb632e62 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8252,6 +8252,7 @@ qemuBuildCommandLine(virConnectPtr conn, virArch hostarch = virArchFromHost(); virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virBuffer boot_buf = VIR_BUFFER_INITIALIZER; + char *boot_order_str = NULL, *boot_opts_str = NULL; int boot_nparams = 0; VIR_DEBUG("conn=%p driver=%p def=%p mon=%p json=%d " @@ -8814,7 +8815,9 @@ qemuBuildCommandLine(virConnectPtr conn, boot[def->os.nBootDevs] = '\0'; virBufferAsprintf(&boot_buf, "%s", boot); - boot_nparams++; + if (virBufferCheckError(&boot_buf) < 0) + goto error; + boot_order_str = virBufferContentAndReset(&boot_buf); } if (def->os.bootmenu) { @@ -8870,23 +8873,23 @@ qemuBuildCommandLine(virConnectPtr conn, virBufferAddLit(&boot_buf, "strict=on"); } - if (boot_nparams > 0) { + if (virBufferCheckError(&boot_buf) < 0) + goto error; + + boot_opts_str = virBufferContentAndReset(&boot_buf); + if (boot_order_str || boot_opts_str) { virCommandAddArg(cmd, "-boot"); - if (virBufferCheckError(&boot_buf) < 0) - goto error; - - if (boot_nparams < 2 || emitBootindex) { - virCommandAddArgBuffer(cmd, &boot_buf); - virBufferFreeAndReset(&boot_buf); - } else { - char *str = virBufferContentAndReset(&boot_buf); - virCommandAddArgFormat(cmd, - "order=%s", - str); - VIR_FREE(str); + if (boot_order_str && boot_opts_str) { + virCommandAddArgFormat(cmd, "order=%s,%s", + boot_order_str, boot_opts_str); + } else if (boot_order_str) { + virCommandAddArg(cmd, boot_order_str); + } else if (boot_opts_str) { + virCommandAddArg(cmd, boot_opts_str); } } + VIR_FREE(boot_opts_str); if (def->os.kernel) virCommandAddArgList(cmd, "-kernel", def->os.kernel, NULL); @@ -10374,6 +10377,7 @@ qemuBuildCommandLine(virConnectPtr conn, return cmd; error: + VIR_FREE(boot_order_str); virBufferFreeAndReset(&boot_buf); virObjectUnref(cfg); /* free up any resources in the network driver