提交 382e655d 编写于 作者: T Taowei Luo 提交者: Michal Privoznik

vbox: Make CreateHardDisk support all vbox versions

The CreateHardDiskMedium only support create HardDisk for medium
type, and it only works when vbox version >= 3.1. This patch make
the function workable with all vbox versions and rename it as
CreateHardDisk.

In vbox 2.2 and 3.0 this function will create a IHardDisk object.
In vbox later than 3.0, this function will create a IMedium object.
上级 fc41e003
...@@ -5115,7 +5115,7 @@ vboxSnapshotRedefine(virDomainPtr dom, ...@@ -5115,7 +5115,7 @@ vboxSnapshotRedefine(virDomainPtr dom,
if (virAsprintf(&newLocationUtf8, "%sfakedisk-%d.vdi", machineLocationPath, it) < 0) if (virAsprintf(&newLocationUtf8, "%sfakedisk-%d.vdi", machineLocationPath, it) < 0)
goto cleanup; goto cleanup;
VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation); VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation);
rc = gVBoxAPI.UIVirtualBox.CreateHardDiskMedium(data->vboxObj, rc = gVBoxAPI.UIVirtualBox.CreateHardDisk(data->vboxObj,
formatUtf16, formatUtf16,
newLocation, newLocation,
&newMedium); &newMedium);
...@@ -6877,7 +6877,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot) ...@@ -6877,7 +6877,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr snapshot)
machineLocationPath, def->parent, it) < 0) machineLocationPath, def->parent, it) < 0)
goto cleanup; goto cleanup;
VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation); VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation);
rc = gVBoxAPI.UIVirtualBox.CreateHardDiskMedium(data->vboxObj, rc = gVBoxAPI.UIVirtualBox.CreateHardDisk(data->vboxObj,
formatUtf16, formatUtf16,
newLocation, newLocation,
&newMedium); &newMedium);
......
...@@ -3456,17 +3456,13 @@ _virtualboxCreateMachine(vboxGlobalData *data, virDomainDefPtr def, IMachine **m ...@@ -3456,17 +3456,13 @@ _virtualboxCreateMachine(vboxGlobalData *data, virDomainDefPtr def, IMachine **m
} }
static nsresult static nsresult
_virtualboxCreateHardDiskMedium(IVirtualBox *vboxObj ATTRIBUTE_UNUSED, _virtualboxCreateHardDisk(IVirtualBox *vboxObj, PRUnichar *format,
PRUnichar *format ATTRIBUTE_UNUSED, PRUnichar *location, IHardDisk **hardDisk)
PRUnichar *location ATTRIBUTE_UNUSED,
IMedium **medium ATTRIBUTE_UNUSED)
{ {
#if VBOX_API_VERSION < 3001000 /* In vbox 2.2 and 3.0, this function will create a IHardDisk object.
vboxUnsupported(); * In vbox 3.1 and later, this function will create a IMedium object.
return 0; */
#else /* VBOX_API_VERSION >= 3001000 */ return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, hardDisk);
return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, medium);
#endif /* VBOX_API_VERSION >= 3001000 */
} }
static nsresult static nsresult
...@@ -5209,7 +5205,7 @@ static vboxUniformedIVirtualBox _UIVirtualBox = { ...@@ -5209,7 +5205,7 @@ static vboxUniformedIVirtualBox _UIVirtualBox = {
.GetSystemProperties = _virtualboxGetSystemProperties, .GetSystemProperties = _virtualboxGetSystemProperties,
.GetHost = _virtualboxGetHost, .GetHost = _virtualboxGetHost,
.CreateMachine = _virtualboxCreateMachine, .CreateMachine = _virtualboxCreateMachine,
.CreateHardDiskMedium = _virtualboxCreateHardDiskMedium, .CreateHardDisk = _virtualboxCreateHardDisk,
.RegisterMachine = _virtualboxRegisterMachine, .RegisterMachine = _virtualboxRegisterMachine,
.FindHardDisk = _virtualboxFindHardDisk, .FindHardDisk = _virtualboxFindHardDisk,
.OpenMedium = _virtualboxOpenMedium, .OpenMedium = _virtualboxOpenMedium,
......
...@@ -194,7 +194,7 @@ typedef struct { ...@@ -194,7 +194,7 @@ typedef struct {
nsresult (*GetSystemProperties)(IVirtualBox *vboxObj, ISystemProperties **systemProperties); nsresult (*GetSystemProperties)(IVirtualBox *vboxObj, ISystemProperties **systemProperties);
nsresult (*GetHost)(IVirtualBox *vboxObj, IHost **host); nsresult (*GetHost)(IVirtualBox *vboxObj, IHost **host);
nsresult (*CreateMachine)(vboxGlobalData *data, virDomainDefPtr def, IMachine **machine, char *uuidstr); nsresult (*CreateMachine)(vboxGlobalData *data, virDomainDefPtr def, IMachine **machine, char *uuidstr);
nsresult (*CreateHardDiskMedium)(IVirtualBox *vboxObj, PRUnichar *format, PRUnichar *location, IMedium **medium); nsresult (*CreateHardDisk)(IVirtualBox *vboxObj, PRUnichar *format, PRUnichar *location, IHardDisk **hardDisk);
nsresult (*RegisterMachine)(IVirtualBox *vboxObj, IMachine *machine); nsresult (*RegisterMachine)(IVirtualBox *vboxObj, IMachine *machine);
nsresult (*FindHardDisk)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32 deviceType, nsresult (*FindHardDisk)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32 deviceType,
PRUint32 accessMode, IHardDisk **hardDisk); PRUint32 accessMode, IHardDisk **hardDisk);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册