[libvirt] [PATCH v4 1/2] qemu: formatting XML from domain def choosing the root name
Daniel Henrique Barboza
danielhb413 at gmail.com
Mon Sep 2 14:03:58 UTC 2019
On 8/29/19 5:55 PM, Maxiwell S. Garcia wrote:
> The function virDomainDefFormatInternal() has the predefined root name
> "domain" to format the XML. But to save both active and inactive domain
> in the snapshot XML, the new root name "inactiveDomain" was created.
> So, the new function virDomainDefFormatInternalSetRootName() allows to
> choose the root name of XML. The former function became a tiny wrapper
> to call the new function setting the correct parameters.
>
> Signed-off-by: Maxiwell S. Garcia <maxiwell at linux.ibm.com>
> ---
Reviewed-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
Tested-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
> src/conf/domain_conf.c | 35 ++++++++++++++++++++++++++---------
> src/conf/domain_conf.h | 6 ++++++
> 2 files changed, 32 insertions(+), 9 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index b7a342bb91..3154c07a86 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -21517,10 +21517,11 @@ virDomainDefParseNode(xmlDocPtr xml,
> virDomainDefPtr def = NULL;
> virDomainDefPtr ret = NULL;
>
> - if (!virXMLNodeNameEqual(root, "domain")) {
> + if ((!virXMLNodeNameEqual(root, "domain")) &&
> + (!virXMLNodeNameEqual(root, "inactiveDomain"))) {
> virReportError(VIR_ERR_XML_ERROR,
> _("unexpected root element <%s>, "
> - "expecting <domain>"),
> + "expecting <domain> or <inactiveDomain>"),
> root->name);
> goto cleanup;
> }
> @@ -28277,17 +28278,29 @@ virDomainDefFormatFeatures(virBufferPtr buf,
> return virXMLFormatElement(buf, "features", NULL, &childBuf);
> }
>
> -
> -/* This internal version appends to an existing buffer
> - * (possibly with auto-indent), rather than flattening
> - * to string.
> - * Return -1 on failure. */
> int
> virDomainDefFormatInternal(virDomainDefPtr def,
> virCapsPtr caps,
> unsigned int flags,
> virBufferPtr buf,
> virDomainXMLOptionPtr xmlopt)
> +{
> + return virDomainDefFormatInternalSetRootName(def, caps, flags, buf,
> + xmlopt, "domain");
> +}
> +
> +
> +/* This internal version appends to an existing buffer
> + * (possibly with auto-indent), rather than flattening
> + * to string.
> + * Return -1 on failure. */
> +int
> +virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
> + virCapsPtr caps,
> + unsigned int flags,
> + virBufferPtr buf,
> + virDomainXMLOptionPtr xmlopt,
> + const char *rootname)
> {
> unsigned char *uuid;
> char uuidstr[VIR_UUID_STRING_BUFLEN];
> @@ -28312,7 +28325,11 @@ virDomainDefFormatInternal(virDomainDefPtr def,
> if (def->id == -1)
> flags |= VIR_DOMAIN_DEF_FORMAT_INACTIVE;
>
> - virBufferAsprintf(buf, "<domain type='%s'", type);
> + if (!rootname || (STRNEQ(rootname, "domain") &&
> + STRNEQ(rootname, "inactiveDomain")))
> + goto error;
> +
> + virBufferAsprintf(buf, "<%s type='%s'", rootname, type);
> if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
> virBufferAsprintf(buf, " id='%d'", def->id);
> if (def->namespaceData && def->ns.format)
> @@ -28794,7 +28811,7 @@ virDomainDefFormatInternal(virDomainDefPtr def,
> virDomainSEVDefFormat(buf, def->sev);
>
> virBufferAdjustIndent(buf, -2);
> - virBufferAddLit(buf, "</domain>\n");
> + virBufferAsprintf(buf, "</%s>\n", rootname);
>
> if (virBufferCheckError(buf) < 0)
> goto error;
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 33cef5b75c..af1335cc16 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -3073,6 +3073,12 @@ int virDomainDefFormatInternal(virDomainDefPtr def,
> unsigned int flags,
> virBufferPtr buf,
> virDomainXMLOptionPtr xmlopt);
> +int virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
> + virCapsPtr caps,
> + unsigned int flags,
> + virBufferPtr buf,
> + virDomainXMLOptionPtr xmlopt,
> + const char *rootname);
>
> int virDomainDiskSourceFormat(virBufferPtr buf,
> virStorageSourcePtr src,
More information about the libvir-list
mailing list