---
src/vbox/vbox_tmpl.c | 90 ++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 80 insertions(+), 10 deletions(-)
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 29b776d..a80a956 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -72,6 +72,8 @@
# include "vbox_CAPI_v4_0.h"
#elif VBOX_API_VERSION == 4001
# include "vbox_CAPI_v4_1.h"
+#elif VBOX_API_VERSION == 4002
+# include "vbox_CAPI_v4_2.h"
#else
# error "Unsupport VBOX_API_VERSION"
#endif
@@ -4177,9 +4179,12 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data,
IMachine *machine)
continue;
}
-# if VBOX_API_VERSION >= 4000
+# if VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
data->vboxObj->vtbl->FindMedium(data->vboxObj, mediumFileUtf16,
deviceType, &medium);
+# elif VBOX_API_VERSION >= 4002
+ data->vboxObj->vtbl->OpenMedium(data->vboxObj, mediumFileUtf16,
+ deviceType, accessMode, PR_FALSE,
&medium);
# endif
if (!medium) {
@@ -4933,7 +4938,11 @@ vboxAttachUSB(virDomainDefPtr def, vboxGlobalData *data, IMachine
*machine)
machine->vtbl->GetUSBController(machine, &USBController);
if (USBController) {
USBController->vtbl->SetEnabled(USBController, 1);
+#if VBOX_API_VERSION < 4002
USBController->vtbl->SetEnabledEhci(USBController, 1);
+#else
+ USBController->vtbl->SetEnabledEHCI(USBController, 1);
+#endif
for (i = 0; i < def->nhostdevs; i++) {
if (def->hostdevs[i]->mode ==
@@ -5038,10 +5047,18 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const
char *xml) {
vboxIID mchiid = VBOX_IID_INITIALIZER;
virDomainDefPtr def = NULL;
PRUnichar *machineNameUtf16 = NULL;
-#if VBOX_API_VERSION >= 3002
+#if VBOX_API_VERSION >= 3002 && VBOX_API_VERSION < 4002
PRBool override = PR_FALSE;
#endif
nsresult rc;
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+#if VBOX_API_VERSION >= 4002
+ const char *flagsUUIDPrefix = "UUID=";
+ const char *flagsForceOverwrite = "forceOverwrite=0";
+ const char *flagsSeparator = ",";
+ char createFlags[strlen(flagsUUIDPrefix) + VIR_UUID_STRING_BUFLEN +
strlen(flagsSeparator) + strlen(flagsForceOverwrite) + 1];
+ PRUnichar *createFlagsUtf16 = NULL;
+#endif
if (!(def = virDomainDefParseString(data->caps, xml,
1 << VIR_DOMAIN_VIRT_VBOX,
@@ -5051,6 +5068,8 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const
char *xml) {
VBOX_UTF8_TO_UTF16(def->name, &machineNameUtf16);
vboxIIDFromUUID(&iid, def->uuid);
+ virUUIDFormat(def->uuid, uuidstr);
+
#if VBOX_API_VERSION < 3002
rc = data->vboxObj->vtbl->CreateMachine(data->vboxObj,
machineNameUtf16,
@@ -5066,7 +5085,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const
char *xml) {
iid.value,
override,
&machine);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->CreateMachine(data->vboxObj,
NULL,
machineNameUtf16,
@@ -5074,7 +5093,23 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const
char *xml) {
iid.value,
override,
&machine);
-#endif /* VBOX_API_VERSION >= 4000 */
+#else /* VBOX_API_VERSION >= 4002 */
+ snprintf(createFlags, sizeof(createFlags), "%s%s%s%s",
+ flagsUUIDPrefix,
+ uuidstr,
+ flagsSeparator,
+ flagsForceOverwrite
+ );
+ VBOX_UTF8_TO_UTF16(createFlags, &createFlagsUtf16);
+ rc = data->vboxObj->vtbl->CreateMachine(data->vboxObj,
+ NULL,
+ machineNameUtf16,
+ 0,
+ nsnull,
+ nsnull,
+ createFlagsUtf16,
+ &machine);
+#endif /* VBOX_API_VERSION >= 4002 */
VBOX_UTF16_FREE(machineNameUtf16);
if (NS_FAILED(rc)) {
@@ -7873,15 +7908,26 @@ static virNetworkPtr vboxNetworkDefineCreateXML(virConnectPtr
conn, const char *
* IP and enables the interface so even if the dhcpserver is not
* started the interface is still up and running
*/
+#if VBOX_API_VERSION < 4002
networkInterface->vtbl->EnableStaticIpConfig(networkInterface,
ipAddressUtf16,
networkMaskUtf16);
+#else
+ networkInterface->vtbl->EnableStaticIPConfig(networkInterface,
+ ipAddressUtf16,
+ networkMaskUtf16);
+#endif
VBOX_UTF16_FREE(ipAddressUtf16);
VBOX_UTF16_FREE(networkMaskUtf16);
} else {
+#if VBOX_API_VERSION < 4002
networkInterface->vtbl->EnableDynamicIpConfig(networkInterface);
networkInterface->vtbl->DhcpRediscover(networkInterface);
+#else
+ networkInterface->vtbl->EnableDynamicIPConfig(networkInterface);
+ networkInterface->vtbl->DHCPRediscover(networkInterface);
+#endif
}
rc = networkInterface->vtbl->GetId(networkInterface,
&vboxnetiid.value);
@@ -8491,9 +8537,13 @@ static virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr
conn, const char
vboxIIDFromUUID(&hddIID, uuid);
#if VBOX_API_VERSION < 4000
rc = data->vboxObj->vtbl->GetHardDisk(data->vboxObj, hddIID.value,
&hardDisk);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->FindMedium(data->vboxObj, hddIID.value,
DeviceType_HardDisk, &hardDisk);
+#else
+ rc = data->vboxObj->vtbl->OpenMedium(data->vboxObj, hddIID.value,
+ DeviceType_HardDisk, AccessMode_ReadWrite,
+ PR_FALSE, &hardDisk);
#endif /* VBOX_API_VERSION >= 4000 */
if (NS_SUCCEEDED(rc)) {
PRUint32 hddstate;
@@ -8547,9 +8597,13 @@ static virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr
conn, const cha
#if VBOX_API_VERSION < 4000
rc = data->vboxObj->vtbl->FindHardDisk(data->vboxObj, hddPathUtf16,
&hardDisk);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->FindMedium(data->vboxObj, hddPathUtf16,
DeviceType_HardDisk, &hardDisk);
+#else
+ rc = data->vboxObj->vtbl->OpenMedium(data->vboxObj, hddPathUtf16,
+ DeviceType_HardDisk, AccessMode_ReadWrite,
+ PR_FALSE, &hardDisk);
#endif /* VBOX_API_VERSION >= 4000 */
if (NS_SUCCEEDED(rc)) {
PRUint32 hddstate;
@@ -8722,9 +8776,13 @@ static int vboxStorageVolDelete(virStorageVolPtr vol,
vboxIIDFromUUID(&hddIID, uuid);
#if VBOX_API_VERSION < 4000
rc = data->vboxObj->vtbl->GetHardDisk(data->vboxObj, hddIID.value,
&hardDisk);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->FindMedium(data->vboxObj, hddIID.value,
DeviceType_HardDisk, &hardDisk);
+#else
+ rc = data->vboxObj->vtbl->OpenMedium(data->vboxObj, hddIID.value,
+ DeviceType_HardDisk, AccessMode_ReadWrite,
+ PR_FALSE, &hardDisk);
#endif /* VBOX_API_VERSION >= 4000 */
if (NS_SUCCEEDED(rc)) {
PRUint32 hddstate;
@@ -8891,9 +8949,13 @@ static int vboxStorageVolGetInfo(virStorageVolPtr vol,
virStorageVolInfoPtr info
vboxIIDFromUUID(&hddIID, uuid);
#if VBOX_API_VERSION < 4000
rc = data->vboxObj->vtbl->GetHardDisk(data->vboxObj, hddIID.value,
&hardDisk);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->FindMedium(data->vboxObj, hddIID.value,
DeviceType_HardDisk, &hardDisk);
+#else
+ rc = data->vboxObj->vtbl->OpenMedium(data->vboxObj, hddIID.value,
+ DeviceType_HardDisk, AccessMode_ReadWrite,
+ PR_FALSE, &hardDisk);
#endif /* VBOX_API_VERSION >= 4000 */
if (NS_SUCCEEDED(rc)) {
PRUint32 hddstate;
@@ -8961,9 +9023,13 @@ static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol,
unsigned int flags)
vboxIIDFromUUID(&hddIID, uuid);
#if VBOX_API_VERSION < 4000
rc = data->vboxObj->vtbl->GetHardDisk(data->vboxObj, hddIID.value,
&hardDisk);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->FindMedium(data->vboxObj, hddIID.value,
DeviceType_HardDisk, &hardDisk);
+#else
+ rc = data->vboxObj->vtbl->OpenMedium(data->vboxObj, hddIID.value,
+ DeviceType_HardDisk, AccessMode_ReadWrite,
+ PR_FALSE, &hardDisk);
#endif /* VBOX_API_VERSION >= 4000 */
if (NS_SUCCEEDED(rc)) {
PRUint32 hddstate;
@@ -9068,9 +9134,13 @@ static char *vboxStorageVolGetPath(virStorageVolPtr vol) {
vboxIIDFromUUID(&hddIID, uuid);
#if VBOX_API_VERSION < 4000
rc = data->vboxObj->vtbl->GetHardDisk(data->vboxObj, hddIID.value,
&hardDisk);
-#else /* VBOX_API_VERSION >= 4000 */
+#elif VBOX_API_VERSION >= 4000 && VBOX_API_VERSION < 4002
rc = data->vboxObj->vtbl->FindMedium(data->vboxObj, hddIID.value,
DeviceType_HardDisk, &hardDisk);
+#else
+ rc = data->vboxObj->vtbl->OpenMedium(data->vboxObj, hddIID.value,
+ DeviceType_HardDisk, AccessMode_ReadWrite,
+ PR_FALSE, &hardDisk);
#endif /* VBOX_API_VERSION >= 4000 */
if (NS_SUCCEEDED(rc)) {
PRUint32 hddstate;
--
1.7.1