[libvirt] [PATCH 21/25] qemu: command: Refactor code extracted to qemuBuildDriveSourceStr

Ján Tomko jtomko at redhat.com
Tue Jul 26 15:57:11 UTC 2016


On Mon, Jul 25, 2016 at 08:12:06PM +0200, Peter Krempa wrote:
>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;
>

Looks like this would leak source if it's non-NULL.

Jan




More information about the libvir-list mailing list