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

Boris Fiuczynski fiuczy at linux.ibm.com
Wed Jul 24 16:18:38 UTC 2019


Reviewed-by: Boris Fiuczynski <fiuczy at linux.ibm.com>

On 7/17/19 4:03 PM, Collin Walling wrote:
> 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 <danielh413 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 7d16a05..c587aff 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -268,6 +268,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 19ce816..a0efac8 100644
> --- a/src/conf/cpu_conf.h
> +++ b/src/conf/cpu_conf.h
> @@ -183,6 +183,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 b89462c..31ee887 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 4e77cf5..ea5edab 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -90,6 +90,7 @@ virCPUDefIsEqual;
>   virCPUDefListFree;
>   virCPUDefListParse;
>   virCPUDefParseXML;
> +virCPUDefParseXMLHelper;
>   virCPUDefStealModel;
>   virCPUDefUpdateFeature;
>   virCPUModeTypeToString;
> 


-- 
Mit freundlichen Grüßen/Kind regards
    Boris Fiuczynski

IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Matthias Hartmann
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294




More information about the libvir-list mailing list