[libvirt] [PATCH 7/9] conf: Fix bugs on disk source formating
John Ferlan
jferlan at redhat.com
Thu Jan 31 18:00:22 UTC 2013
On 01/30/2013 01:11 PM, Osier Yang wrote:
> One simple demo:
>
> * Edit the disk conf like:
> <source startupPolicy='optional'/>
>
> The output will be like:
>
> startupPolicy='optional'/>
> ---
> src/conf/domain_conf.c | 36 +++++++++++++++++++++---------------
> 1 files changed, 21 insertions(+), 15 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 9f61c57..7b08b69 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -12249,11 +12249,14 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
> def->startupPolicy) {
> switch (def->type) {
> case VIR_DOMAIN_DISK_TYPE_FILE:
> + if (def->src || def->startupPolicy || def->nseclabels)
> + virBufferAddLit(buf, " <source");
> +
> if (def->src)
> - virBufferEscapeString(buf, " <source file='%s'", def->src);
> + virBufferEscapeString(buf, " file='%s'", def->src);
> if (def->startupPolicy)
> - virBufferEscapeString(buf, " startupPolicy='%s'",
> - startupPolicy);
> + virBufferEscapeString(buf, " startupPolicy='%s'", startupPolicy);
> +
> if (def->nseclabels) {
> virBufferAddLit(buf, ">\n");
> virBufferAdjustIndent(buf, 8);
> @@ -12261,13 +12264,16 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
> virSecurityDeviceLabelDefFormat(buf, def->seclabels[n]);
> virBufferAdjustIndent(buf, -8);
> virBufferAddLit(buf, " </source>\n");
> - } else {
> + } else if (def->src || def->startupPolicy) {
> virBufferAddLit(buf, "/>\n");
> }
> break;
> case VIR_DOMAIN_DISK_TYPE_BLOCK:
> - virBufferEscapeString(buf, " <source dev='%s'",
> - def->src);
> + if (def->src || def->nseclabels)
> + virBufferAddLit(buf, " <source");
> +
> + virBufferEscapeString(buf, " dev='%s'", def->src);
> +
> if (def->nseclabels) {
> virBufferAddLit(buf, ">\n");
> virBufferAdjustIndent(buf, 8);
> @@ -12275,13 +12281,12 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
> virSecurityDeviceLabelDefFormat(buf, def->seclabels[n]);
> virBufferAdjustIndent(buf, -8);
> virBufferAddLit(buf, " </source>\n");
> - } else {
> + } else if (def->src) {
> virBufferAddLit(buf, "/>\n");
> }
> break;
> case VIR_DOMAIN_DISK_TYPE_DIR:
> - virBufferEscapeString(buf, " <source dir='%s'/>\n",
> - def->src);
> + virBufferEscapeString(buf, " <source dir='%s'/>\n", def->src);
> break;
> case VIR_DOMAIN_DISK_TYPE_NETWORK:
> virBufferAsprintf(buf, " <source protocol='%s'",
> @@ -12317,15 +12322,16 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
> }
> break;
> case VIR_DOMAIN_DISK_TYPE_VOLUME:
> - /* Parsing guarantees the def->srcpool->volume cannot be NULL
> - * if def->srcpool->pool is not NULL.
> - */
> + if (def->srcpool || def->startupPolicy)
> + virBufferAddLit(buf, " <source");
> +
> if (def->srcpool)
> - virBufferAsprintf(buf, " <source pool='%s' volume='%s'",
> + virBufferAsprintf(buf, " pool='%s' volume='%s'",
> def->srcpool->pool, def->srcpool->volume);
> if (def->startupPolicy)
> - virBufferEscapeString(buf, " startupPolicy='%s'/>\n", startupPolicy);
> - else
> + virBufferEscapeString(buf, " startupPolicy='%s'", startupPolicy);
> +
> + if (def->srcpool || def->startupPolicy)
> virBufferAddLit(buf, "/>\n");
> break;
> default:
>
ACK
More information about the libvir-list
mailing list