]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: xml: Introduce VIR_XPATH_NODE_AUTORESTORE_NAME
authorPeter Krempa <pkrempa@redhat.com>
Fri, 16 Sep 2022 15:19:44 +0000 (17:19 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 3 Oct 2022 12:43:18 +0000 (14:43 +0200)
VIR_XPATH_NODE_AUTORESTORE_NAME is a more generic version of the
VIR_XPATH_NODE_AUTORESTORE macro used to save the 'node' inside a XPath
context struct. The new macro allows specifying the name of the variable
used to save the context so that it can be used multiple times inside a
function's nested scopes.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/util/virxml.h

index d1427e497819deb4ab8eb311a2f421a66489a734..af58d44835570919983a7556134f5b1b13e16eec 100644 (file)
@@ -379,6 +379,20 @@ virXPathContextNodeRestore(virXPathContextNodeSave *save);
 
 G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virXPathContextNodeSave, virXPathContextNodeRestore);
 
+/**
+ * VIR_XPATH_NODE_AUTORESTORE_NAME:
+ * @name: name of the temporary variable used to save @ctxt
+ * @ctxt: XML XPath context pointer
+ *
+ * This macro ensures that when the scope where it's used ends, @ctxt's current
+ * node pointer is reset to the original value when this macro was used. The
+ * context is saved into a variable named @name;
+ */
+#define VIR_XPATH_NODE_AUTORESTORE_NAME(_name, _ctxt) \
+    VIR_WARNINGS_NO_UNUSED_VARIABLE \
+    g_auto(virXPathContextNodeSave) _name = { .ctxt = _ctxt,\
+                                              .node = _ctxt->node}; \
+    VIR_WARNINGS_RESET
 /**
  * VIR_XPATH_NODE_AUTORESTORE:
  * @ctxt: XML XPath context pointer
@@ -387,10 +401,7 @@ G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virXPathContextNodeSave, virXPathContextNodeRes
  * node pointer is reset to the original value when this macro was used.
  */
 #define VIR_XPATH_NODE_AUTORESTORE(_ctxt) \
-    VIR_WARNINGS_NO_UNUSED_VARIABLE \
-    g_auto(virXPathContextNodeSave) _ctxt ## CtxtSave = { .ctxt = _ctxt,\
-                                                          .node = _ctxt->node}; \
-    VIR_WARNINGS_RESET
+    VIR_XPATH_NODE_AUTORESTORE_NAME(_ctxt ## CtxtSave, _ctxt)
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlDoc, xmlFreeDoc);
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(xmlXPathContext, xmlXPathFreeContext);