Implement an XML to virCPUDefPtr helper that handles the ctxt
prerequisite for virCPUDefParseXML.
This does not alter any functionality.
Signed-off-by: Collin Walling <walling(a)linux.ibm.com>
Reviewed-by: Bjoern Walk <bwalk(a)linux.ibm.com>
Reviewed-by: Daniel Henrique Barboza <danielh413(a)gmail.com>
---
src/conf/cpu_conf.c | 29 +++++++++++++++++++++++++++++
src/conf/cpu_conf.h | 5 +++++
src/cpu/cpu.c | 14 +-------------
src/libvirt_private.syms | 1 +
4 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 7d16a05..a6bb9ea 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -268,6 +268,35 @@ virCPUDefCopy(const virCPUDef *cpu)
}
+int
+virCPUDefParseXMLString(const char *xml,
+ virCPUType type,
+ virCPUDefPtr *cpu)
+{
+ xmlDocPtr doc = NULL;
+ xmlXPathContextPtr ctxt = NULL;
+ int ret = -1;
+
+ if (!xml) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s", _("missing CPU
definition"));
+ goto cleanup;
+ }
+
+ if (!(doc = virXMLParseStringCtxt(xml, _("(CPU_definition)"), &ctxt)))
+ goto cleanup;
+
+ if (virCPUDefParseXML(ctxt, NULL, type, cpu) < 0)
+ goto cleanup;
+
+ ret = 0;
+
+ cleanup:
+ xmlFreeDoc(doc);
+ xmlXPathFreeContext(ctxt);
+ return ret;
+}
+
+
/*
* Parses CPU definition XML from a node pointed to by @xpath. If @xpath is
* NULL, the current node of @ctxt is used (i.e., it is a shortcut to ".").
diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
index 19ce816..30904fa 100644
--- a/src/conf/cpu_conf.h
+++ b/src/conf/cpu_conf.h
@@ -183,6 +183,11 @@ virCPUDefPtr
virCPUDefCopyWithoutModel(const virCPUDef *cpu);
int
+virCPUDefParseXMLString(const char *xml,
+ virCPUType type,
+ virCPUDefPtr *cpu);
+
+int
virCPUDefParseXML(xmlXPathContextPtr ctxt,
const char *xpath,
virCPUType mode,
diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
index b89462c..2278d79 100644
--- a/src/cpu/cpu.c
+++ b/src/cpu/cpu.c
@@ -111,31 +111,19 @@ virCPUCompareXML(virArch arch,
const char *xml,
bool failIncompatible)
{
- xmlDocPtr doc = NULL;
- xmlXPathContextPtr ctxt = NULL;
virCPUDefPtr cpu = NULL;
virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
VIR_DEBUG("arch=%s, host=%p, xml=%s",
virArchToString(arch), host, NULLSTR(xml));
- if (!xml) {
- virReportError(VIR_ERR_INVALID_ARG, "%s", _("missing CPU
definition"));
- goto cleanup;
- }
-
- if (!(doc = virXMLParseStringCtxt(xml, _("(CPU_definition)"), &ctxt)))
- goto cleanup;
-
- if (virCPUDefParseXML(ctxt, NULL, VIR_CPU_TYPE_AUTO, &cpu) < 0)
+ if (virCPUDefParseXMLString(xml, VIR_CPU_TYPE_AUTO, &cpu) < 0)
goto cleanup;
ret = virCPUCompare(arch, host, cpu, failIncompatible);
cleanup:
virCPUDefFree(cpu);
- xmlXPathFreeContext(ctxt);
- xmlFreeDoc(doc);
return ret;
}
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 4865eda..9850664 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -101,6 +101,7 @@ virCPUDefIsEqual;
virCPUDefListFree;
virCPUDefListParse;
virCPUDefParseXML;
+virCPUDefParseXMLString;
virCPUDefStealModel;
virCPUDefUpdateFeature;
virCPUModeTypeToString;
--
2.7.4