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.
---
src/vbox/vbox_common.c | 16 ++++++++--------
src/vbox/vbox_tmpl.c | 18 +++++++-----------
src/vbox/vbox_uniformed_api.h | 2 +-
3 files changed, 16 insertions(+), 20 deletions(-)
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index e0836ec..bc80338 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -5115,10 +5115,10 @@ vboxSnapshotRedefine(virDomainPtr dom,
if (virAsprintf(&newLocationUtf8, "%sfakedisk-%d.vdi",
machineLocationPath, it) < 0)
goto cleanup;
VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation);
- rc = gVBoxAPI.UIVirtualBox.CreateHardDiskMedium(data->vboxObj,
- formatUtf16,
- newLocation,
- &newMedium);
+ rc = gVBoxAPI.UIVirtualBox.CreateHardDisk(data->vboxObj,
+ formatUtf16,
+ newLocation,
+ &newMedium);
VBOX_UTF16_FREE(newLocation);
VBOX_UTF16_FREE(formatUtf16);
if (NS_FAILED(rc)) {
@@ -6877,10 +6877,10 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapshotPtr
snapshot)
machineLocationPath, def->parent, it) < 0)
goto cleanup;
VBOX_UTF8_TO_UTF16(newLocationUtf8, &newLocation);
- rc = gVBoxAPI.UIVirtualBox.CreateHardDiskMedium(data->vboxObj,
- formatUtf16,
- newLocation,
- &newMedium);
+ rc = gVBoxAPI.UIVirtualBox.CreateHardDisk(data->vboxObj,
+ formatUtf16,
+ newLocation,
+ &newMedium);
if (NS_FAILED(rc)) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unable to create HardDisk, rc=%08x"),
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 224c896..c6f027e 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -3456,17 +3456,13 @@ _virtualboxCreateMachine(vboxGlobalData *data, virDomainDefPtr
def, IMachine **m
}
static nsresult
-_virtualboxCreateHardDiskMedium(IVirtualBox *vboxObj ATTRIBUTE_UNUSED,
- PRUnichar *format ATTRIBUTE_UNUSED,
- PRUnichar *location ATTRIBUTE_UNUSED,
- IMedium **medium ATTRIBUTE_UNUSED)
+_virtualboxCreateHardDisk(IVirtualBox *vboxObj, PRUnichar *format,
+ PRUnichar *location, IHardDisk **hardDisk)
{
-#if VBOX_API_VERSION < 3001000
- vboxUnsupported();
- return 0;
-#else /* VBOX_API_VERSION >= 3001000 */
- return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, medium);
-#endif /* VBOX_API_VERSION >= 3001000 */
+ /* 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.
+ */
+ return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, hardDisk);
}
static nsresult
@@ -5209,7 +5205,7 @@ static vboxUniformedIVirtualBox _UIVirtualBox = {
.GetSystemProperties = _virtualboxGetSystemProperties,
.GetHost = _virtualboxGetHost,
.CreateMachine = _virtualboxCreateMachine,
- .CreateHardDiskMedium = _virtualboxCreateHardDiskMedium,
+ .CreateHardDisk = _virtualboxCreateHardDisk,
.RegisterMachine = _virtualboxRegisterMachine,
.FindHardDisk = _virtualboxFindHardDisk,
.OpenMedium = _virtualboxOpenMedium,
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index f3650e5..39d5d98 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -194,7 +194,7 @@ typedef struct {
nsresult (*GetSystemProperties)(IVirtualBox *vboxObj, ISystemProperties
**systemProperties);
nsresult (*GetHost)(IVirtualBox *vboxObj, IHost **host);
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 (*FindHardDisk)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32
deviceType,
PRUint32 accessMode, IHardDisk **hardDisk);
--
1.7.9.5