From c4e7c1f212f600f61aba606cd00d7d5ed4eb49b6 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 5 Mar 2018 15:13:41 +0100 Subject: [PATCH] conf: disk: Separate virStorageSource formatting Move out formatting of 'startuPolicy' which is a property of the disk out of the element. Extracting the code formating the content and attributes will also allow reuse in other parts of the code. Signed-off-by: Peter Krempa --- 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 , 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; -- GitLab