diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
index 9f97a9efac..92b694c4b3 100644
--- a/src/conf/snapshot_conf.c
+++ b/src/conf/snapshot_conf.c
@@ -703,6 +703,94 @@ virDomainSnapshotDiskDefFormat(virBufferPtr buf,
}
+/* Append XML describing def into buf. Return 0 on success, or -1 on
+ * failure with buf cleared. */
+static int
+virDomainSnapshotDefFormatInternal(virBufferPtr buf,
+ const char *uuidstr,
+ virDomainSnapshotDefPtr def,
+ virCapsPtr caps,
+ virDomainXMLOptionPtr xmlopt,
+ unsigned int flags)
+{
+ size_t i;
+ int domainflags = VIR_DOMAIN_DEF_FORMAT_INACTIVE;
+
+ if (flags & VIR_DOMAIN_SNAPSHOT_FORMAT_SECURE)
+ domainflags |= VIR_DOMAIN_DEF_FORMAT_SECURE;
+
+ virBufferAddLit(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
+
+ virBufferEscapeString(buf, "%s\n", def->name);
+ if (def->description)
+ virBufferEscapeString(buf, "%s\n",
+ def->description);
+ virBufferAsprintf(buf, "%s\n",
+ virDomainSnapshotStateTypeToString(def->state));
+
+ if (def->parent) {
+ virBufferAddLit(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
+ virBufferEscapeString(buf, "%s\n", def->parent);
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "\n");
+ }
+
+ virBufferAsprintf(buf, "%lld\n",
+ def->creationTime);
+
+ if (def->memory) {
+ virBufferAsprintf(buf, "memory));
+ virBufferEscapeString(buf, " file='%s'", def->file);
+ virBufferAddLit(buf, "/>\n");
+ }
+
+ if (def->ndisks) {
+ virBufferAddLit(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
+ for (i = 0; i < def->ndisks; i++) {
+ if (virDomainSnapshotDiskDefFormat(buf, &def->disks[i], xmlopt) < 0)
+ goto error;
+ }
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "\n");
+ }
+
+ if (def->dom) {
+ if (virDomainDefFormatInternal(def->dom, caps, domainflags, buf,
+ xmlopt) < 0)
+ goto error;
+ } else if (uuidstr) {
+ virBufferAddLit(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
+ virBufferAsprintf(buf, "%s\n", uuidstr);
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "\n");
+ }
+
+ if (virSaveCookieFormatBuf(buf, def->cookie,
+ virDomainXMLOptionGetSaveCookie(xmlopt)) < 0)
+ goto error;
+
+ if (flags & VIR_DOMAIN_SNAPSHOT_FORMAT_INTERNAL)
+ virBufferAsprintf(buf, "%d\n", def->current);
+
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "\n");
+
+ if (virBufferCheckError(buf) < 0)
+ goto error;
+
+ return 0;
+
+ error:
+ virBufferFreeAndReset(buf);
+ return -1;
+}
+
+
char *
virDomainSnapshotDefFormat(const char *uuidstr,
virDomainSnapshotDefPtr def,
@@ -711,84 +799,14 @@ virDomainSnapshotDefFormat(const char *uuidstr,
unsigned int flags)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- size_t i;
- int domainflags = VIR_DOMAIN_DEF_FORMAT_INACTIVE;
virCheckFlags(VIR_DOMAIN_SNAPSHOT_FORMAT_SECURE |
VIR_DOMAIN_SNAPSHOT_FORMAT_INTERNAL, NULL);
-
- if (flags & VIR_DOMAIN_SNAPSHOT_FORMAT_SECURE)
- domainflags |= VIR_DOMAIN_DEF_FORMAT_SECURE;
-
- virBufferAddLit(&buf, "\n");
- virBufferAdjustIndent(&buf, 2);
-
- virBufferEscapeString(&buf, "%s\n", def->name);
- if (def->description)
- virBufferEscapeString(&buf, "%s\n",
- def->description);
- virBufferAsprintf(&buf, "%s\n",
- virDomainSnapshotStateTypeToString(def->state));
-
- if (def->parent) {
- virBufferAddLit(&buf, "\n");
- virBufferAdjustIndent(&buf, 2);
- virBufferEscapeString(&buf, "%s\n", def->parent);
- virBufferAdjustIndent(&buf, -2);
- virBufferAddLit(&buf, "\n");
- }
-
- virBufferAsprintf(&buf, "%lld\n",
- def->creationTime);
-
- if (def->memory) {
- virBufferAsprintf(&buf, "memory));
- virBufferEscapeString(&buf, " file='%s'", def->file);
- virBufferAddLit(&buf, "/>\n");
- }
-
- if (def->ndisks) {
- virBufferAddLit(&buf, "\n");
- virBufferAdjustIndent(&buf, 2);
- for (i = 0; i < def->ndisks; i++) {
- if (virDomainSnapshotDiskDefFormat(&buf, &def->disks[i], xmlopt) < 0)
- goto error;
- }
- virBufferAdjustIndent(&buf, -2);
- virBufferAddLit(&buf, "\n");
- }
-
- if (def->dom) {
- if (virDomainDefFormatInternal(def->dom, caps, domainflags, &buf,
- xmlopt) < 0)
- goto error;
- } else if (uuidstr) {
- virBufferAddLit(&buf, "\n");
- virBufferAdjustIndent(&buf, 2);
- virBufferAsprintf(&buf, "%s\n", uuidstr);
- virBufferAdjustIndent(&buf, -2);
- virBufferAddLit(&buf, "\n");
- }
-
- if (virSaveCookieFormatBuf(&buf, def->cookie,
- virDomainXMLOptionGetSaveCookie(xmlopt)) < 0)
- goto error;
-
- if (flags & VIR_DOMAIN_SNAPSHOT_FORMAT_INTERNAL)
- virBufferAsprintf(&buf, "%d\n", def->current);
-
- virBufferAdjustIndent(&buf, -2);
- virBufferAddLit(&buf, "\n");
-
- if (virBufferCheckError(&buf) < 0)
+ if (virDomainSnapshotDefFormatInternal(&buf, uuidstr, def, caps,
+ xmlopt, flags) < 0)
return NULL;
return virBufferContentAndReset(&buf);
-
- error:
- virBufferFreeAndReset(&buf);
- return NULL;
}
/* Snapshot Obj functions */