[libvirt] [PATCH 10/14] snapshot: indent domain xml when nesting, round 10

Eric Blake eblake at redhat.com
Thu Sep 22 20:35:04 UTC 2011


Focusing on guest disk devices.

* src/conf/domain_conf.c (virDomainDiskDefFormat)
(virDomainControllerDefFormat, virDomainLeaseDefFormat)
(virDomainFSDefFormat): Add parameter.
(virDomainDefFormatInternal): Adjust caller.
* src/conf/storage_encryption_conf.c (virStorageEncryptionFormat):
Simplify.
---
 src/conf/domain_conf.c             |  126 ++++++++++++++++++++----------------
 src/conf/storage_encryption_conf.c |    4 +-
 2 files changed, 73 insertions(+), 57 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index be32598..a9d274b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9064,16 +9064,19 @@ virDomainLifecycleDefFormat(virBufferPtr buf,

 static int
 virDomainLeaseDefFormat(virBufferPtr buf,
-                        virDomainLeaseDefPtr def)
+                        virDomainLeaseDefPtr def,
+                        int indent)
 {
-    virBufferAddLit(buf, "    <lease>\n");
-    virBufferEscapeString(buf, "      <lockspace>%s</lockspace>\n", def->lockspace);
-    virBufferEscapeString(buf, "      <key>%s</key>\n", def->key);
-    virBufferEscapeString(buf, "      <target path='%s'", def->path);
+    virBufferIndentAddLit(buf, indent, "<lease>\n");
+    virBufferIndentEscapeString(buf, indent + 2, "<lockspace>%s</lockspace>\n",
+                                def->lockspace);
+    virBufferIndentEscapeString(buf, indent + 2, "<key>%s</key>\n", def->key);
+    virBufferIndentEscapeString(buf, indent + 2, "<target path='%s'",
+                                def->path);
     if (def->offset)
         virBufferAsprintf(buf, " offset='%llu'", def->offset);
     virBufferAddLit(buf, "/>\n");
-    virBufferAddLit(buf, "    </lease>\n");
+    virBufferIndentAddLit(buf, indent, "</lease>\n");

     return 0;
 }
