[libvirt] [PATCH v2 7/8] cpu_conf: xml to cpu definition parse helper

Daniel Henrique Barboza danielhb413 at gmail.com
Mon Apr 29 18:56:49 UTC 2019



On 4/26/19 5:22 PM, walling at linux.ibm.com wrote:
> From: Collin Walling <walling at linux.ibm.com>
>
> 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 at linux.ibm.com>
> Reviewed-by: Bjoern Walk <bwalk at linux.ibm.com>

Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>

> ---
>   src/conf/cpu_conf.c      | 30 ++++++++++++++++++++++++++++++
>   src/conf/cpu_conf.h      |  6 ++++++
>   src/cpu/cpu.c            | 14 +-------------
>   src/libvirt_private.syms |  1 +
>   4 files changed, 38 insertions(+), 13 deletions(-)
>
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index bd2beab..d5f6fa1 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -260,6 +260,36 @@ virCPUDefCopy(const virCPUDef *cpu)
>   }
>   
>   
> +int
> +virCPUDefParseXMLHelper(const char *xml,
> +                        const char *xpath,
> +                        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, xpath, 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 c98db65..8d06b6f 100644
> --- a/src/conf/cpu_conf.h
> +++ b/src/conf/cpu_conf.h
> @@ -182,6 +182,12 @@ virCPUDefPtr
>   virCPUDefCopyWithoutModel(const virCPUDef *cpu);
>   
>   int
> +virCPUDefParseXMLHelper(const char *xml,
> +                        const char *xpath,
> +                        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 a223ff0..6eca956 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 (virCPUDefParseXMLHelper(xml, NULL, 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 a03cf0b..1308c7b 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -88,6 +88,7 @@ virCPUDefIsEqual;
>   virCPUDefListFree;
>   virCPUDefListParse;
>   virCPUDefParseXML;
> +virCPUDefParseXMLHelper;
>   virCPUDefStealModel;
>   virCPUDefUpdateFeature;
>   virCPUModeTypeToString;




More information about the libvir-list mailing list