[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