]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: xml: Introduce virXMLFormatElementEmpty
authorPeter Krempa <pkrempa@redhat.com>
Tue, 13 Apr 2021 14:12:17 +0000 (16:12 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 26 Apr 2021 15:22:30 +0000 (17:22 +0200)
Add a helper which will format an XML element with attributes and
children, but compared to virXMLFormatElement it also formats an empty
element if both buffers are empty.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Tested-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/libvirt_private.syms
src/util/virxml.c
src/util/virxml.h

index 8f8d399d88723aa2e717aae0a9d46c586318b428..9f761c2c00c86e1c628b9bbb8b9de203dbafb6da 100644 (file)
@@ -3541,6 +3541,7 @@ virXMLBufferCreate;
 virXMLCheckIllegalChars;
 virXMLExtractNamespaceXML;
 virXMLFormatElement;
+virXMLFormatElementEmpty;
 virXMLNewNode;
 virXMLNodeContentString;
 virXMLNodeNameEqual;
index 01c0114072ac7bed2fecafe281c941e408eb2650..7cc73ab9a0280f9076a89f21349fb9355b114931 100644 (file)
@@ -1631,6 +1631,32 @@ virXMLValidatorFree(virXMLValidator *validator)
 }
 
 
+/* same as virXMLFormatElement but outputs an empty element if @attrBuf and
+ * @childBuf are both empty */
+void
+virXMLFormatElementEmpty(virBuffer *buf,
+                         const char *name,
+                         virBuffer *attrBuf,
+                         virBuffer *childBuf)
+{
+    virBufferAsprintf(buf, "<%s", name);
+
+    if (attrBuf && virBufferUse(attrBuf) > 0)
+        virBufferAddBuffer(buf, attrBuf);
+
+    if (childBuf && virBufferUse(childBuf) > 0) {
+        virBufferAddLit(buf, ">\n");
+        virBufferAddBuffer(buf, childBuf);
+        virBufferAsprintf(buf, "</%s>\n", name);
+    } else {
+        virBufferAddLit(buf, "/>\n");
+    }
+
+    virBufferFreeAndReset(attrBuf);
+    virBufferFreeAndReset(childBuf);
+}
+
+
 /**
  * virXMLFormatElement
  * @buf: the parent buffer where the element will be placed
@@ -1655,21 +1681,7 @@ virXMLFormatElement(virBuffer *buf,
         (!childBuf || virBufferUse(childBuf) == 0))
         return;
 
-    virBufferAsprintf(buf, "<%s", name);
-
-    if (attrBuf && virBufferUse(attrBuf) > 0)
-        virBufferAddBuffer(buf, attrBuf);
-
-    if (childBuf && virBufferUse(childBuf) > 0) {
-        virBufferAddLit(buf, ">\n");
-        virBufferAddBuffer(buf, childBuf);
-        virBufferAsprintf(buf, "</%s>\n", name);
-    } else {
-        virBufferAddLit(buf, "/>\n");
-    }
-
-    virBufferFreeAndReset(attrBuf);
-    virBufferFreeAndReset(childBuf);
+    virXMLFormatElementEmpty(buf, name, attrBuf, childBuf);
 }
 
 
index 13c543fbb6b2673dc95d52c6954c9e1ca0b79789..eb92fbf94e28af2a350962976d8c0145e1f853e3 100644 (file)
@@ -315,6 +315,13 @@ virXMLFormatElement(virBuffer *buf,
                     virBuffer *attrBuf,
                     virBuffer *childBuf);
 
+void
+virXMLFormatElementEmpty(virBuffer *buf,
+                         const char *name,
+                         virBuffer *attrBuf,
+                         virBuffer *childBuf);
+
+
 struct _virXPathContextNodeSave {
     xmlXPathContextPtr ctxt;
     xmlNodePtr node;