On 08/05/2010 12:45 PM, Patrick Dignan wrote:
diff -Naurb libvirt-0.8.2.orig/docs/schemas/storagepool.rng
Ouch - this flattened the whitespace to the point that it makes
reviewing harder to do. Could you consider resending, either via 'git
send-email' or by attaching the output of 'git format-patch', such that
your indentation is preserved?
libvirt-0.8.2.ml/docs/schemas/storagepool.rng
--- libvirt-0.8.2.orig/docs/schemas/storagepool.rng 2010-06-16
17:27:22.000000000 -0500
+++ libvirt-0.8.2.ml/docs/schemas/storagepool.rng 2010-08-05
12:16:31.703536682 -0500
@@ -103,6 +103,19 @@
<ref name='target'/>
</define>
+ <define name='sourceinfovendor'>
+ <element name='vendor'>
+ <attribute name='name'>
+ <text/>
+ </attribute>
+ </element>
+ <element name='product'>
+ <attribute name='name'>
+ <text/>
+ </attribute>
+ </element>
+ </define>
Would it ever make sense to have only vendor or product, rather than to
always require both elements or neither? If so, you either need two
<define>s or some more .rng magic around the two <element>s.
@@ -465,6 +469,18 @@
goto cleanup;
}
+ vendor = virXPathString("string(./vendor/@name)", ctxt);
+
+ if (vendor != NULL) {
+ source->vendor = strdup(vendor);
virXPathString returns malloc'd memory. No need to strdup it; just use
it as is - that will avoid a memory leak, since you didn't call
VIR_FREE(vendor) in the cleanup: label.
+ }
+
+ product = virXPathString("string(./product/@name)", ctxt);
+
+ if (product != NULL) {
+ source->product = strdup(product);
+ }
+
Back to the mutually-essential question - per your current .rng, you
should issue an error here if (product==NULL)!=(vendor==NULL). But is
that really essential, or does it make sense that you could have one and
not the other?
ret = 0;
cleanup:
ctxt->node = relnode;
@@ -838,6 +854,12 @@
virBufferVSprintf(buf," <auth type='chap' login='%s'
passwd='%s'/>\n",
src->auth.chap.login,
src->auth.chap.passwd);
+
+ if (src->vendor != NULL && src->product != NULL) {
+ virBufferVSprintf(buf," <vendor name='%s'/>\n",
src->vendor);
+ virBufferVSprintf(buf," <product name='%s'/>\n",
src->product);
+ }
More code that assumes both elements will either be present or absent
together.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org