[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