return 0;
}
+int
+virDomainFSInsert(virDomainDefPtr def, virDomainFSDefPtr fs)
+{
+
+ return VIR_APPEND_ELEMENT(def->fss, def->nfss, fs);
+}
+
+virDomainFSDefPtr
+virDomainFSRemove(virDomainDefPtr def, size_t i)
+{
+ virDomainFSDefPtr fs = def->fss[i];
+
+ VIR_DELETE_ELEMENT(def->fss, i, def->nfss);
+ return fs;
+}
+
virDomainFSDefPtr
virDomainGetRootFilesystem(virDomainDefPtr def)
{
int *devIdx);
virDomainFSDefPtr virDomainGetRootFilesystem(virDomainDefPtr def);
+int virDomainFSInsert(virDomainDefPtr def, virDomainFSDefPtr fs);
int virDomainFSIndexByName(virDomainDefPtr def, const char *name);
+virDomainFSDefPtr virDomainFSRemove(virDomainDefPtr def, size_t i);
+
int virDomainVideoDefaultType(const virDomainDef *def);
int virDomainVideoDefaultRAM(const virDomainDef *def, int type);
virDomainHostdevDefPtr hostdev;
virDomainLeaseDefPtr lease;
virDomainControllerDefPtr controller;
+ virDomainFSDefPtr fs;
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
dev->data.chr = NULL;
break;
+ case VIR_DOMAIN_DEVICE_FS:
+ fs = dev->data.fs;
+ if (virDomainFSIndexByName(vmdef, fs->dst) >= 0) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ "%s", _("Target already exists"));
+ return -1;
+ }
+
+ if (virDomainFSInsert(vmdef, fs) < 0)
+ return -1;
+ dev->data.fs = NULL;
+ break;
+
default:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent attach of device '%s' is not supported"),
virDomainLeaseDefPtr lease, det_lease;
virDomainControllerDefPtr cont, det_cont;
virDomainChrDefPtr chr;
+ virDomainFSDefPtr fs;
int idx;
char mac[VIR_MAC_STRING_BUFLEN];
dev->data.chr = NULL;
break;
+ case VIR_DOMAIN_DEVICE_FS:
+ fs = dev->data.fs;
+ idx = virDomainFSIndexByName(vmdef, fs->dst);
+ if (idx < 0) {
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("no matching filesystem device was found"));
+ return -1;
+ }
+
+ fs = virDomainFSRemove(vmdef, idx);
+ virDomainFSDefFree(fs);
+ break;
+
default:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent detach of device '%s' is not supported"),