]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: command: Refactor floppy controller command formatting
authorPeter Krempa <pkrempa@redhat.com>
Mon, 25 Jun 2018 15:40:14 +0000 (17:40 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 10 Jul 2018 11:32:54 +0000 (13:32 +0200)
Aggregate the code for the two separate formats used according to the
machine type and add some supporting code so that the function is
actually readable.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c

index 2fe13287e2d7f820dd7464acf0927111b8d18a09..927cc9ca10c96d3ac4e73b15f7e7108dc7dd5b81 100644 (file)
@@ -2148,55 +2148,53 @@ qemuBuildFloppyCommandLineOptions(virCommandPtr cmd,
 
 {
     virBuffer fdc_opts = VIR_BUFFER_INITIALIZER;
-    char *fdc_opts_str = NULL;
-    char *optstr;
+    char driveLetter;
     char *backendAlias = NULL;
+    char *backendStr = NULL;
+    char *bootindexStr = NULL;
     int ret = -1;
 
+    if (disk->info.addr.drive.unit)
+        driveLetter = 'B';
+    else
+        driveLetter = 'A';
+
     if (!(backendAlias = qemuAliasDiskDriveFromDisk(disk)))
         return -1;
 
-    if (virAsprintf(&optstr, "drive%c=%s",
-                    disk->info.addr.drive.unit ? 'B' : 'A',
-                    backendAlias) < 0)
+    if (virAsprintf(&backendStr, "drive%c=%s", driveLetter, backendAlias) < 0)
         goto cleanup;
 
-    if (!qemuDomainNeedsFDC(def)) {
-        virCommandAddArg(cmd, "-global");
-        virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr);
-    } else {
-        virBufferAsprintf(&fdc_opts, "%s,", optstr);
-    }
-    VIR_FREE(optstr);
-
-    if (bootindex) {
-        if (virAsprintf(&optstr, "bootindex%c=%u",
-                        disk->info.addr.drive.unit
-                        ? 'B' : 'A',
-                        bootindex) < 0)
-            goto cleanup;
+    if (bootindex &&
+        virAsprintf(&bootindexStr, "bootindex%c=%u", driveLetter, bootindex) < 0)
+        goto cleanup;
 
-        if (!qemuDomainNeedsFDC(def)) {
+    if (!qemuDomainNeedsFDC(def)) {
+        if (backendStr) {
             virCommandAddArg(cmd, "-global");
-            virCommandAddArgFormat(cmd, "isa-fdc.%s", optstr);
-        } else {
-            virBufferAsprintf(&fdc_opts, "%s,", optstr);
+            virCommandAddArgFormat(cmd, "isa-fdc.%s", backendStr);
         }
-        VIR_FREE(optstr);
-    }
 
-    /* Newer Q35 machine types require an explicit FDC controller */
-    virBufferTrim(&fdc_opts, ",", -1);
-    if ((fdc_opts_str = virBufferContentAndReset(&fdc_opts))) {
+        if (bootindexStr) {
+            virCommandAddArg(cmd, "-global");
+            virCommandAddArgFormat(cmd, "isa-fdc.%s", bootindexStr);
+        }
+    } else {
+        /* Newer Q35 machine types require an explicit FDC controller */
+        virBufferAddLit(&fdc_opts, "isa-fdc,");
+        virBufferStrcat(&fdc_opts, backendStr, ",", NULL);
+        virBufferStrcat(&fdc_opts, bootindexStr, NULL);
+        virBufferTrim(&fdc_opts, ",", -1);
         virCommandAddArg(cmd, "-device");
-        virCommandAddArgFormat(cmd, "isa-fdc,%s", fdc_opts_str);
-        VIR_FREE(fdc_opts_str);
+        virCommandAddArgBuffer(cmd, &fdc_opts);
     }
 
     ret = 0;
 
  cleanup:
     VIR_FREE(backendAlias);
+    VIR_FREE(backendStr);
+    VIR_FREE(bootindexStr);
     return ret;
 }