@@ -9081,6 +9084,7 @@ virDomainLeaseDefFormat(virBufferPtr buf,
 static int
 virDomainDiskDefFormat(virBufferPtr buf,
                        virDomainDiskDefPtr def,
+                       int indent,
                        unsigned int flags)
 {
     const char *type = virDomainDiskTypeToString(def->type);
@@ -9119,7 +9123,7 @@ virDomainDiskDefFormat(virBufferPtr buf,
     }

     virBufferAsprintf(buf,
-                      "    <disk type='%s' device='%s'",
+                      "%*s<disk type='%s' device='%s'", indent, "",
                       type, device);
     if (def->snapshot &&
         !(def->snapshot == VIR_DOMAIN_DISK_SNAPSHOT_NO && def->readonly))
@@ -9129,7 +9133,7 @@ virDomainDiskDefFormat(virBufferPtr buf,

     if (def->driverName || def->driverType || def->cachemode ||
         def->ioeventfd || def->event_idx) {
-        virBufferAsprintf(buf, "      <driver");
+        virBufferIndentAddLit(buf, indent + 2, "<driver");
         if (def->driverName)
             virBufferAsprintf(buf, " name='%s'", def->driverName);
         if (def->driverType)
@@ -9144,42 +9148,47 @@ virDomainDiskDefFormat(virBufferPtr buf,
             virBufferAsprintf(buf, " ioeventfd='%s'", ioeventfd);
         if (def->event_idx)
             virBufferAsprintf(buf, " event_idx='%s'", event_idx);
-        virBufferAsprintf(buf, "/>\n");
+        virBufferAddLit(buf, "/>\n");
     }

     if (def->src || def->nhosts > 0) {
         switch (def->type) {
         case VIR_DOMAIN_DISK_TYPE_FILE:
-            virBufferEscapeString(buf, "      <source file='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source file='%s'/>\n",
+                                        def->src);
             break;
         case VIR_DOMAIN_DISK_TYPE_BLOCK:
-            virBufferEscapeString(buf, "      <source dev='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source dev='%s'/>\n",
+                                        def->src);
             break;
         case VIR_DOMAIN_DISK_TYPE_DIR:
-            virBufferEscapeString(buf, "      <source dir='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source dir='%s'/>\n",
+                                        def->src);
             break;
         case VIR_DOMAIN_DISK_TYPE_NETWORK:
-            virBufferAsprintf(buf, "      <source protocol='%s'",
+            virBufferAsprintf(buf, "%*s<source protocol='%s'",
+                              indent + 2, "",
                               virDomainDiskProtocolTypeToString(def->protocol));
             if (def->src) {
                 virBufferEscapeString(buf, " name='%s'", def->src);
             }
             if (def->nhosts == 0) {
-                virBufferAsprintf(buf, "/>\n");
+                virBufferAddLit(buf, "/>\n");
             } else {
                 int i;

-                virBufferAsprintf(buf, ">\n");
+                virBufferAddLit(buf, ">\n");
                 for (i = 0; i < def->nhosts; i++) {
-                    virBufferEscapeString(buf, "        <host name='%s'",
-                                          def->hosts[i].name);
+                    virBufferIndentEscapeString(buf, indent + 4,
+                                                "<host name='%s'",
+                                                def->hosts[i].name);
                     virBufferEscapeString(buf, " port='%s'/>\n",
                                           def->hosts[i].port);
                 }
-                virBufferAsprintf(buf, "      </source>\n");
+                virBufferIndentAddLit(buf, indent + 2, "</source>\n");
             }
             break;
         default:
@@ -9190,28 +9199,28 @@ virDomainDiskDefFormat(virBufferPtr buf,
         }
     }

-    virBufferAsprintf(buf, "      <target dev='%s' bus='%s'/>\n",
-                      def->dst, bus);
+    virBufferAsprintf(buf, "%*s<target dev='%s' bus='%s'/>\n",
+                      indent + 2, "", def->dst, bus);

     if (def->bootIndex)
-        virBufferAsprintf(buf, "      <boot order='%d'/>\n", def->bootIndex);
+        virBufferAsprintf(buf, "%*s<boot order='%d'/>\n", indent + 2, "",
+                          def->bootIndex);
     if (def->readonly)
-        virBufferAddLit(buf, "      <readonly/>\n");
+        virBufferIndentAddLit(buf, indent + 2, "<readonly/>\n");
     if (def->shared)
-        virBufferAddLit(buf, "      <shareable/>\n");
+        virBufferIndentAddLit(buf, indent + 2, "<shareable/>\n");
     if (def->transient)
-        virBufferAddLit(buf, "      <transient/>\n");
-    if (def->serial)
-        virBufferEscapeString(buf, "      <serial>%s</serial>\n",
-                              def->serial);
+        virBufferIndentAddLit(buf, indent + 2, "<transient/>\n");
+    virBufferIndentEscapeString(buf, indent + 2, "<serial>%s</serial>\n",
+                                def->serial);
     if (def->encryption != NULL &&
-        virStorageEncryptionFormat(buf, def->encryption, 6) < 0)
+        virStorageEncryptionFormat(buf, def->encryption, indent + 2) < 0)
         return -1;

-    if (virDomainDeviceInfoFormat(buf, &def->info, 6, flags) < 0)
+    if (virDomainDeviceInfoFormat(buf, &def->info, indent + 2, flags) < 0)
         return -1;

-    virBufferAddLit(buf, "    </disk>\n");
+    virBufferIndentAddLit(buf, indent, "</disk>\n");

     return 0;
 }
@@ -9231,6 +9240,7 @@ virDomainControllerModelTypeToString(virDomainControllerDefPtr def,
 static int
 virDomainControllerDefFormat(virBufferPtr buf,
                              virDomainControllerDefPtr def,
+                             int indent,
                              unsigned int flags)
 {
     const char *type = virDomainControllerTypeToString(def->type);
@@ -9253,7 +9263,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
     }

     virBufferAsprintf(buf,
-                      "    <controller type='%s' index='%d'",
+                      "%*s<controller type='%s' index='%d'", indent, "",
                       type, def->idx);

     if (model) {
@@ -9278,9 +9288,9 @@ virDomainControllerDefFormat(virBufferPtr buf,

     if (virDomainDeviceInfoIsSet(&def->info, flags)) {
         virBufferAddLit(buf, ">\n");
-        if (virDomainDeviceInfoFormat(buf, &def->info, 6, flags) < 0)
+        if (virDomainDeviceInfoFormat(buf, &def->info, indent + 2, flags) < 0)
             return -1;
-        virBufferAddLit(buf, "    </controller>\n");
+        virBufferIndentAddLit(buf, indent, "</controller>\n");
     } else {
         virBufferAddLit(buf, "/>\n");
     }
@@ -9291,6 +9301,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
 static int
 virDomainFSDefFormat(virBufferPtr buf,
                      virDomainFSDefPtr def,
+                     int indent,
                      unsigned int flags)
 {
     const char *type = virDomainFSTypeToString(def->type);
@@ -9310,42 +9321,46 @@ virDomainFSDefFormat(virBufferPtr buf,


     virBufferAsprintf(buf,
-                      "    <filesystem type='%s' accessmode='%s'>\n",
-                      type, accessmode);
+                      "%*s<filesystem type='%s' accessmode='%s'>\n",
+                      indent, "", type, accessmode);

     if (def->src) {
         switch (def->type) {
         case VIR_DOMAIN_FS_TYPE_MOUNT:
-            virBufferEscapeString(buf, "      <source dir='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source dir='%s'/>\n",
+                                        def->src);
             break;

         case VIR_DOMAIN_FS_TYPE_BLOCK:
-            virBufferEscapeString(buf, "      <source dev='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source dev='%s'/>\n",
+                                        def->src);
             break;

         case VIR_DOMAIN_FS_TYPE_FILE:
-            virBufferEscapeString(buf, "      <source file='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source file='%s'/>\n",
+                                        def->src);
             break;

         case VIR_DOMAIN_FS_TYPE_TEMPLATE:
-            virBufferEscapeString(buf, "      <source name='%s'/>\n",
-                                  def->src);
+            virBufferIndentEscapeString(buf, indent + 2,
+                                        "<source name='%s'/>\n",
+                                        def->src);
         }
     }

-    virBufferEscapeString(buf, "      <target dir='%s'/>\n",
-                          def->dst);
+    virBufferIndentEscapeString(buf, indent + 2, "<target dir='%s'/>\n",
+                                def->dst);

     if (def->readonly)
-        virBufferAddLit(buf, "      <readonly/>\n");
+        virBufferIndentAddLit(buf, indent + 2, "<readonly/>\n");

-    if (virDomainDeviceInfoFormat(buf, &def->info, 6, flags) < 0)
+    if (virDomainDeviceInfoFormat(buf, &def->info, indent + 2, flags) < 0)
         return -1;

-    virBufferAddLit(buf, "    </filesystem>\n");
+    virBufferIndentAddLit(buf, indent, "</filesystem>\n");

     return 0;
 }
@@ -10771,19 +10786,20 @@ virDomainDefFormatInternal(virDomainDefPtr def,
                                 def->emulator);

     for (n = 0 ; n < def->ndisks ; n++)
-        if (virDomainDiskDefFormat(buf, def->disks[n], flags) < 0)  /* XXX indent */
+        if (virDomainDiskDefFormat(buf, def->disks[n], indent, flags) < 0)
             goto cleanup;

     for (n = 0 ; n < def->ncontrollers ; n++)
-        if (virDomainControllerDefFormat(buf, def->controllers[n], flags) < 0) /* XXX indent */
+        if (virDomainControllerDefFormat(buf, def->controllers[n], indent,
+                                         flags) < 0)
             goto cleanup;

     for (n = 0 ; n < def->nleases ; n++)
-        if (virDomainLeaseDefFormat(buf, def->leases[n]) < 0) /* XXX indent */
+        if (virDomainLeaseDefFormat(buf, def->leases[n], indent) < 0)
             goto cleanup;

     for (n = 0 ; n < def->nfss ; n++)
-        if (virDomainFSDefFormat(buf, def->fss[n], flags) < 0) /* XXX indent */
+        if (virDomainFSDefFormat(buf, def->fss[n], indent, flags) < 0)
             goto cleanup;


diff --git a/src/conf/storage_encryption_conf.c b/src/conf/storage_encryption_conf.c
index 73e16ed..7d77893 100644
--- a/src/conf/storage_encryption_conf.c
+++ b/src/conf/storage_encryption_conf.c
@@ -1,7 +1,7 @@
 /*
  * storage_encryption_conf.c: volume encryption information
  *
- * Copyright (C) 2009-2010 Red Hat, Inc.
+ * Copyright (C) 2009-2011 Red Hat, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -253,7 +253,7 @@ virStorageEncryptionFormat(virBufferPtr buf,
             return -1;
     }

-    virBufferAsprintf(buf, "%*s</encryption>\n", indent, "");
+    virBufferIndentAddLit(buf, indent, "</encryption>\n");

     return 0;
 }
-- 
1.7.4.4




More information about the libvir-list mailing list