return 0;
}
-void
+virDomainHostdevDefPtr
virDomainHostdevRemove(virDomainDefPtr def, size_t i)
{
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
+
if (def->nhostdevs > 1) {
memmove(def->hostdevs + i,
def->hostdevs + i + 1,
VIR_FREE(def->hostdevs);
def->nhostdevs = 0;
}
+ return hostdev;
}
/* Find an entry in hostdevs that matches the source spec in
}
-void virDomainDiskRemove(virDomainDefPtr def, size_t i)
+virDomainDiskDefPtr
+virDomainDiskRemove(virDomainDefPtr def, size_t i)
{
+ virDomainDiskDefPtr disk = disk = def->disks[i];
+
if (def->ndisks > 1) {
memmove(def->disks + i,
def->disks + i + 1,
VIR_FREE(def->disks);
def->ndisks = 0;
}
+ return disk;
}
-int virDomainDiskRemoveByName(virDomainDefPtr def, const char *name)
+virDomainDiskDefPtr
+virDomainDiskRemoveByName(virDomainDefPtr def, const char *name)
{
int i = virDomainDiskIndexByName(def, name, false);
if (i < 0)
- return -1;
- virDomainDiskRemove(def, i);
- return 0;
+ return NULL;
+ return virDomainDiskRemove(def, i);
}
int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net)
return -1;
}
-void virDomainNetRemove(virDomainDefPtr def, size_t i)
+virDomainNetDefPtr
+virDomainNetRemove(virDomainDefPtr def, size_t i)
{
virDomainNetDefPtr net = def->nets[i];
VIR_FREE(def->nets);
def->nnets = 0;
}
+ return net;
}
-int virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac)
+virDomainNetDefPtr
+virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac)
{
int i = virDomainNetIndexByMac(def, mac);
if (i < 0)
- return -1;
- virDomainNetRemove(def, i);
- return 0;
+ return NULL;
+ return virDomainNetRemove(def, i);
}
}
-void virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i)
+virDomainLeaseDefPtr
+virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i)
{
+
+ virDomainLeaseDefPtr lease = def->leases[i];
+
if (def->nleases > 1) {
memmove(def->leases + i,
def->leases + i + 1,
VIR_FREE(def->leases);
def->nleases = 0;
}
+ return lease;
}
-int virDomainLeaseRemove(virDomainDefPtr def,
- virDomainLeaseDefPtr lease)
+virDomainLeaseDefPtr
+virDomainLeaseRemove(virDomainDefPtr def,
+ virDomainLeaseDefPtr lease)
{
int i = virDomainLeaseIndex(def, lease);
if (i < 0)
- return -1;
- virDomainLeaseRemoveAt(def, i);
- return 0;
+ return NULL;
+ return virDomainLeaseRemoveAt(def, i);
}
virDomainDiskDefPtr disk);
int virDomainDiskDefAssignAddress(virCapsPtr caps, virDomainDiskDefPtr def);
-void virDomainDiskRemove(virDomainDefPtr def, size_t i);
-int virDomainDiskRemoveByName(virDomainDefPtr def, const char *name);
+virDomainDiskDefPtr
+virDomainDiskRemove(virDomainDefPtr def, size_t i);
+virDomainDiskDefPtr
+virDomainDiskRemoveByName(virDomainDefPtr def, const char *name);
int virDomainNetIndexByMac(virDomainDefPtr def, const unsigned char *mac);
int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net);
-void virDomainNetRemove(virDomainDefPtr def, size_t i);
-int virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac);
+virDomainNetDefPtr
+virDomainNetRemove(virDomainDefPtr def, size_t i);
+virDomainNetDefPtr
+virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac);
int virDomainHostdevInsert(virDomainDefPtr def, virDomainHostdevDefPtr hostdev);
-void virDomainHostdevRemove(virDomainDefPtr def, size_t i);
+virDomainHostdevDefPtr
+virDomainHostdevRemove(virDomainDefPtr def, size_t i);
int virDomainHostdevFind(virDomainDefPtr def, virDomainHostdevDefPtr match,
virDomainHostdevDefPtr *found);
int virDomainLeaseInsertPreAlloc(virDomainDefPtr def);
void virDomainLeaseInsertPreAlloced(virDomainDefPtr def,
virDomainLeaseDefPtr lease);
-void virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i);
-int virDomainLeaseRemove(virDomainDefPtr def,
- virDomainLeaseDefPtr lease);
+virDomainLeaseDefPtr
+virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i);
+virDomainLeaseDefPtr
+virDomainLeaseRemove(virDomainDefPtr def,
+ virDomainLeaseDefPtr lease);
int virDomainSaveXML(const char *configDir,
virDomainDefPtr def,
static int
libxlDomainDetachDeviceConfig(virDomainDefPtr vmdef, virDomainDeviceDefPtr dev)
{
- virDomainDiskDefPtr disk;
+ virDomainDiskDefPtr disk, detach;
int ret = -1;
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
disk = dev->data.disk;
- if (virDomainDiskRemoveByName(vmdef, disk->dst)) {
+ if (!(detach = virDomainDiskRemoveByName(vmdef, disk->dst))) {
libxlError(VIR_ERR_INVALID_ARG,
_("no target device %s"), disk->dst);
break;
}
+ virDomainDiskDefFree(detach);
ret = 0;
break;
default:
qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
virDomainDeviceDefPtr dev)
{
- virDomainDiskDefPtr disk;
- virDomainNetDefPtr net;
- virDomainLeaseDefPtr lease;
+ virDomainDiskDefPtr disk, det_disk;
+ virDomainNetDefPtr net, det_net;
+ virDomainLeaseDefPtr lease, det_lease;
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
disk = dev->data.disk;
- if (virDomainDiskRemoveByName(vmdef, disk->dst)) {
+ if (!(det_disk = virDomainDiskRemoveByName(vmdef, disk->dst))) {
qemuReportError(VIR_ERR_INVALID_ARG,
_("no target device %s"), disk->dst);
return -1;
}
+ virDomainDiskDefFree(det_disk);
break;
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- if (virDomainNetRemoveByMac(vmdef, net->mac)) {
+ if (!(det_net = virDomainNetRemoveByMac(vmdef, net->mac))) {
char macbuf[VIR_MAC_STRING_BUFLEN];
virMacAddrFormat(net->mac, macbuf);
_("no nic of mac %s"), macbuf);
return -1;
}
+ virDomainNetDefFree(det_net);
break;
case VIR_DOMAIN_DEVICE_LEASE:
lease = dev->data.lease;
- if (virDomainLeaseRemove(vmdef, lease) < 0) {
+ if (!(det_lease = virDomainLeaseRemove(vmdef, lease))) {
qemuReportError(VIR_ERR_INVALID_ARG,
_("Lease %s in lockspace %s does not exist"),
lease->key, NULLSTR(lease->lockspace));
return -1;
}
+ virDomainLeaseDefFree(det_lease);
break;
default:
virDomainObjPtr vm,
virDomainLeaseDefPtr lease)
{
+ virDomainLeaseDefPtr det_lease;
int i;
if ((i = virDomainLeaseIndex(vm->def, lease)) < 0) {
if (virDomainLockLeaseDetach(driver->lockManager, vm, lease) < 0)
return -1;
- virDomainLeaseRemoveAt(vm->def, i);
+ det_lease = virDomainLeaseRemoveAt(vm->def, i);
+ virDomainLeaseDefFree(det_lease);
return 0;
}