Avoid a large block by tweaking the condition skipping empty drives and
split up the switch containing two branches having different purpose.
---
src/qemu/qemu_command.c | 99 +++++++++++++++++++++++--------------------------
1 file changed, 46 insertions(+), 53 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ee7329c..3b42b73 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1107,70 +1107,63 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk,
if (qemuGetDriveSourceString(disk->src, secinfo, &source) < 0)
goto cleanup;
- if (source &&
- !((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY ||
- disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) &&
- disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN)) {
-
- virBufferAddLit(buf, "file=");
-
- switch (actualType) {
- case VIR_STORAGE_TYPE_DIR:
- /* QEMU only supports magic FAT format for now */
- if (disk->src->format > 0 &&
- disk->src->format != VIR_STORAGE_FILE_FAT) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("unsupported disk driver type for
'%s'"),
-
virStorageFileFormatTypeToString(disk->src->format));
- goto cleanup;
- }
-
- if (!disk->src->readonly) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("cannot create virtual FAT disks in read-write
mode"));
- goto cleanup;
- }
-
- virBufferAddLit(buf, "fat:");
+ /* nothing to format if the drive is empty */
+ if (!source ||
+ ((disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY ||
+ disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) &&
+ disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN))
+ return 0;
- if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY)
- virBufferAddLit(buf, "floppy:");
+ if (actualType == VIR_STORAGE_TYPE_BLOCK &&
+ disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ disk->src->type == VIR_STORAGE_TYPE_VOLUME ?
+ _("tray status 'open' is invalid for block type
volume") :
+ _("tray status 'open' is invalid for block type
disk"));
+ goto cleanup;
+ }
- break;
+ virBufferAddLit(buf, "file=");
- case VIR_STORAGE_TYPE_BLOCK:
- if (disk->tray_status == VIR_DOMAIN_DISK_TRAY_OPEN) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- disk->src->type == VIR_STORAGE_TYPE_VOLUME ?
- _("tray status 'open' is invalid for block
type volume") :
- _("tray status 'open' is invalid for block
type disk"));
- goto cleanup;
- }
-
- break;
+ /* for now the DIR based storage is handled by the magic FAT format */
+ if (actualType == VIR_STORAGE_TYPE_DIR) {
+ if (disk->src->format > 0 &&
+ disk->src->format != VIR_STORAGE_FILE_FAT) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("unsupported disk driver type for '%s'"),
+ virStorageFileFormatTypeToString(disk->src->format));
+ goto cleanup;
+ }
- default:
- break;
+ if (!disk->src->readonly) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("cannot create virtual FAT disks in read-write
mode"));
+ goto cleanup;
}
- virQEMUBuildBufferEscapeComma(buf, source);
- virBufferAddLit(buf, ",");
+ virBufferAddLit(buf, "fat:");
- if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) {
- virBufferAsprintf(buf, "password-secret=%s,",
- secinfo->s.aes.alias);
- }
+ if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY)
+ virBufferAddLit(buf, "floppy:");
+ }
- if (encinfo)
- virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo,
- encinfo->s.aes.alias);
+ virQEMUBuildBufferEscapeComma(buf, source);
+ virBufferAddLit(buf, ",");
- if (disk->src->format > 0 &&
- disk->src->type != VIR_STORAGE_TYPE_DIR)
- virBufferAsprintf(buf, "format=%s,",
-
virStorageFileFormatTypeToString(disk->src->format));
+ if (secinfo && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES) {
+ virBufferAsprintf(buf, "password-secret=%s,",
+ secinfo->s.aes.alias);
}
+ if (encinfo)
+ virQEMUBuildLuksOpts(buf, &disk->src->encryption->encinfo,
+ encinfo->s.aes.alias);
+
+ if (disk->src->format > 0 &&
+ disk->src->type != VIR_STORAGE_TYPE_DIR)
+ virBufferAsprintf(buf, "format=%s,",
+ virStorageFileFormatTypeToString(disk->src->format));
+
ret = 0;
cleanup:
--
2.9.0