Move the code to a separate function.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 84 ++++++++++++++++++++++++++++++--------------------
1 file changed, 50 insertions(+), 34 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 6461dfb936..30078bb14b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -23651,6 +23651,54 @@ virDomainDiskDefFormatDriver(virBufferPtr buf,
}
+static int
+virDomainDiskDefFormatMirror(virBufferPtr buf,
+ virDomainDiskDefPtr disk,
+ unsigned int flags,
+ virDomainXMLOptionPtr xmlopt)
+{
+ const char *formatStr = NULL;
+
+ /* 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
+ * the new style similar to backingStore, but for back-compat on
+ * blockcopy files we also have to output old style attributes.
+ * The parser accepts either style across libvirtd upgrades. */
+
+ if (!disk->mirror ||
+ (flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
+ return 0;
+
+ if (disk->mirror->format)
+ formatStr = virStorageFileFormatTypeToString(disk->mirror->format);
+ virBufferAsprintf(buf, "<mirror 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(buf, " job='%s'",
+ virDomainBlockJobTypeToString(disk->mirrorJob));
+ if (disk->mirrorState) {
+ const char *mirror;
+
+ 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, 0, xmlopt) < 0)
+ return -1;
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "</mirror>\n");
+
+ return 0;
+}
+
+
static int
virDomainDiskDefFormat(virBufferPtr buf,
virDomainDiskDefPtr def,
@@ -23726,40 +23774,8 @@ virDomainDiskDefFormat(virBufferPtr buf,
virDomainDiskGeometryDefFormat(buf, def);
virDomainDiskBlockIoDefFormat(buf, def);
- /* 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
- * the new style similar to backingStore, but for back-compat on
- * blockcopy files we also have to output old style attributes.
- * The parser accepts either style across libvirtd upgrades. */
- if (def->mirror && !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) {
- const char *formatStr = NULL;
-
- if (def->mirror->format)
- formatStr = virStorageFileFormatTypeToString(def->mirror->format);
- virBufferAsprintf(buf, "<mirror type='%s'",
- virStorageTypeToString(def->mirror->type));
- if (def->mirror->type == VIR_STORAGE_TYPE_FILE &&
- def->mirrorJob == VIR_DOMAIN_BLOCK_JOB_TYPE_COPY) {
- virBufferEscapeString(buf, " file='%s'",
def->mirror->path);
- virBufferEscapeString(buf, " format='%s'", formatStr);
- }
- virBufferEscapeString(buf, " job='%s'",
- virDomainBlockJobTypeToString(def->mirrorJob));
- if (def->mirrorState) {
- const char *mirror;
-
- mirror = virDomainDiskMirrorStateTypeToString(def->mirrorState);
- virBufferEscapeString(buf, " ready='%s'", mirror);
- }
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- virBufferEscapeString(buf, "<format type='%s'/>\n",
formatStr);
- if (virDomainDiskSourceFormat(buf, def->mirror, 0, 0, xmlopt) < 0)
- return -1;
- virBufferAdjustIndent(buf, -2);
- virBufferAddLit(buf, "</mirror>\n");
- }
+ if (virDomainDiskDefFormatMirror(buf, def, flags, xmlopt) < 0)
+ return -1;
virBufferAsprintf(buf, "<target dev='%s' bus='%s'",
def->dst, bus);
--
2.16.2