qemu: command: Refactor floppy controller command formatting

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>
This commit is contained in:
Peter Krempa 2018-06-25 17:40:14 +02:00
parent 6236b61443
commit 192cf8ce00
1 changed files with 28 additions and 30 deletions

View 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 (bootindex &&
virAsprintf(&bootindexStr, "bootindex%c=%u", driveLetter, bootindex) < 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 (!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;
}