]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Make -boot arg generation more readable
authorJán Tomko <jtomko@redhat.com>
Wed, 18 Feb 2015 16:25:10 +0000 (17:25 +0100)
committerJán Tomko <jtomko@redhat.com>
Mon, 2 Mar 2015 06:39:09 +0000 (07:39 +0100)
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

index 490120580649ca5346b29202e783c6090d896ce3..d0eb632e62580513a7d308206ff2ae019feb5590 100644 (file)
@@ -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) {
-        virCommandAddArg(cmd, "-boot");
+    if (virBufferCheckError(&boot_buf) < 0)
+        goto error;
 
-        if (virBufferCheckError(&boot_buf) < 0)
-            goto error;
+    boot_opts_str = virBufferContentAndReset(&boot_buf);
+    if (boot_order_str || boot_opts_str) {
+        virCommandAddArg(cmd, "-boot");
 
-        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