[libvirt] [PATCH 05/12] vbox: do not use IHardDisk anymore.

Dawid Zamirski dzamirski at datto.com
Thu Dec 29 20:34:26 UTC 2016


VirtualBox 4.0+ uses IMedium and IHardDisk is no longer used, so

* remove typef IMedium IHardDisk
* merge UIHardDisk into UIMedium
* update all references accordingly
---
 src/vbox/vbox_common.h        |  1 -
 src/vbox/vbox_storage.c       | 32 +++++++--------
 src/vbox/vbox_tmpl.c          | 91 +++++++++++++++++--------------------------
 src/vbox/vbox_uniformed_api.h | 31 ++++++---------
 4 files changed, 64 insertions(+), 91 deletions(-)

diff --git a/src/vbox/vbox_common.h b/src/vbox/vbox_common.h
index 7bbab8d..76f7a8e 100644
--- a/src/vbox/vbox_common.h
+++ b/src/vbox/vbox_common.h
@@ -340,7 +340,6 @@ typedef nsISupports IDisplay;
 typedef nsISupports IHost;
 typedef nsISupports IHostNetworkInterface;
 typedef nsISupports IDHCPServer;
-typedef IMedium IHardDisk;
 typedef nsISupports IKeyboard;
 
 /* Macros for all vbox drivers. */
diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c
index c286753..6c92a3c 100644
--- a/src/vbox/vbox_storage.c
+++ b/src/vbox/vbox_storage.c
@@ -106,7 +106,7 @@ static int vboxStoragePoolNumOfVolumes(virStoragePoolPtr pool)
     }
 
     for (i = 0; i < hardDisks.count; ++i) {
-        IHardDisk *hardDisk = hardDisks.items[i];
+        IMedium *hardDisk = hardDisks.items[i];
         PRUint32 hddstate;
 
         if (!hardDisk)
@@ -147,7 +147,7 @@ vboxStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int nname
     }
 
     for (i = 0; i < hardDisks.count && numActive < nnames; ++i) {
-        IHardDisk *hardDisk = hardDisks.items[i];
+        IMedium *hardDisk = hardDisks.items[i];
         PRUint32 hddstate;
         char *nameUtf8 = NULL;
         PRUnichar *nameUtf16 = NULL;
@@ -201,7 +201,7 @@ vboxStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
         return ret;
 
     for (i = 0; i < hardDisks.count; ++i) {
-        IHardDisk *hardDisk = hardDisks.items[i];
+        IMedium *hardDisk = hardDisks.items[i];
         PRUint32 hddstate;
         char *nameUtf8 = NULL;
         PRUnichar *nameUtf16 = NULL;
@@ -259,7 +259,7 @@ vboxStorageVolLookupByKey(virConnectPtr conn, const char *key)
     vboxDriverPtr data = conn->privateData;
     vboxIIDUnion hddIID;
     unsigned char uuid[VIR_UUID_BUFLEN];
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     PRUnichar *hddNameUtf16 = NULL;
     char *hddNameUtf8 = NULL;
     PRUint32 hddstate;
@@ -325,7 +325,7 @@ vboxStorageVolLookupByPath(virConnectPtr conn, const char *path)
 {
     vboxDriverPtr data = conn->privateData;
     PRUnichar *hddPathUtf16 = NULL;
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     PRUnichar *hddNameUtf16 = NULL;
     char *hddNameUtf8 = NULL;
     unsigned char uuid[VIR_UUID_BUFLEN];
@@ -410,7 +410,7 @@ vboxStorageVolCreateXML(virStoragePoolPtr pool,
     vboxIIDUnion hddIID;
     unsigned char uuid[VIR_UUID_BUFLEN];
     char key[VIR_UUID_STRING_BUFLEN] = "";
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     IProgress *progress = NULL;
     PRUint64 logicalSize = 0;
     PRUint32 variant = HardDiskVariant_Standard;
@@ -469,7 +469,7 @@ vboxStorageVolCreateXML(virStoragePoolPtr pool,
     if (def->target.capacity == def->target.allocation)
         variant = HardDiskVariant_Fixed;
 
-    rc = gVBoxAPI.UIHardDisk.CreateBaseStorage(hardDisk, logicalSize, variant, &progress);
+    rc = gVBoxAPI.UIMedium.CreateBaseStorage(hardDisk, logicalSize, variant, &progress);
     if (NS_FAILED(rc) || !progress) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Could not create base storage, rc=%08x"),
@@ -510,7 +510,7 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
 {
     vboxDriverPtr data = vol->conn->privateData;
     unsigned char uuid[VIR_UUID_BUFLEN];
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     int deregister = 0;
     PRUint32 hddstate = 0;
     size_t i = 0;
@@ -592,7 +592,7 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
 
         for (j = 0; j < hddAttachments.count; j++) {
             IMediumAttachment *hddAttachment = hddAttachments.items[j];
-            IHardDisk *hdd = NULL;
+            IMedium *hdd = NULL;
             vboxIIDUnion iid;
 
             if (!hddAttachment)
@@ -646,7 +646,7 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
 
     if (machineIdsSize == 0 || machineIdsSize == deregister) {
         IProgress *progress = NULL;
-        if (NS_SUCCEEDED(gVBoxAPI.UIHardDisk.DeleteStorage(hardDisk, &progress)) &&
+        if (NS_SUCCEEDED(gVBoxAPI.UIMedium.DeleteStorage(hardDisk, &progress)) &&
             progress) {
             gVBoxAPI.UIProgress.WaitForCompletion(progress, -1);
             VBOX_RELEASE(progress);
@@ -664,7 +664,7 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
 static int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info)
 {
     vboxDriverPtr data = vol->conn->privateData;
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     unsigned char uuid[VIR_UUID_BUFLEN];
     PRUint32 hddstate;
     PRUint64 hddLogicalSize = 0;
@@ -697,7 +697,7 @@ static int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info
 
     info->type = VIR_STORAGE_VOL_FILE;
 
-    gVBoxAPI.UIHardDisk.GetLogicalSizeInByte(hardDisk, &hddLogicalSize);
+    gVBoxAPI.UIMedium.GetLogicalSize(hardDisk, &hddLogicalSize);
     info->capacity = hddLogicalSize;
 
     gVBoxAPI.UIMedium.GetSize(hardDisk, &hddActualSize);
@@ -719,7 +719,7 @@ static int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info
 static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
 {
     vboxDriverPtr data = vol->conn->privateData;
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     unsigned char uuid[VIR_UUID_BUFLEN];
     PRUnichar *hddFormatUtf16 = NULL;
     char *hddFormatUtf8 = NULL;
@@ -764,7 +764,7 @@ static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
     pool.type = VIR_STORAGE_POOL_DIR;
     def.type = VIR_STORAGE_VOL_FILE;
 
-    rc = gVBoxAPI.UIHardDisk.GetLogicalSizeInByte(hardDisk, &hddLogicalSize);
+    rc = gVBoxAPI.UIMedium.GetLogicalSize(hardDisk, &hddLogicalSize);
     if (NS_FAILED(rc))
         goto cleanup;
 
@@ -780,7 +780,7 @@ static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
     if (VIR_STRDUP(def.key, vol->key) < 0)
         goto cleanup;
 
-    rc = gVBoxAPI.UIHardDisk.GetFormat(hardDisk, &hddFormatUtf16);
+    rc = gVBoxAPI.UIMedium.GetFormat(hardDisk, &hddFormatUtf16);
     if (NS_FAILED(rc))
         goto cleanup;
 
@@ -811,7 +811,7 @@ static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
 static char *vboxStorageVolGetPath(virStorageVolPtr vol)
 {
     vboxDriverPtr data = vol->conn->privateData;
-    IHardDisk *hardDisk = NULL;
+    IMedium *hardDisk = NULL;
     PRUnichar *hddLocationUtf16 = NULL;
     char *hddLocationUtf8 = NULL;
     unsigned char uuid[VIR_UUID_BUFLEN];
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index c9c946c..55adf6d 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -73,7 +73,6 @@
 #include "vbox_glue.h"
 
 typedef IVRDEServer IVRDxServer;
-typedef IMedium IHardDisk;
 
 #if VBOX_API_VERSION < 4003000
 typedef IUSBController IUSBCommon;
@@ -1402,15 +1401,15 @@ _virtualboxCreateMachine(vboxDriverPtr data, virDomainDefPtr def, IMachine **mac
 
 static nsresult
 _virtualboxCreateHardDisk(IVirtualBox *vboxObj, PRUnichar *format,
-                          PRUnichar *location, IHardDisk **hardDisk)
+                          PRUnichar *location, IMedium **medium)
 {
     /* In vbox 2.2 and 3.0, this function will create a IHardDisk object.
      * In vbox 3.1 and later, this function will create a IMedium object.
      */
 #if VBOX_API_VERSION < 5000000
-    return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, hardDisk);
+    return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, medium);
 #elif VBOX_API_VERSION >= 5000000 /*VBOX_API_VERSION >= 5000000*/
-    return vboxObj->vtbl->CreateMedium(vboxObj, format, location, AccessMode_ReadWrite, DeviceType_HardDisk, hardDisk);
+    return vboxObj->vtbl->CreateMedium(vboxObj, format, location, AccessMode_ReadWrite, DeviceType_HardDisk, medium);
 #endif /*VBOX_API_VERSION >= 5000000*/
 }
 
@@ -1424,14 +1423,14 @@ static nsresult
 _virtualboxFindHardDisk(IVirtualBox *vboxObj, PRUnichar *location,
                         PRUint32 deviceType ATTRIBUTE_UNUSED,
                         PRUint32 accessMode ATTRIBUTE_UNUSED,
-                        IHardDisk **hardDisk)
+                        IMedium **medium)
 {
 #if VBOX_API_VERSION < 4002000
     return vboxObj->vtbl->FindMedium(vboxObj, location,
-                                     deviceType, hardDisk);
+                                     deviceType, medium);
 #else /* VBOX_API_VERSION >= 4002000 */
     return vboxObj->vtbl->OpenMedium(vboxObj, location,
-                                     deviceType, accessMode, PR_FALSE, hardDisk);
+                                     deviceType, accessMode, PR_FALSE, medium);
 #endif /* VBOX_API_VERSION >= 4002000 */
 }
 
@@ -1457,14 +1456,14 @@ _virtualboxOpenMedium(IVirtualBox *vboxObj ATTRIBUTE_UNUSED,
 }
 
 static nsresult
-_virtualboxGetHardDiskByIID(IVirtualBox *vboxObj, vboxIIDUnion *iidu, IHardDisk **hardDisk)
+_virtualboxGetHardDiskByIID(IVirtualBox *vboxObj, vboxIIDUnion *iidu, IMedium **medium)
 {
 #if VBOX_API_VERSION >= 4000000 && VBOX_API_VERSION < 4002000
     return vboxObj->vtbl->FindMedium(vboxObj, IID_MEMBER(value), DeviceType_HardDisk,
-                                     hardDisk);
+                                     medium);
 #else /* VBOX_API_VERSION >= 4002000 */
     return vboxObj->vtbl->OpenMedium(vboxObj, IID_MEMBER(value), DeviceType_HardDisk,
-                                     AccessMode_ReadWrite, PR_FALSE, hardDisk);
+                                     AccessMode_ReadWrite, PR_FALSE, medium);
 #endif /* VBOX_API_VERSION >= 4002000 */
 }
 
@@ -2589,10 +2588,33 @@ _mediumCreateDiffStorage(IMedium *medium ATTRIBUTE_UNUSED,
 }
 
 static nsresult
+_mediumCreateBaseStorage(IMedium *medium, PRUint64 logicalSize,
+                           PRUint32 variant, IProgress **progress)
+{
+#if VBOX_API_VERSION < 4003000
+    return medium->vtbl->CreateBaseStorage(medium, logicalSize, variant, progress);
+#else
+    return medium->vtbl->CreateBaseStorage(medium, logicalSize, 1, &variant, progress);
+#endif
+}
+
+static nsresult
+_mediumGetLogicalSize(IMedium *medium, PRUint64 *uLogicalSize)
+{
+    nsresult rc;
+    PRInt64 logicalSize;
+
+    rc = medium->vtbl->GetLogicalSize(medium, &logicalSize);
+    *uLogicalSize = logicalSize;
+
+    return rc;
+}
+
+static nsresult
 _mediumAttachmentGetMedium(IMediumAttachment *mediumAttachment,
-                           IHardDisk **hardDisk)
+                           IMedium **medium)
 {
-    return mediumAttachment->vtbl->GetMedium(mediumAttachment, hardDisk);
+    return mediumAttachment->vtbl->GetMedium(mediumAttachment, medium);
 }
 
 static nsresult
@@ -2901,41 +2923,6 @@ _dhcpServerStop(IDHCPServer *dhcpServer)
 }
 
 static nsresult
-_hardDiskCreateBaseStorage(IHardDisk *hardDisk, PRUint64 logicalSize,
-                           PRUint32 variant, IProgress **progress)
-{
-#if VBOX_API_VERSION < 4003000
-    return hardDisk->vtbl->CreateBaseStorage(hardDisk, logicalSize, variant, progress);
-#else
-    return hardDisk->vtbl->CreateBaseStorage(hardDisk, logicalSize, 1, &variant, progress);
-#endif
-}
-
-static nsresult
-_hardDiskDeleteStorage(IHardDisk *hardDisk, IProgress **progress)
-{
-    return hardDisk->vtbl->DeleteStorage(hardDisk, progress);
-}
-
-static nsresult
-_hardDiskGetLogicalSizeInByte(IHardDisk *hardDisk, PRUint64 *uLogicalSize)
-{
-    nsresult rc;
-    PRInt64 logicalSize;
-
-    rc = hardDisk->vtbl->GetLogicalSize(hardDisk, &logicalSize);
-    *uLogicalSize = logicalSize;
-
-    return rc;
-}
-
-static nsresult
-_hardDiskGetFormat(IHardDisk *hardDisk, PRUnichar **format)
-{
-    return hardDisk->vtbl->GetFormat(hardDisk, format);
-}
-
-static nsresult
 _keyboardPutScancode(IKeyboard *keyboard, PRInt32 scancode)
 {
     return keyboard->vtbl->PutScancode(keyboard, scancode);
@@ -3229,6 +3216,8 @@ static vboxUniformedIMedium _UIMedium = {
     .Close = _mediumClose,
     .SetType = _mediumSetType,
     .CreateDiffStorage = _mediumCreateDiffStorage,
+    .CreateBaseStorage = _mediumCreateBaseStorage,
+    .GetLogicalSize = _mediumGetLogicalSize,
 };
 
 static vboxUniformedIMediumAttachment _UIMediumAttachment = {
@@ -3295,13 +3284,6 @@ static vboxUniformedIDHCPServer _UIDHCPServer = {
     .Stop = _dhcpServerStop,
 };
 
-static vboxUniformedIHardDisk _UIHardDisk = {
-    .CreateBaseStorage = _hardDiskCreateBaseStorage,
-    .DeleteStorage = _hardDiskDeleteStorage,
-    .GetLogicalSizeInByte = _hardDiskGetLogicalSizeInByte,
-    .GetFormat = _hardDiskGetFormat,
-};
-
 static vboxUniformedIKeyboard _UIKeyboard = {
     .PutScancode = _keyboardPutScancode,
     .PutScancodes = _keyboardPutScancodes,
@@ -3361,7 +3343,6 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
     pVBoxAPI->UIHost = _UIHost;
     pVBoxAPI->UIHNInterface = _UIHNInterface;
     pVBoxAPI->UIDHCPServer = _UIDHCPServer;
-    pVBoxAPI->UIHardDisk = _UIHardDisk;
     pVBoxAPI->UIKeyboard = _UIKeyboard;
     pVBoxAPI->machineStateChecker = _machineStateChecker;
 
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index 6c4cf3d..3892aae 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -196,12 +196,12 @@ typedef struct {
     nsresult (*GetSystemProperties)(IVirtualBox *vboxObj, ISystemProperties **systemProperties);
     nsresult (*GetHost)(IVirtualBox *vboxObj, IHost **host);
     nsresult (*CreateMachine)(vboxDriverPtr driver, virDomainDefPtr def, IMachine **machine, char *uuidstr);
-    nsresult (*CreateHardDisk)(IVirtualBox *vboxObj, PRUnichar *format, PRUnichar *location, IHardDisk **hardDisk);
+    nsresult (*CreateHardDisk)(IVirtualBox *vboxObj, PRUnichar *format, PRUnichar *location, IMedium **medium);
     nsresult (*RegisterMachine)(IVirtualBox *vboxObj, IMachine *machine);
     nsresult (*FindHardDisk)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32 deviceType,
-                             PRUint32 accessMode, IHardDisk **hardDisk);
+                             PRUint32 accessMode, IMedium **medium);
     nsresult (*OpenMedium)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32 deviceType, PRUint32 accessMode, IMedium **medium);
-    nsresult (*GetHardDiskByIID)(IVirtualBox *vboxObj, vboxIIDUnion *iidu, IHardDisk **hardDisk);
+    nsresult (*GetHardDiskByIID)(IVirtualBox *vboxObj, vboxIIDUnion *iidu, IMedium **medium);
     nsresult (*FindDHCPServerByNetworkName)(IVirtualBox *vboxObj, PRUnichar *name, IDHCPServer **server);
     nsresult (*CreateDHCPServer)(IVirtualBox *vboxObj, PRUnichar *name, IDHCPServer **server);
     nsresult (*RemoveDHCPServer)(IVirtualBox *vboxObj, IDHCPServer *server);
@@ -420,19 +420,24 @@ typedef struct {
     nsresult (*GetSize)(IMedium *medium, PRUint64 *uSize);
     nsresult (*GetReadOnly)(IMedium *medium, PRBool *readOnly);
     nsresult (*GetParent)(IMedium *medium, IMedium **parent);
-    nsresult (*GetChildren)(IMedium *medium, PRUint32 *childrenSize, IMedium ***children);
+    nsresult (*GetChildren)(IMedium *medium, PRUint32 *childrenSize,
+                            IMedium ***children);
     nsresult (*GetFormat)(IMedium *medium, PRUnichar **format);
     nsresult (*DeleteStorage)(IMedium *medium, IProgress **progress);
     nsresult (*Release)(IMedium *medium);
     nsresult (*Close)(IMedium *medium);
     nsresult (*SetType)(IMedium *medium, PRUint32 type);
-    nsresult (*CreateDiffStorage)(IMedium *medium, IMedium *target, PRUint32 variantSize,
-                                  PRUint32 *variant, IProgress **progress);
+    nsresult (*CreateDiffStorage)(IMedium *medium, IMedium *target,
+                                  PRUint32 variantSize, PRUint32 *variant,
+                                  IProgress **progress);
+    nsresult (*CreateBaseStorage)(IMedium *medium, PRUint64 logicalSize,
+                                  PRUint32 variant, IProgress **progress);
+    nsresult (*GetLogicalSize)(IMedium *medium, PRUint64 *uLogicalSize);
 } vboxUniformedIMedium;
 
 /* Functions for IMediumAttachment */
 typedef struct {
-    nsresult (*GetMedium)(IMediumAttachment *mediumAttachment, IHardDisk **hardDisk);
+    nsresult (*GetMedium)(IMediumAttachment *mediumAttachment, IMedium **medium);
     nsresult (*GetController)(IMediumAttachment *mediumAttachment, PRUnichar **controller);
     nsresult (*GetType)(IMediumAttachment *mediumAttachment, PRUint32 *type);
     nsresult (*GetPort)(IMediumAttachment *mediumAttachment, PRInt32 *port);
@@ -523,17 +528,6 @@ typedef struct {
     nsresult (*Stop)(IDHCPServer *dhcpServer);
 } vboxUniformedIDHCPServer;
 
-/* Functions for IHardDisk, in vbox3.1 and later, it will call the
- * corresponding functions in IMedium as IHardDisk does't exist in
- * these versions. */
-typedef struct {
-    nsresult (*CreateBaseStorage)(IHardDisk *hardDisk, PRUint64 logicalSize,
-                                  PRUint32 variant, IProgress **progress);
-    nsresult (*DeleteStorage)(IHardDisk *hardDisk, IProgress **progress);
-    nsresult (*GetLogicalSizeInByte)(IHardDisk *hardDisk, PRUint64 *uLogicalSize);
-    nsresult (*GetFormat)(IHardDisk *hardDisk, PRUnichar **format);
-} vboxUniformedIHardDisk;
-
 typedef struct {
     nsresult (*PutScancode)(IKeyboard *keyboard, PRInt32 scancode);
     nsresult (*PutScancodes)(IKeyboard *keyboard, PRUint32 scancodesSize,
@@ -596,7 +590,6 @@ typedef struct {
     vboxUniformedIHost UIHost;
     vboxUniformedIHNInterface UIHNInterface;
     vboxUniformedIDHCPServer UIDHCPServer;
-    vboxUniformedIHardDisk UIHardDisk;
     vboxUniformedIKeyboard UIKeyboard;
     uniformedMachineStateChecker machineStateChecker;
     /* vbox API features */
-- 
2.9.3




More information about the libvir-list mailing list