mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
conf: use disk source accessors in vbox/
Part of a series of cleanups to use new accessor methods. * src/vbox/vbox_tmpl.c (vboxDomainGetXMLDesc, vboxAttachDrives) (vboxDomainAttachDeviceImpl, vboxDomainDetachDevice): Use accessors. Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
8082d9bbda
commit
6c1eb0847f
@ -2771,7 +2771,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
|
|||||||
if (VIR_ALLOC(def->disks[i]) >= 0) {
|
if (VIR_ALLOC(def->disks[i]) >= 0) {
|
||||||
def->disks[i]->device = VIR_DOMAIN_DISK_DEVICE_DISK;
|
def->disks[i]->device = VIR_DOMAIN_DISK_DEVICE_DISK;
|
||||||
def->disks[i]->bus = VIR_DOMAIN_DISK_BUS_IDE;
|
def->disks[i]->bus = VIR_DOMAIN_DISK_BUS_IDE;
|
||||||
def->disks[i]->type = VIR_DOMAIN_DISK_TYPE_FILE;
|
virDomainDiskSetType(def->disks[i],
|
||||||
|
VIR_DOMAIN_DISK_TYPE_FILE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2788,7 +2789,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
|
|||||||
|
|
||||||
if (hddType == HardDiskType_Immutable)
|
if (hddType == HardDiskType_Immutable)
|
||||||
def->disks[hddNum]->readonly = true;
|
def->disks[hddNum]->readonly = true;
|
||||||
ignore_value(VIR_STRDUP(def->disks[hddNum]->src, hddlocation));
|
ignore_value(virDomainDiskSetSource(def->disks[hddNum],
|
||||||
|
hddlocation));
|
||||||
ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hda"));
|
ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hda"));
|
||||||
hddNum++;
|
hddNum++;
|
||||||
|
|
||||||
@ -2809,7 +2811,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
|
|||||||
|
|
||||||
if (hddType == HardDiskType_Immutable)
|
if (hddType == HardDiskType_Immutable)
|
||||||
def->disks[hddNum]->readonly = true;
|
def->disks[hddNum]->readonly = true;
|
||||||
ignore_value(VIR_STRDUP(def->disks[hddNum]->src, hddlocation));
|
ignore_value(virDomainDiskSetSource(def->disks[hddNum],
|
||||||
|
hddlocation));
|
||||||
ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hdb"));
|
ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hdb"));
|
||||||
hddNum++;
|
hddNum++;
|
||||||
|
|
||||||
@ -2830,7 +2833,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
|
|||||||
|
|
||||||
if (hddType == HardDiskType_Immutable)
|
if (hddType == HardDiskType_Immutable)
|
||||||
def->disks[hddNum]->readonly = true;
|
def->disks[hddNum]->readonly = true;
|
||||||
ignore_value(VIR_STRDUP(def->disks[hddNum]->src, hddlocation));
|
ignore_value(virDomainDiskSetSource(def->disks[hddNum],
|
||||||
|
hddlocation));
|
||||||
ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hdd"));
|
ignore_value(VIR_STRDUP(def->disks[hddNum]->dst, "hdd"));
|
||||||
hddNum++;
|
hddNum++;
|
||||||
|
|
||||||
@ -2917,10 +2921,11 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
|
|||||||
medium->vtbl->GetLocation(medium, &mediumLocUtf16);
|
medium->vtbl->GetLocation(medium, &mediumLocUtf16);
|
||||||
VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8);
|
VBOX_UTF16_TO_UTF8(mediumLocUtf16, &mediumLocUtf8);
|
||||||
VBOX_UTF16_FREE(mediumLocUtf16);
|
VBOX_UTF16_FREE(mediumLocUtf16);
|
||||||
ignore_value(VIR_STRDUP(def->disks[diskCount]->src, mediumLocUtf8));
|
ignore_value(virDomainDiskSetSource(def->disks[diskCount],
|
||||||
|
mediumLocUtf8));
|
||||||
VBOX_UTF8_FREE(mediumLocUtf8);
|
VBOX_UTF8_FREE(mediumLocUtf8);
|
||||||
|
|
||||||
if (!(def->disks[diskCount]->src)) {
|
if (!virDomainDiskGetSource(def->disks[diskCount])) {
|
||||||
VBOX_RELEASE(medium);
|
VBOX_RELEASE(medium);
|
||||||
VBOX_RELEASE(storageController);
|
VBOX_RELEASE(storageController);
|
||||||
error = true;
|
error = true;
|
||||||
@ -2969,7 +2974,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
|
|||||||
if (readOnly == PR_TRUE)
|
if (readOnly == PR_TRUE)
|
||||||
def->disks[diskCount]->readonly = true;
|
def->disks[diskCount]->readonly = true;
|
||||||
|
|
||||||
def->disks[diskCount]->type = VIR_DOMAIN_DISK_TYPE_FILE;
|
virDomainDiskSetType(def->disks[diskCount],
|
||||||
|
VIR_DOMAIN_DISK_TYPE_FILE);
|
||||||
|
|
||||||
VBOX_RELEASE(medium);
|
VBOX_RELEASE(medium);
|
||||||
VBOX_RELEASE(storageController);
|
VBOX_RELEASE(storageController);
|
||||||
@ -3244,9 +3250,10 @@ sharedFoldersCleanup:
|
|||||||
if (VIR_ALLOC(def->disks[def->ndisks - 1]) >= 0) {
|
if (VIR_ALLOC(def->disks[def->ndisks - 1]) >= 0) {
|
||||||
def->disks[def->ndisks - 1]->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
|
def->disks[def->ndisks - 1]->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
|
||||||
def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_IDE;
|
def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_IDE;
|
||||||
def->disks[def->ndisks - 1]->type = VIR_DOMAIN_DISK_TYPE_FILE;
|
virDomainDiskSetType(def->disks[def->ndisks - 1],
|
||||||
|
VIR_DOMAIN_DISK_TYPE_FILE);
|
||||||
def->disks[def->ndisks - 1]->readonly = true;
|
def->disks[def->ndisks - 1]->readonly = true;
|
||||||
ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->src, location));
|
ignore_value(virDomainDiskSetSource(def->disks[def->ndisks - 1], location));
|
||||||
ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->dst, "hdc"));
|
ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->dst, "hdc"));
|
||||||
def->ndisks--;
|
def->ndisks--;
|
||||||
} else {
|
} else {
|
||||||
@ -3290,9 +3297,10 @@ sharedFoldersCleanup:
|
|||||||
if (VIR_ALLOC(def->disks[def->ndisks - 1]) >= 0) {
|
if (VIR_ALLOC(def->disks[def->ndisks - 1]) >= 0) {
|
||||||
def->disks[def->ndisks - 1]->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
|
def->disks[def->ndisks - 1]->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
|
||||||
def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_FDC;
|
def->disks[def->ndisks - 1]->bus = VIR_DOMAIN_DISK_BUS_FDC;
|
||||||
def->disks[def->ndisks - 1]->type = VIR_DOMAIN_DISK_TYPE_FILE;
|
virDomainDiskSetType(def->disks[def->ndisks - 1],
|
||||||
|
VIR_DOMAIN_DISK_TYPE_FILE);
|
||||||
def->disks[def->ndisks - 1]->readonly = false;
|
def->disks[def->ndisks - 1]->readonly = false;
|
||||||
ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->src, location));
|
ignore_value(virDomainDiskSetSource(def->disks[def->ndisks - 1], location));
|
||||||
ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->dst, "fda"));
|
ignore_value(VIR_STRDUP(def->disks[def->ndisks - 1]->dst, "fda"));
|
||||||
def->ndisks--;
|
def->ndisks--;
|
||||||
} else {
|
} else {
|
||||||
@ -3883,14 +3891,19 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < def->ndisks; i++) {
|
for (i = 0; i < def->ndisks; i++) {
|
||||||
VIR_DEBUG("disk(%zu) type: %d", i, def->disks[i]->type);
|
const char *src = virDomainDiskGetSource(def->disks[i]);
|
||||||
|
int type = virDomainDiskGetType(def->disks[i]);
|
||||||
|
int format = virDomainDiskGetFormat(def->disks[i]);
|
||||||
|
|
||||||
|
VIR_DEBUG("disk(%zu) type: %d", i, type);
|
||||||
VIR_DEBUG("disk(%zu) device: %d", i, def->disks[i]->device);
|
VIR_DEBUG("disk(%zu) device: %d", i, def->disks[i]->device);
|
||||||
VIR_DEBUG("disk(%zu) bus: %d", i, def->disks[i]->bus);
|
VIR_DEBUG("disk(%zu) bus: %d", i, def->disks[i]->bus);
|
||||||
VIR_DEBUG("disk(%zu) src: %s", i, def->disks[i]->src);
|
VIR_DEBUG("disk(%zu) src: %s", i, src);
|
||||||
VIR_DEBUG("disk(%zu) dst: %s", i, def->disks[i]->dst);
|
VIR_DEBUG("disk(%zu) dst: %s", i, def->disks[i]->dst);
|
||||||
VIR_DEBUG("disk(%zu) driverName: %s", i, def->disks[i]->driverName);
|
VIR_DEBUG("disk(%zu) driverName: %s", i,
|
||||||
|
virDomainDiskGetDriver(def->disks[i]));
|
||||||
VIR_DEBUG("disk(%zu) driverType: %s", i,
|
VIR_DEBUG("disk(%zu) driverType: %s", i,
|
||||||
virStorageFileFormatTypeToString(def->disks[i]->format));
|
virStorageFileFormatTypeToString(format));
|
||||||
VIR_DEBUG("disk(%zu) cachemode: %d", i, def->disks[i]->cachemode);
|
VIR_DEBUG("disk(%zu) cachemode: %d", i, def->disks[i]->cachemode);
|
||||||
VIR_DEBUG("disk(%zu) readonly: %s", i, (def->disks[i]->readonly
|
VIR_DEBUG("disk(%zu) readonly: %s", i, (def->disks[i]->readonly
|
||||||
? "True" : "False"));
|
? "True" : "False"));
|
||||||
@ -3898,8 +3911,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
? "True" : "False"));
|
? "True" : "False"));
|
||||||
|
|
||||||
if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
|
if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
|
||||||
if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_FILE &&
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE && src) {
|
||||||
def->disks[i]->src != NULL) {
|
|
||||||
IDVDDrive *dvdDrive = NULL;
|
IDVDDrive *dvdDrive = NULL;
|
||||||
/* Currently CDROM/DVD Drive is always IDE
|
/* Currently CDROM/DVD Drive is always IDE
|
||||||
* Secondary Master so neglecting the following
|
* Secondary Master so neglecting the following
|
||||||
@ -3915,7 +3927,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
vboxIID dvduuid = VBOX_IID_INITIALIZER;
|
vboxIID dvduuid = VBOX_IID_INITIALIZER;
|
||||||
vboxIID dvdemptyuuid = VBOX_IID_INITIALIZER;
|
vboxIID dvdemptyuuid = VBOX_IID_INITIALIZER;
|
||||||
|
|
||||||
VBOX_UTF8_TO_UTF16(def->disks[i]->src, &dvdfileUtf16);
|
VBOX_UTF8_TO_UTF16(src, &dvdfileUtf16);
|
||||||
|
|
||||||
data->vboxObj->vtbl->FindDVDImage(data->vboxObj,
|
data->vboxObj->vtbl->FindDVDImage(data->vboxObj,
|
||||||
dvdfileUtf16, &dvdImage);
|
dvdfileUtf16, &dvdImage);
|
||||||
@ -3932,13 +3944,13 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("can't get the uuid of the file to "
|
_("can't get the uuid of the file to "
|
||||||
"be attached to cdrom: %s, rc=%08x"),
|
"be attached to cdrom: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
rc = dvdDrive->vtbl->MountImage(dvdDrive, dvduuid.value);
|
rc = dvdDrive->vtbl->MountImage(dvdDrive, dvduuid.value);
|
||||||
if (NS_FAILED(rc)) {
|
if (NS_FAILED(rc)) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("could not attach the file to cdrom: %s, rc=%08x"),
|
_("could not attach the file to cdrom: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
DEBUGIID("CD/DVDImage UUID:", dvduuid.value);
|
DEBUGIID("CD/DVDImage UUID:", dvduuid.value);
|
||||||
}
|
}
|
||||||
@ -3950,11 +3962,10 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
VBOX_UTF16_FREE(dvdfileUtf16);
|
VBOX_UTF16_FREE(dvdfileUtf16);
|
||||||
VBOX_RELEASE(dvdDrive);
|
VBOX_RELEASE(dvdDrive);
|
||||||
}
|
}
|
||||||
} else if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
} else if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
} else if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||||
if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_FILE &&
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE && src) {
|
||||||
def->disks[i]->src != NULL) {
|
|
||||||
IHardDisk *hardDisk = NULL;
|
IHardDisk *hardDisk = NULL;
|
||||||
PRUnichar *hddfileUtf16 = NULL;
|
PRUnichar *hddfileUtf16 = NULL;
|
||||||
vboxIID hdduuid = VBOX_IID_INITIALIZER;
|
vboxIID hdduuid = VBOX_IID_INITIALIZER;
|
||||||
@ -3965,7 +3976,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
* is requested to be connected to Secondary master
|
* is requested to be connected to Secondary master
|
||||||
*/
|
*/
|
||||||
|
|
||||||
VBOX_UTF8_TO_UTF16(def->disks[i]->src, &hddfileUtf16);
|
VBOX_UTF8_TO_UTF16(src, &hddfileUtf16);
|
||||||
VBOX_UTF8_TO_UTF16("", &hddEmpty);
|
VBOX_UTF8_TO_UTF16("", &hddEmpty);
|
||||||
|
|
||||||
data->vboxObj->vtbl->FindHardDisk(data->vboxObj, hddfileUtf16,
|
data->vboxObj->vtbl->FindHardDisk(data->vboxObj, hddfileUtf16,
|
||||||
@ -3996,7 +4007,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("can't get the uuid of the file to be "
|
_("can't get the uuid of the file to be "
|
||||||
"attached as harddisk: %s, rc=%08x"),
|
"attached as harddisk: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
if (def->disks[i]->readonly) {
|
if (def->disks[i]->readonly) {
|
||||||
hardDisk->vtbl->SetType(hardDisk,
|
hardDisk->vtbl->SetType(hardDisk,
|
||||||
@ -4043,7 +4054,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("could not attach the file as "
|
_("could not attach the file as "
|
||||||
"harddisk: %s, rc=%08x"),
|
"harddisk: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
DEBUGIID("Attached HDD with UUID", hdduuid.value);
|
DEBUGIID("Attached HDD with UUID", hdduuid.value);
|
||||||
}
|
}
|
||||||
@ -4055,11 +4066,10 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
vboxIIDUnalloc(&hdduuid);
|
vboxIIDUnalloc(&hdduuid);
|
||||||
VBOX_UTF16_FREE(hddEmpty);
|
VBOX_UTF16_FREE(hddEmpty);
|
||||||
VBOX_UTF16_FREE(hddfileUtf16);
|
VBOX_UTF16_FREE(hddfileUtf16);
|
||||||
} else if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
} else if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
} else if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
||||||
if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_FILE &&
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE && src) {
|
||||||
def->disks[i]->src != NULL) {
|
|
||||||
IFloppyDrive *floppyDrive;
|
IFloppyDrive *floppyDrive;
|
||||||
machine->vtbl->GetFloppyDrive(machine, &floppyDrive);
|
machine->vtbl->GetFloppyDrive(machine, &floppyDrive);
|
||||||
if (floppyDrive) {
|
if (floppyDrive) {
|
||||||
@ -4070,7 +4080,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
vboxIID fduuid = VBOX_IID_INITIALIZER;
|
vboxIID fduuid = VBOX_IID_INITIALIZER;
|
||||||
vboxIID fdemptyuuid = VBOX_IID_INITIALIZER;
|
vboxIID fdemptyuuid = VBOX_IID_INITIALIZER;
|
||||||
|
|
||||||
VBOX_UTF8_TO_UTF16(def->disks[i]->src, &fdfileUtf16);
|
VBOX_UTF8_TO_UTF16(src, &fdfileUtf16);
|
||||||
rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj,
|
rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj,
|
||||||
fdfileUtf16,
|
fdfileUtf16,
|
||||||
&floppyImage);
|
&floppyImage);
|
||||||
@ -4089,7 +4099,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("can't get the uuid of the file to "
|
_("can't get the uuid of the file to "
|
||||||
"be attached to floppy drive: %s, rc=%08x"),
|
"be attached to floppy drive: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
rc = floppyDrive->vtbl->MountImage(floppyDrive,
|
rc = floppyDrive->vtbl->MountImage(floppyDrive,
|
||||||
fduuid.value);
|
fduuid.value);
|
||||||
@ -4097,7 +4107,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("could not attach the file to "
|
_("could not attach the file to "
|
||||||
"floppy drive: %s, rc=%08x"),
|
"floppy drive: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
DEBUGIID("floppyImage UUID", fduuid.value);
|
DEBUGIID("floppyImage UUID", fduuid.value);
|
||||||
}
|
}
|
||||||
@ -4109,7 +4119,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
}
|
}
|
||||||
VBOX_RELEASE(floppyDrive);
|
VBOX_RELEASE(floppyDrive);
|
||||||
}
|
}
|
||||||
} else if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4164,22 +4174,26 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < def->ndisks && !error; i++) {
|
for (i = 0; i < def->ndisks && !error; i++) {
|
||||||
VIR_DEBUG("disk(%zu) type: %d", i, def->disks[i]->type);
|
const char *src = virDomainDiskGetSource(def->disks[i]);
|
||||||
|
int type = virDomainDiskGetType(def->disks[i]);
|
||||||
|
int format = virDomainDiskGetFormat(def->disks[i]);
|
||||||
|
|
||||||
|
VIR_DEBUG("disk(%zu) type: %d", i, type);
|
||||||
VIR_DEBUG("disk(%zu) device: %d", i, def->disks[i]->device);
|
VIR_DEBUG("disk(%zu) device: %d", i, def->disks[i]->device);
|
||||||
VIR_DEBUG("disk(%zu) bus: %d", i, def->disks[i]->bus);
|
VIR_DEBUG("disk(%zu) bus: %d", i, def->disks[i]->bus);
|
||||||
VIR_DEBUG("disk(%zu) src: %s", i, def->disks[i]->src);
|
VIR_DEBUG("disk(%zu) src: %s", i, src);
|
||||||
VIR_DEBUG("disk(%zu) dst: %s", i, def->disks[i]->dst);
|
VIR_DEBUG("disk(%zu) dst: %s", i, def->disks[i]->dst);
|
||||||
VIR_DEBUG("disk(%zu) driverName: %s", i, def->disks[i]->driverName);
|
VIR_DEBUG("disk(%zu) driverName: %s", i,
|
||||||
|
virDomainDiskGetDriver(def->disks[i]));
|
||||||
VIR_DEBUG("disk(%zu) driverType: %s", i,
|
VIR_DEBUG("disk(%zu) driverType: %s", i,
|
||||||
virStorageFileFormatTypeToString(def->disks[i]->format));
|
virStorageFileFormatTypeToString(format));
|
||||||
VIR_DEBUG("disk(%zu) cachemode: %d", i, def->disks[i]->cachemode);
|
VIR_DEBUG("disk(%zu) cachemode: %d", i, def->disks[i]->cachemode);
|
||||||
VIR_DEBUG("disk(%zu) readonly: %s", i, (def->disks[i]->readonly
|
VIR_DEBUG("disk(%zu) readonly: %s", i, (def->disks[i]->readonly
|
||||||
? "True" : "False"));
|
? "True" : "False"));
|
||||||
VIR_DEBUG("disk(%zu) shared: %s", i, (def->disks[i]->shared
|
VIR_DEBUG("disk(%zu) shared: %s", i, (def->disks[i]->shared
|
||||||
? "True" : "False"));
|
? "True" : "False"));
|
||||||
|
|
||||||
if (def->disks[i]->type == VIR_DOMAIN_DISK_TYPE_FILE &&
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE && src) {
|
||||||
def->disks[i]->src != NULL) {
|
|
||||||
IMedium *medium = NULL;
|
IMedium *medium = NULL;
|
||||||
PRUnichar *mediumUUID = NULL;
|
PRUnichar *mediumUUID = NULL;
|
||||||
PRUnichar *mediumFileUtf16 = NULL;
|
PRUnichar *mediumFileUtf16 = NULL;
|
||||||
@ -4192,7 +4206,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
PRInt32 devicePort = 0;
|
PRInt32 devicePort = 0;
|
||||||
PRInt32 deviceSlot = 0;
|
PRInt32 deviceSlot = 0;
|
||||||
|
|
||||||
VBOX_UTF8_TO_UTF16(def->disks[i]->src, &mediumFileUtf16);
|
VBOX_UTF8_TO_UTF16(src, &mediumFileUtf16);
|
||||||
|
|
||||||
if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||||
deviceType = DeviceType_HardDisk;
|
deviceType = DeviceType_HardDisk;
|
||||||
@ -4281,7 +4295,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("Failed to attach the following disk/dvd/floppy "
|
_("Failed to attach the following disk/dvd/floppy "
|
||||||
"to the machine: %s, rc=%08x"),
|
"to the machine: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
VBOX_UTF16_FREE(mediumFileUtf16);
|
VBOX_UTF16_FREE(mediumFileUtf16);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -4291,7 +4305,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("can't get the uuid of the file to be attached "
|
_("can't get the uuid of the file to be attached "
|
||||||
"as harddisk/dvd/floppy: %s, rc=%08x"),
|
"as harddisk/dvd/floppy: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
VBOX_RELEASE(medium);
|
VBOX_RELEASE(medium);
|
||||||
VBOX_UTF16_FREE(mediumFileUtf16);
|
VBOX_UTF16_FREE(mediumFileUtf16);
|
||||||
continue;
|
continue;
|
||||||
@ -4333,7 +4347,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
_("can't get the port/slot number of "
|
_("can't get the port/slot number of "
|
||||||
"harddisk/dvd/floppy to be attached: "
|
"harddisk/dvd/floppy to be attached: "
|
||||||
"%s, rc=%08x"),
|
"%s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
VBOX_RELEASE(medium);
|
VBOX_RELEASE(medium);
|
||||||
VBOX_UTF16_FREE(mediumUUID);
|
VBOX_UTF16_FREE(mediumUUID);
|
||||||
VBOX_UTF16_FREE(mediumFileUtf16);
|
VBOX_UTF16_FREE(mediumFileUtf16);
|
||||||
@ -4356,7 +4370,7 @@ vboxAttachDrives(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("could not attach the file as "
|
_("could not attach the file as "
|
||||||
"harddisk/dvd/floppy: %s, rc=%08x"),
|
"harddisk/dvd/floppy: %s, rc=%08x"),
|
||||||
def->disks[i]->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
DEBUGIID("Attached HDD/DVD/Floppy with UUID", mediumUUID);
|
DEBUGIID("Attached HDD/DVD/Floppy with UUID", mediumUUID);
|
||||||
}
|
}
|
||||||
@ -5518,9 +5532,11 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
if (NS_SUCCEEDED(rc) && machine) {
|
if (NS_SUCCEEDED(rc) && machine) {
|
||||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||||
#if VBOX_API_VERSION < 3001000
|
#if VBOX_API_VERSION < 3001000
|
||||||
|
const char *src = virDomainDiskGetSource(dev->data.disk);
|
||||||
|
int type = virDomainDiskGetType(dev->data.disk);
|
||||||
|
|
||||||
if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
|
if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
|
||||||
if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_FILE &&
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE && src) {
|
||||||
dev->data.disk->src != NULL) {
|
|
||||||
IDVDDrive *dvdDrive = NULL;
|
IDVDDrive *dvdDrive = NULL;
|
||||||
/* Currently CDROM/DVD Drive is always IDE
|
/* Currently CDROM/DVD Drive is always IDE
|
||||||
* Secondary Master so neglecting the following
|
* Secondary Master so neglecting the following
|
||||||
@ -5533,7 +5549,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
vboxIID dvduuid = VBOX_IID_INITIALIZER;
|
vboxIID dvduuid = VBOX_IID_INITIALIZER;
|
||||||
vboxIID dvdemptyuuid = VBOX_IID_INITIALIZER;
|
vboxIID dvdemptyuuid = VBOX_IID_INITIALIZER;
|
||||||
|
|
||||||
VBOX_UTF8_TO_UTF16(dev->data.disk->src, &dvdfileUtf16);
|
VBOX_UTF8_TO_UTF16(src, &dvdfileUtf16);
|
||||||
|
|
||||||
data->vboxObj->vtbl->FindDVDImage(data->vboxObj, dvdfileUtf16, &dvdImage);
|
data->vboxObj->vtbl->FindDVDImage(data->vboxObj, dvdfileUtf16, &dvdImage);
|
||||||
if (!dvdImage) {
|
if (!dvdImage) {
|
||||||
@ -5545,7 +5561,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("can't get the uuid of the file to "
|
_("can't get the uuid of the file to "
|
||||||
"be attached to cdrom: %s, rc=%08x"),
|
"be attached to cdrom: %s, rc=%08x"),
|
||||||
dev->data.disk->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
/* unmount the previous mounted image */
|
/* unmount the previous mounted image */
|
||||||
dvdDrive->vtbl->Unmount(dvdDrive);
|
dvdDrive->vtbl->Unmount(dvdDrive);
|
||||||
@ -5553,7 +5569,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
if (NS_FAILED(rc)) {
|
if (NS_FAILED(rc)) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("could not attach the file to cdrom: %s, rc=%08x"),
|
_("could not attach the file to cdrom: %s, rc=%08x"),
|
||||||
dev->data.disk->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
DEBUGIID("CD/DVD Image UUID:", dvduuid.value);
|
DEBUGIID("CD/DVD Image UUID:", dvduuid.value);
|
||||||
@ -5566,11 +5582,10 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
VBOX_UTF16_FREE(dvdfileUtf16);
|
VBOX_UTF16_FREE(dvdfileUtf16);
|
||||||
VBOX_RELEASE(dvdDrive);
|
VBOX_RELEASE(dvdDrive);
|
||||||
}
|
}
|
||||||
} else if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
} else if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
} else if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
||||||
if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_FILE &&
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE && src) {
|
||||||
dev->data.disk->src != NULL) {
|
|
||||||
IFloppyDrive *floppyDrive;
|
IFloppyDrive *floppyDrive;
|
||||||
machine->vtbl->GetFloppyDrive(machine, &floppyDrive);
|
machine->vtbl->GetFloppyDrive(machine, &floppyDrive);
|
||||||
if (floppyDrive) {
|
if (floppyDrive) {
|
||||||
@ -5580,7 +5595,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
PRUnichar *fdfileUtf16 = NULL;
|
PRUnichar *fdfileUtf16 = NULL;
|
||||||
vboxIID fduuid = VBOX_IID_INITIALIZER;
|
vboxIID fduuid = VBOX_IID_INITIALIZER;
|
||||||
vboxIID fdemptyuuid = VBOX_IID_INITIALIZER;
|
vboxIID fdemptyuuid = VBOX_IID_INITIALIZER;
|
||||||
VBOX_UTF8_TO_UTF16(dev->data.disk->src, &fdfileUtf16);
|
VBOX_UTF8_TO_UTF16(src, &fdfileUtf16);
|
||||||
rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj,
|
rc = data->vboxObj->vtbl->FindFloppyImage(data->vboxObj,
|
||||||
fdfileUtf16,
|
fdfileUtf16,
|
||||||
&floppyImage);
|
&floppyImage);
|
||||||
@ -5598,13 +5613,13 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("can't get the uuid of the file to be "
|
_("can't get the uuid of the file to be "
|
||||||
"attached to floppy drive: %s, rc=%08x"),
|
"attached to floppy drive: %s, rc=%08x"),
|
||||||
dev->data.disk->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
rc = floppyDrive->vtbl->MountImage(floppyDrive, fduuid.value);
|
rc = floppyDrive->vtbl->MountImage(floppyDrive, fduuid.value);
|
||||||
if (NS_FAILED(rc)) {
|
if (NS_FAILED(rc)) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("could not attach the file to floppy drive: %s, rc=%08x"),
|
_("could not attach the file to floppy drive: %s, rc=%08x"),
|
||||||
dev->data.disk->src, (unsigned)rc);
|
src, (unsigned)rc);
|
||||||
} else {
|
} else {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
DEBUGIID("attached floppy, UUID:", fduuid.value);
|
DEBUGIID("attached floppy, UUID:", fduuid.value);
|
||||||
@ -5617,7 +5632,7 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
|
|||||||
}
|
}
|
||||||
VBOX_RELEASE(floppyDrive);
|
VBOX_RELEASE(floppyDrive);
|
||||||
}
|
}
|
||||||
} else if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* VBOX_API_VERSION >= 3001000 */
|
#else /* VBOX_API_VERSION >= 3001000 */
|
||||||
@ -5751,8 +5766,10 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml)
|
|||||||
if (NS_SUCCEEDED(rc) && machine) {
|
if (NS_SUCCEEDED(rc) && machine) {
|
||||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||||
#if VBOX_API_VERSION < 3001000
|
#if VBOX_API_VERSION < 3001000
|
||||||
|
int type = virDomainDiskGetType(dev->data.disk);
|
||||||
|
|
||||||
if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
|
if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
|
||||||
if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_FILE) {
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE) {
|
||||||
IDVDDrive *dvdDrive = NULL;
|
IDVDDrive *dvdDrive = NULL;
|
||||||
/* Currently CDROM/DVD Drive is always IDE
|
/* Currently CDROM/DVD Drive is always IDE
|
||||||
* Secondary Master so neglecting the following
|
* Secondary Master so neglecting the following
|
||||||
@ -5770,10 +5787,10 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml)
|
|||||||
}
|
}
|
||||||
VBOX_RELEASE(dvdDrive);
|
VBOX_RELEASE(dvdDrive);
|
||||||
}
|
}
|
||||||
} else if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
} else if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
} else if (dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
||||||
if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_FILE) {
|
if (type == VIR_DOMAIN_DISK_TYPE_FILE) {
|
||||||
IFloppyDrive *floppyDrive;
|
IFloppyDrive *floppyDrive;
|
||||||
machine->vtbl->GetFloppyDrive(machine, &floppyDrive);
|
machine->vtbl->GetFloppyDrive(machine, &floppyDrive);
|
||||||
if (floppyDrive) {
|
if (floppyDrive) {
|
||||||
@ -5798,7 +5815,7 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml)
|
|||||||
}
|
}
|
||||||
VBOX_RELEASE(floppyDrive);
|
VBOX_RELEASE(floppyDrive);
|
||||||
}
|
}
|
||||||
} else if (dev->data.disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
} else if (type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* VBOX_API_VERSION >= 3001000 */
|
#else /* VBOX_API_VERSION >= 3001000 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user