提交 d7f369b5 编写于 作者: D Dawid Zamirski 提交者: John Ferlan

vbox: do not use IHardDisk anymore.

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

* remove typef IMedium IHardDisk
* merge UIHardDisk into UIMedium
* update all references accordingly
上级 c7c286c6
......@@ -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. */
......
......@@ -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];
......
......@@ -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 */
}
......@@ -2588,11 +2587,34 @@ _mediumCreateDiffStorage(IMedium *medium ATTRIBUTE_UNUSED,
#endif /* VBOX_API_VERSION >= 4003000 */
}
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
......@@ -2900,41 +2922,6 @@ _dhcpServerStop(IDHCPServer *dhcpServer)
return dhcpServer->vtbl->Stop(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)
{
......@@ -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;
......
......@@ -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 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册