]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
snapshot: indent domain xml when nesting
authorEric Blake <eblake@redhat.com>
Sat, 17 Sep 2011 12:57:30 +0000 (06:57 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 20 Oct 2011 22:02:16 +0000 (16:02 -0600)
<domainsnapshot> is the first public instance of <domain> being
used as a sub-element, although we have two other private uses
(runtime state, and migration cookie).  Although indentation has
no effect on XML parsing, using it makes the output more consistent.

This uses virBuffer auto-indentation to obtain the effect, for all
but the portions of <domain> that are not generated a line at a
time into the same virBuffer.  Further patches will clean up the
remaining problems.

* src/conf/domain_conf.h (virDomainDefFormatInternal): New prototype.
* src/conf/domain_conf.c (virDomainDefFormatInternal): Export.
(virDomainObjFormat, virDomainSnapshotDefFormat): Update callers.
* src/libvirt_private.syms (domain_conf.h): Add new export.
* src/qemu/qemu_migration.c (qemuMigrationCookieXMLFormat): Use
new function.
(qemuMigrationCookieXMLFormatStr): Update caller.

src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_migration.c

index 595959384bfda0d73c7f296d8c7fd9fb4b5bae8b..adb596edd53e6cae5ef6b8777a4448ed9a888c11 100644 (file)
@@ -10559,14 +10559,13 @@ verify(((VIR_DOMAIN_XML_INTERNAL_STATUS |
 
 /* This internal version can accept VIR_DOMAIN_XML_INTERNAL_*,
  * whereas the public version cannot.  Also, it appends to an existing
- * buffer, rather than flattening to string.  Return -1 on failure.  */
-static int
+ * buffer (possibly with auto-indent), rather than flattening to string.
+ * Return -1 on failure.  */
+int
 virDomainDefFormatInternal(virDomainDefPtr def,
                            unsigned int flags,
                            virBufferPtr buf)
 {
-    /* XXX Also need to take an indentation parameter - either int or
-     * string prefix, so that snapshot xml gets uniform indentation.  */
     unsigned char *uuid;
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     const char *type = NULL;
@@ -11056,8 +11055,10 @@ static char *virDomainObjFormat(virCapsPtr caps,
         ((caps->privateDataXMLFormat)(&buf, obj->privateData)) < 0)
         goto error;
 
+    virBufferAdjustIndent(&buf, 2);
     if (virDomainDefFormatInternal(obj->def, flags, &buf) < 0)
         goto error;
+    virBufferAdjustIndent(&buf, -2);
 
     virBufferAddLit(&buf, "</domstatus>\n");
 
@@ -12074,7 +12075,12 @@ char *virDomainSnapshotDefFormat(char *domain_uuid,
         virBufferAddLit(&buf, "  </disks>\n");
     }
     if (def->dom) {
-        virDomainDefFormatInternal(def->dom, flags, &buf);
+        virBufferAdjustIndent(&buf, 2);
+        if (virDomainDefFormatInternal(def->dom, flags, &buf) < 0) {
+            virBufferFreeAndReset(&buf);
+            return NULL;
+        }
+        virBufferAdjustIndent(&buf, -2);
     } else {
         virBufferAddLit(&buf, "  <domain>\n");
         virBufferAsprintf(&buf, "    <uuid>%s</uuid>\n", domain_uuid);
index 2119b5a71f5a31d508d4d7f27475ae1e9d5b35bb..8ef9d46b35d3a63e0cfc21ae566438b525db6785 100644 (file)
@@ -1683,6 +1683,9 @@ int virDomainDefAddImplicitControllers(virDomainDefPtr def);
 
 char *virDomainDefFormat(virDomainDefPtr def,
                          unsigned int flags);
+int virDomainDefFormatInternal(virDomainDefPtr def,
+                               unsigned int flags,
+                               virBufferPtr buf);
 
 int virDomainCpuSetParse(const char **str,
                          char sep,
index a545f1b1b31a2c9c6f55a8b774dfb8bee64bfae2..8a6e8d30cf4569c8a2e5efeda6a4e1f89aeab9f6 100644 (file)
@@ -267,6 +267,7 @@ virDomainDefCheckABIStability;
 virDomainDefClearDeviceAliases;
 virDomainDefClearPCIAddresses;
 virDomainDefFormat;
+virDomainDefFormatInternal;
 virDomainDefFree;
 virDomainDefParseFile;
 virDomainDefParseNode;
index ac65459377259f0b14ed88d74bb678023c2abf5f..decb0f26238ad0c437e33d5cfabf04b8a014da91 100644 (file)
@@ -384,12 +384,12 @@ static void qemuMigrationCookieGraphicsXMLFormat(virBufferPtr buf,
 }
 
 
-static void qemuMigrationCookieXMLFormat(virBufferPtr buf,
-                                         qemuMigrationCookiePtr mig)
+static int
+qemuMigrationCookieXMLFormat(virBufferPtr buf,
+                             qemuMigrationCookiePtr mig)
 {
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     char hostuuidstr[VIR_UUID_STRING_BUFLEN];
-    char *domXML;
     int i;
 
     virUUIDFormat(mig->uuid, uuidstr);
@@ -422,14 +422,17 @@ static void qemuMigrationCookieXMLFormat(virBufferPtr buf,
 
     if ((mig->flags & QEMU_MIGRATION_COOKIE_PERSISTENT) &&
         mig->persistent) {
-        domXML = virDomainDefFormat(mig->persistent,
-                                    VIR_DOMAIN_XML_INACTIVE |
-                                    VIR_DOMAIN_XML_SECURE);
-        virBufferAdd(buf, domXML, -1);
-        VIR_FREE(domXML);
+        virBufferAdjustIndent(buf, 2);
+        if (virDomainDefFormatInternal(mig->persistent,
+                                       VIR_DOMAIN_XML_INACTIVE |
+                                       VIR_DOMAIN_XML_SECURE,
+                                       buf) < 0)
+            return -1;
+        virBufferAdjustIndent(buf, -2);
     }
 
     virBufferAddLit(buf, "</qemu-migration>\n");
+    return 0;
 }
 
 
@@ -437,10 +440,14 @@ static char *qemuMigrationCookieXMLFormatStr(qemuMigrationCookiePtr mig)
 {
     virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-    qemuMigrationCookieXMLFormat(&buf, mig);
+    if (qemuMigrationCookieXMLFormat(&buf, mig) < 0) {
+        virBufferFreeAndReset(&buf);
+        return NULL;
+    }
 
     if (virBufferError(&buf)) {
         virReportOOMError();
+        virBufferFreeAndReset(&buf);
         return NULL;
     }