Currently the XML parser already allows the following syntax:
<disk type='block' device='cdrom'>
<source startupPolicy='optional'/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0'
target='0' unit='0'/>
</disk>
But it did not support writing out the <source> entry without the actual
dev value. It would print dev='(null)'. This change allows it to write
out XML to match the parser.
---
docs/schemas/domaincommon.rng | 8 +++++---
src/conf/domain_conf.c | 5 +++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index ecd3a42..2f596bf 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1140,9 +1140,11 @@
<interleave>
<optional>
<element name="source">
- <attribute name="dev">
- <ref name="absFilePath"/>
- </attribute>
+ <optional>
+ <attribute name="dev">
+ <ref name="absFilePath"/>
+ </attribute>
+ </optional>
<optional>
<ref name="startupPolicy"/>
</optional>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a9ff61c..d4b2dfc 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -14202,8 +14202,9 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
}
break;
case VIR_DOMAIN_DISK_TYPE_BLOCK:
- virBufferEscapeString(buf, " <source dev='%s'",
- def->src);
+ virBufferAddLit(buf, " <source");
+ if (def->src)
+ virBufferEscapeString(buf, " dev='%s'", def->src);
if (def->startupPolicy)
virBufferEscapeString(buf, " startupPolicy='%s'",
startupPolicy);
--
1.8.1.5