[PATCH v2 08/19] Refactoring virDomainLeaseDefParseXML() to use XPath

Michal Prívozník mprivozn at redhat.com
Wed May 5 07:25:29 UTC 2021


On 5/4/21 1:40 PM, Kristina Hanicova wrote:
> Signed-off-by: Kristina Hanicova <khanicov at redhat.com>
> ---
>  src/conf/domain_conf.c | 189 ++++++++++++++++++-----------------------
>  1 file changed, 82 insertions(+), 107 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 1142b1214a..365879ea98 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -8085,48 +8085,34 @@ virSecurityDeviceLabelDefParseXML(virSecurityDeviceLabelDef ***seclabels_rtn,
>   */
>  static virDomainLeaseDef *
>  virDomainLeaseDefParseXML(xmlNodePtr node,
> -                          xmlXPathContextPtr ctxt G_GNUC_UNUSED)
> +                          xmlXPathContextPtr ctxt)
>  {
>      virDomainLeaseDef *def;
> -    xmlNodePtr cur;
>      g_autofree char *lockspace = NULL;
>      g_autofree char *key = NULL;
>      g_autofree char *path = NULL;
>      g_autofree char *offset = NULL;
> +    VIR_XPATH_NODE_AUTORESTORE(ctxt)
>  
> +    ctxt->node = node;
>      def = g_new0(virDomainLeaseDef, 1);
>  
> -    cur = node->children;
> -    while (cur != NULL) {
> -        if (cur->type == XML_ELEMENT_NODE) {
> -            if (!key && virXMLNodeNameEqual(cur, "key")) {
> -                if (!(key = virXMLNodeContentString(cur)))
> -                    goto error;
> -            } else if (!lockspace &&
> -                       virXMLNodeNameEqual(cur, "lockspace")) {
> -                if (!(lockspace = virXMLNodeContentString(cur)))
> -                    goto error;
> -            } else if (!path &&
> -                       virXMLNodeNameEqual(cur, "target")) {
> -                path = virXMLPropString(cur, "path");
> -                offset = virXMLPropString(cur, "offset");
> -            }
> -        }
> -        cur = cur->next;
> -    }
> -
> -    if (!key) {
> +    if (!(key = virXPathString("string(./key)", ctxt))) {
>          virReportError(VIR_ERR_XML_ERROR, "%s",
>                         _("Missing 'key' element for lease"));
>          goto error;
>      }
> -    if (!path) {
> +
> +    if (!(lockspace = virXPathString("string(./lockspace)", ctxt)))
> +        goto error;
> +
> +    if (!(path = virXPathString("string(./target/@path)", ctxt))) {
>          virReportError(VIR_ERR_XML_ERROR, "%s",
>                         _("Missing 'target' element for lease"));
>          goto error;
>      }
>  
> -    if (offset &&
> +    if ((offset = virXPathString("string(./target/@offset)", ctxt)) &&
>          virStrToLong_ull(offset, NULL, 10, &def->offset) < 0) {
>          virReportError(VIR_ERR_XML_ERROR,
>                         _("Malformed lease target offset %s"), offset);
> @@ -9464,9 +9450,8 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt,
>  {
>      g_autoptr(virDomainControllerDef) def = NULL;
>      virDomainControllerType type = 0;
> -    xmlNodePtr cur = NULL;
> -    bool processedModel = false;
> -    bool processedTarget = false;
> +    xmlNodePtr driver = NULL;
> +    xmlNodePtr target = NULL;
>      int numaNode = -1;
>      int ports = -1;
>      VIR_XPATH_NODE_AUTORESTORE(ctxt)

Looks like you meant to split these?

Michal




More information about the libvir-list mailing list