[libvirt] [PATCH v2 25/29] conf: use virXMLFormatElement in virDomainDiskDefFormatMirror

Peter Krempa pkrempa at redhat.com
Fri Mar 22 18:01:01 UTC 2019


Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/conf/domain_conf.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 852489e185..5c82ac0a18 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -24017,8 +24017,12 @@ virDomainDiskDefFormatMirror(virBufferPtr buf,
                              unsigned int flags,
                              virDomainXMLOptionPtr xmlopt)
 {
+    VIR_AUTOCLEAN(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+    VIR_AUTOCLEAN(virBuffer) childBuf = VIR_BUFFER_INITIALIZER;
     const char *formatStr = NULL;

+    virBufferSetChildIndent(&childBuf, buf);
+
     /* For now, mirroring is currently output-only: we only output it
      * for live domains, therefore we ignore it on input except for
      * the internal parse on libvirtd restart.  We prefer to output
@@ -24032,28 +24036,25 @@ virDomainDiskDefFormatMirror(virBufferPtr buf,

     if (disk->mirror->format)
         formatStr = virStorageFileFormatTypeToString(disk->mirror->format);
-    virBufferAsprintf(buf, "<mirror type='%s'",
+    virBufferAsprintf(&attrBuf, " type='%s'",
                       virStorageTypeToString(disk->mirror->type));
     if (disk->mirror->type == VIR_STORAGE_TYPE_FILE &&
         disk->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) {
-        virBufferEscapeString(buf, " file='%s'", disk->mirror->path);
-        virBufferEscapeString(buf, " format='%s'", formatStr);
+        virBufferEscapeString(&attrBuf, " file='%s'", disk->mirror->path);
+        virBufferEscapeString(&attrBuf, " format='%s'", formatStr);
     }
-    virBufferEscapeString(buf, " job='%s'",
+    virBufferEscapeString(&attrBuf, " job='%s'",
                           virDomainBlockJobTypeToString(disk->mirrorJob));
-    if (disk->mirrorState) {
-        const char *mirror;
+    if (disk->mirrorState)
+        virBufferEscapeString(&attrBuf, " ready='%s'",
+                              virDomainDiskMirrorStateTypeToString(disk->mirrorState));

-        mirror = virDomainDiskMirrorStateTypeToString(disk->mirrorState);
-        virBufferEscapeString(buf, " ready='%s'", mirror);
-    }
-    virBufferAddLit(buf, ">\n");
-    virBufferAdjustIndent(buf, 2);
-    virBufferEscapeString(buf, "<format type='%s'/>\n", formatStr);
-    if (virDomainDiskSourceFormat(buf, disk->mirror, 0, false, 0, xmlopt) < 0)
+    virBufferEscapeString(&childBuf, "<format type='%s'/>\n", formatStr);
+    if (virDomainDiskSourceFormat(&childBuf, disk->mirror, 0, false, 0, xmlopt) < 0)
+        return -1;
+
+    if (virXMLFormatElement(buf, "mirror", &attrBuf, &childBuf) < 0)
         return -1;
-    virBufferAdjustIndent(buf, -2);
-    virBufferAddLit(buf, "</mirror>\n");

     return 0;
 }
-- 
2.20.1




More information about the libvir-list mailing list