Move out formatting of 'startuPolicy' which is a property of the disk
out of the <source> element. Extracting the code formating the content
and attributes will also allow reuse in other parts of the code.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 90 ++++++++++++++++++++++++++++--------------------
src/conf/domain_conf.h | 7 ++++
src/libvirt_private.syms | 1 +
3 files changed, 60 insertions(+), 38 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b77cc8ed9f..1c79d2b49b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -22798,45 +22798,39 @@ virDomainDiskSourceFormatPrivateData(virBufferPtr buf,
}
-static int
-virDomainDiskSourceFormatInternal(virBufferPtr buf,
- virStorageSourcePtr src,
- int policy,
- unsigned int flags,
- bool skipSeclabels,
- virDomainXMLOptionPtr xmlopt)
+int
+virDomainStorageSourceFormat(virBufferPtr attrBuf,
+ virBufferPtr childBuf,
+ virStorageSourcePtr src,
+ unsigned int flags,
+ bool skipSeclabels)
{
- virBuffer attrBuf = VIR_BUFFER_INITIALIZER;
- virBuffer childBuf = VIR_BUFFER_INITIALIZER;
-
- virBufferSetChildIndent(&childBuf, buf);
-
switch ((virStorageType)src->type) {
case VIR_STORAGE_TYPE_FILE:
- virBufferEscapeString(&attrBuf, " file='%s'",
src->path);
+ virBufferEscapeString(attrBuf, " file='%s'", src->path);
break;
case VIR_STORAGE_TYPE_BLOCK:
- virBufferEscapeString(&attrBuf, " dev='%s'",
src->path);
+ virBufferEscapeString(attrBuf, " dev='%s'", src->path);
break;
case VIR_STORAGE_TYPE_DIR:
- virBufferEscapeString(&attrBuf, " dir='%s'",
src->path);
+ virBufferEscapeString(attrBuf, " dir='%s'", src->path);
break;
case VIR_STORAGE_TYPE_NETWORK:
- if (virDomainDiskSourceFormatNetwork(&attrBuf, &childBuf,
+ if (virDomainDiskSourceFormatNetwork(attrBuf, childBuf,
src, flags) < 0)
- goto error;
+ return -1;
break;
case VIR_STORAGE_TYPE_VOLUME:
if (src->srcpool) {
- virBufferEscapeString(&attrBuf, " pool='%s'",
src->srcpool->pool);
- virBufferEscapeString(&attrBuf, " volume='%s'",
+ virBufferEscapeString(attrBuf, " pool='%s'",
src->srcpool->pool);
+ virBufferEscapeString(attrBuf, " volume='%s'",
src->srcpool->volume);
if (src->srcpool->mode)
- virBufferAsprintf(&attrBuf, " mode='%s'",
+ virBufferAsprintf(attrBuf, " mode='%s'",
virStorageSourcePoolModeTypeToString(src->srcpool->mode));
}
@@ -22846,18 +22840,12 @@ virDomainDiskSourceFormatInternal(virBufferPtr buf,
case VIR_STORAGE_TYPE_LAST:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected disk type %d"), src->type);
- goto error;
+ return -1;
}
- if (src->type != VIR_STORAGE_TYPE_NETWORK) {
- if (policy)
- virBufferEscapeString(&attrBuf, " startupPolicy='%s'",
- virDomainStartupPolicyTypeToString(policy));
-
- if (!skipSeclabels)
- virDomainSourceDefFormatSeclabel(&childBuf, src->nseclabels,
- src->seclabels, flags);
- }
+ if (!skipSeclabels && src->type != VIR_STORAGE_TYPE_NETWORK)
+ virDomainSourceDefFormatSeclabel(childBuf, src->nseclabels,
+ src->seclabels, flags);
/* Storage Source formatting will not carry through the blunder
* that disk source formatting had at one time to format the
@@ -22866,26 +22854,52 @@ virDomainDiskSourceFormatInternal(virBufferPtr buf,
* So avoid formatting it for volumes. */
if (src->auth && src->authInherited &&
src->type != VIR_STORAGE_TYPE_VOLUME)
- virStorageAuthDefFormat(&childBuf, src->auth);
+ virStorageAuthDefFormat(childBuf, src->auth);
/* If we found encryption as a child of <source>, then format it
* as we found it. */
if (src->encryption && src->encryptionInherited &&
- virStorageEncryptionFormat(&childBuf, src->encryption) < 0)
- goto error;
+ virStorageEncryptionFormat(childBuf, src->encryption) < 0)
+ return -1;
+
+ return 0;
+}
+
+
+static int
+virDomainDiskSourceFormatInternal(virBufferPtr buf,
+ virStorageSourcePtr src,
+ int policy,
+ unsigned int flags,
+ bool skipSeclabels,
+ virDomainXMLOptionPtr xmlopt)
+{
+ virBuffer attrBuf = VIR_BUFFER_INITIALIZER;
+ virBuffer childBuf = VIR_BUFFER_INITIALIZER;
+ int ret = -1;
+
+ virBufferSetChildIndent(&childBuf, buf);
+
+ if (virDomainStorageSourceFormat(&attrBuf, &childBuf, src, flags,
+ skipSeclabels) < 0)
+ goto cleanup;
+
+ if (policy && src->type != VIR_STORAGE_TYPE_NETWORK)
+ virBufferEscapeString(&attrBuf, " startupPolicy='%s'",
+ virDomainStartupPolicyTypeToString(policy));
if (virDomainDiskSourceFormatPrivateData(&childBuf, src, flags, xmlopt) < 0)
- goto error;
+ goto cleanup;
if (virXMLFormatElement(buf, "source", &attrBuf, &childBuf) <
0)
- goto error;
+ goto cleanup;
- return 0;
+ ret = 0;
- error:
+ cleanup:
virBufferFreeAndReset(&attrBuf);
virBufferFreeAndReset(&childBuf);
- return -1;
+ return ret;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 337ce79425..61379e50fe 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3427,6 +3427,13 @@ int virDomainDiskDefCheckDuplicateInfo(const virDomainDiskDef *a,
const virDomainDiskDef *b)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+int virDomainStorageSourceFormat(virBufferPtr attrBuf,
+ virBufferPtr childBuf,
+ virStorageSourcePtr src,
+ unsigned int flags,
+ bool skipSeclabels)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
+
int virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def,
int maplen,
int ncpumaps,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 3766e20d3b..c67bce7389 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -542,6 +542,7 @@ virDomainStateReasonFromString;
virDomainStateReasonToString;
virDomainStateTypeFromString;
virDomainStateTypeToString;
+virDomainStorageSourceFormat;
virDomainTaintTypeFromString;
virDomainTaintTypeToString;
virDomainTimerModeTypeFromString;
--
2.16.2