[libvirt] [PATCH] vbox: Use virIndexToDiskName() in vboxGenerateMediumName()

Matthias Bolte matthias.bolte at googlemail.com
Fri Dec 4 14:31:06 UTC 2009


---
 src/vbox/vbox_tmpl.c |   48 +++++++++---------------------------------------
 1 files changed, 9 insertions(+), 39 deletions(-)

diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 10cc1ed..33f5334 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -426,15 +426,14 @@ static void vboxUtf8toIID(virConnectPtr conn, char *uuidstr, vboxIID **iid) {
  * @param       aMaxSlotPerPort Input array of max slot per device port
  *
  */
-static char *vboxGenerateMediumName(virConnectPtr conn,
-                                    PRUint32  storageBus,
+static char *vboxGenerateMediumName(PRUint32  storageBus,
                                     PRInt32   deviceInst,
                                     PRInt32   devicePort,
                                     PRInt32   deviceSlot,
                                     PRUint32 *aMaxPortPerInst,
                                     PRUint32 *aMaxSlotPerPort) {
+    const char *prefix = NULL;
     char *name  = NULL;
-    int   len   = 0;
     int   total = 0;
     PRUint32 maxPortPerInst = 0;
     PRUint32 maxSlotPerPort = 0;
@@ -453,48 +452,20 @@ static char *vboxGenerateMediumName(virConnectPtr conn,
             + (devicePort * maxSlotPerPort)
             + deviceSlot;
 
-    if ((total >= 0) && (total < 26))
-        len = 4;
-    else if ((total >= 26) && (total < 26*26 + 26))
-        len = 5;
-    else if ((total >= 26*26 + 26) && (total < 26*26*26 + 26*26 + 26))
-        len = 6;
-    else
-        return NULL;
-
-    if (VIR_ALLOC_N(name, len) < 0) {
-        virReportOOMError(conn);
-        return NULL;
-    }
-
-    /* TODO: use virIndexToDiskName() here when available */
     if (storageBus == StorageBus_IDE) {
-        name[0] = 'h';
-        name[1] = 'd';
+        prefix = "hd";
     } else if (   (storageBus == StorageBus_SATA)
                || (storageBus == StorageBus_SCSI)) {
-        name[0] = 's';
-        name[1] = 'd';
+        prefix = "sd";
     } else if (storageBus == StorageBus_Floppy) {
-        name[0] = 'f';
-        name[1] = 'd';
+        prefix = "fd";
     }
 
-    if (len == 4) {
-        name[2] = (char)(97 + total);
-    } else if (len == 5) {
-        name[2] = (char)(96 + (total / 26));
-        name[3] = (char)(97 + (total % 26));
-    } else if (len == 6) {
-        name[2] = (char)(96 + (total / 26*26));
-        name[3] = (char)(96 + ((total % (26*26)) / 26));
-        name[4] = (char)(97 + ((total % (26*26)) % 26));
-    }
+    name = virIndexToDiskName(total, prefix);
 
-    name[len - 1] = '\0';
-    DEBUG("name=%s, len=%d, total=%d, storageBus=%u, deviceInst=%d, "
+    DEBUG("name=%s, total=%d, storageBus=%u, deviceInst=%d, "
           "devicePort=%d deviceSlot=%d, maxPortPerInst=%u maxSlotPerPort=%u",
-          name, len, total, storageBus, deviceInst, devicePort,
+          NULLSTR(name), total, storageBus, deviceInst, devicePort,
           deviceSlot, maxPortPerInst, maxSlotPerPort);
     return name;
 }
@@ -2496,8 +2467,7 @@ static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
 
                 imediumattach->vtbl->GetPort(imediumattach, &devicePort);
                 imediumattach->vtbl->GetDevice(imediumattach, &deviceSlot);
-                def->disks[diskCount]->dst = vboxGenerateMediumName(dom->conn,
-                                                                    storageBus,
+                def->disks[diskCount]->dst = vboxGenerateMediumName(storageBus,
                                                                     deviceInst,
                                                                     devicePort,
                                                                     deviceSlot,
-- 
1.6.0.4




More information about the libvir-list mailing list