}
-static virDomainBackupDef *
-virDomainBackupDefParse(xmlXPathContextPtr ctxt,
- virDomainXMLOption *xmlopt,
- unsigned int flags)
+virDomainBackupDef *
+virDomainBackupDefParseXML(xmlXPathContextPtr ctxt,
+ virDomainXMLOption *xmlopt,
+ unsigned int flags)
{
g_autoptr(virDomainBackupDef) def = NULL;
g_autofree xmlNodePtr *nodes = NULL;
virDomainXMLOption *xmlopt,
unsigned int flags)
{
- virDomainBackupDef *ret = NULL;
g_autoptr(xmlDoc) xml = NULL;
+ g_autoptr(xmlXPathContext) ctxt = NULL;
int keepBlanksDefault = xmlKeepBlanksDefault(0);
bool validate = !(flags & VIR_DOMAIN_BACKUP_PARSE_INTERNAL);
- if ((xml = virXMLParse(NULL, xmlStr, _("(domain_backup)"),
- NULL, NULL, "domainbackup.rng", validate))) {
- xmlKeepBlanksDefault(keepBlanksDefault);
- ret = virDomainBackupDefParseNode(xml, xmlDocGetRootElement(xml),
- xmlopt, flags);
- }
- xmlKeepBlanksDefault(keepBlanksDefault);
-
- return ret;
-}
-
+ xml = virXMLParse(NULL, xmlStr, _("(domain_backup)"),
+ "domainbackup", &ctxt, "domainbackup.rng", validate);
-virDomainBackupDef *
-virDomainBackupDefParseNode(xmlDocPtr xml,
- xmlNodePtr root,
- virDomainXMLOption *xmlopt,
- unsigned int flags)
-{
- g_autoptr(xmlXPathContext) ctxt = NULL;
-
- if (!virXMLNodeNameEqual(root, "domainbackup")) {
- virReportError(VIR_ERR_XML_ERROR, "%s", _("domainbackup"));
- return NULL;
- }
+ xmlKeepBlanksDefault(keepBlanksDefault);
- if (!(ctxt = virXMLXPathContextNew(xml)))
+ if (!xml)
return NULL;
- ctxt->node = root;
- return virDomainBackupDefParse(ctxt, xmlopt, flags);
+ return virDomainBackupDefParseXML(ctxt, xmlopt, flags);
}
VIR_DOMAIN_BACKUP_PARSE_INTERNAL = 1 << 0,
} virDomainBackupParseFlags;
+virDomainBackupDef *
+virDomainBackupDefParseXML(xmlXPathContextPtr ctxt,
+ virDomainXMLOption *xmlopt,
+ unsigned int flags);
+
virDomainBackupDef *
virDomainBackupDefParseString(const char *xmlStr,
virDomainXMLOption *xmlopt,
unsigned int flags);
-virDomainBackupDef *
-virDomainBackupDefParseNode(xmlDocPtr xml,
- xmlNodePtr root,
- virDomainXMLOption *xmlopt,
- unsigned int flags);
void
virDomainBackupDefFree(virDomainBackupDef *def);
qemuDomainObjPrivateXMLParseBackups(qemuDomainObjPrivate *priv,
xmlXPathContextPtr ctxt)
{
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
g_autofree xmlNodePtr *nodes = NULL;
ssize_t nnodes = 0;
if (nnodes == 0)
return 0;
- if (!(priv->backup = virDomainBackupDefParseNode(ctxt->doc, nodes[0],
- priv->driver->xmlopt,
- VIR_DOMAIN_BACKUP_PARSE_INTERNAL)))
+ ctxt->node = nodes[0];
+
+ if (!(priv->backup = virDomainBackupDefParseXML(ctxt,
+ priv->driver->xmlopt,
+ VIR_DOMAIN_BACKUP_PARSE_INTERNAL)))
return -1;
return 0;