break;
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- virDomainChrSourceDefClear(&def->data.passthru);
+ virDomainChrSourceDefFree(def->data.passthru);
break;
default:
}
static virDomainSmartcardDefPtr
-virDomainSmartcardDefParseXML(xmlNodePtr node,
+virDomainSmartcardDefParseXML(virDomainXMLOptionPtr xmlopt,
+ xmlNodePtr node,
unsigned int flags)
{
xmlNodePtr cur;
"device type attribute"));
goto error;
}
- if ((def->data.passthru.type = virDomainChrTypeFromString(type)) < 0) {
+
+ if (!(def->data.passthru = virDomainChrSourceDefNew(xmlopt)))
+ goto error;
+
+ if ((def->data.passthru->type = virDomainChrTypeFromString(type)) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown type presented to host for "
"character device: %s"), type);
}
cur = node->children;
- if (virDomainChrSourceDefParseXML(&def->data.passthru, cur, flags,
+ if (virDomainChrSourceDefParseXML(def->data.passthru, cur, flags,
NULL, NULL, NULL, 0) < 0)
goto error;
- if (def->data.passthru.type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
- def->data.passthru.data.spicevmc
+ if (def->data.passthru->type == VIR_DOMAIN_CHR_TYPE_SPICEVMC) {
+ def->data.passthru->data.spicevmc
= VIR_DOMAIN_CHR_SPICEVMC_SMARTCARD;
}
goto error;
break;
case VIR_DOMAIN_DEVICE_SMARTCARD:
- if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(node, flags)))
+ if (!(dev->data.smartcard = virDomainSmartcardDefParseXML(xmlopt, node,
+ flags)))
goto error;
break;
case VIR_DOMAIN_DEVICE_MEMBALLOON:
goto error;
for (i = 0; i < n; i++) {
- virDomainSmartcardDefPtr card = virDomainSmartcardDefParseXML(nodes[i],
+ virDomainSmartcardDefPtr card = virDomainSmartcardDefParseXML(xmlopt,
+ nodes[i],
flags);
if (!card)
goto error;
break;
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- if (virDomainChrSourceDefFormat(buf, NULL, &def->data.passthru, false,
+ if (virDomainChrSourceDefFormat(buf, NULL, def->data.passthru, false,
flags) < 0)
return -1;
break;
return virSecuritySELinuxRestoreFileLabel(mgr, database);
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
- return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL, &dev->data.passthru);
+ return virSecuritySELinuxRestoreChardevLabel(mgr, def, NULL, dev->data.passthru);
default:
virReportError(VIR_ERR_INTERNAL_ERROR,
case VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH:
return virSecuritySELinuxSetChardevLabel(mgr, def, NULL,
- &dev->data.passthru);
+ dev->data.passthru);
default:
virReportError(VIR_ERR_INTERNAL_ERROR,