[libvirt] [PATCH v2 1/8] cpu: allow include files for CPU definition
Jiri Denemark
jdenemar at redhat.com
Fri Aug 24 16:19:44 UTC 2018
On Thu, Aug 16, 2018 at 13:10:24 +0100, Daniel P. Berrangé wrote:
> Allow for syntax
>
> <include filename="subdir/fooo.xml"/>
>
> to reference other files in the CPU database directory
>
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
> src/cpu/cpu_map.c | 87 +++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 84 insertions(+), 3 deletions(-)
>
> diff --git a/src/cpu/cpu_map.c b/src/cpu/cpu_map.c
> index d263eb8cdd..bcd3e55417 100644
> --- a/src/cpu/cpu_map.c
> +++ b/src/cpu/cpu_map.c
> @@ -1,7 +1,7 @@
> /*
> * cpu_map.c: internal functions for handling CPU mapping configuration
> *
> - * Copyright (C) 2009-2010 Red Hat, Inc.
> + * Copyright (C) 2009-2018 Red Hat, Inc.
> *
> * This library is free software; you can redistribute it and/or
> * modify it under the terms of the GNU Lesser General Public
> @@ -70,6 +70,84 @@ static int load(xmlXPathContextPtr ctxt,
> return ret;
> }
>
> +static int
> +cpuMapLoadInclude(const char *filename,
> + cpuMapLoadCallback cb,
> + void *data)
> +{
> + xmlDocPtr xml = NULL;
> + xmlXPathContextPtr ctxt = NULL;
> + int ret = -1;
> + int element;
> + char *mapfile;
> +
> + if (!(mapfile = virFileFindResource(filename,
> + abs_topsrcdir "/src/cpu",
> + PKGDATADIR)))
> + return -1;
> +
> + VIR_DEBUG("Loading CPU map include from %s", mapfile);
> +
> + if (!(xml = virXMLParseFileCtxt(mapfile, &ctxt)))
> + goto cleanup;
> +
> + ctxt->node = xmlDocGetRootElement(xml);
> +
> + for (element = 0; element < CPU_MAP_ELEMENT_LAST; element++) {
> + if (load(ctxt, element, cb, data) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("cannot parse CPU map '%s'"), mapfile);
> + goto cleanup;
> + }
> + }
> +
> + ret = 0;
> +
> + cleanup:
> + xmlXPathFreeContext(ctxt);
> + xmlFreeDoc(xml);
> + VIR_FREE(mapfile);
> +
> + return ret;
> +}
> +
> +
> +static int
> +loadIncludes(xmlXPathContextPtr ctxt,
> + cpuMapLoadCallback callback,
> + void *data)
> +{
> + int ret = -1;
> + xmlNodePtr ctxt_node;
> + xmlNodePtr *nodes = NULL;
> + int n;
> + size_t i;
> +
> + ctxt_node = ctxt->node;
> +
> + n = virXPathNodeSet("include", ctxt, &nodes);
> + if (n < 0)
> + goto cleanup;
> +
> + for (i = 0; i < n; i++) {
> + char *filename = virXMLPropString(nodes[i], "filename");
Reporting an error if filename is NULL, i.e., when the filename
attribute is missing would be nice.
> + VIR_DEBUG("Finding CPU map include '%s'", filename);
> + if (cpuMapLoadInclude(filename, callback, data) < 0) {
> + VIR_FREE(filename);
> + goto cleanup;
> + }
> + VIR_FREE(filename);
> + }
> +
> + ret = 0;
...
With the NULL check
Reviewed-by: Jiri Denemark <jdenemar at redhat.com>
More information about the libvir-list
mailing list