
On Fri, Dec 14, 2012 at 06:37:41PM +0800, Osier Yang wrote:
On 2012年12月01日 04:26, Daniel P. Berrange wrote:
diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index 939d213..e61eabe 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -260,42 +260,72 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev, void virDomainHostdevDefFree(virDomainHostdevDefPtr def) @@ -3026,6 +3041,71 @@ error: return ret; }
+static int +virDomainHostdevDefParseXMLCaps(xmlNodePtr node ATTRIBUTE_UNUSED, + xmlXPathContextPtr ctxt, + const char *type, + virDomainHostdevDefPtr def) +{ + xmlNodePtr sourcenode; + int ret = -1; + + /* @type is passed in from the caller rather than read from the + * xml document, because it is specified in different places for + * different kinds of defs - it is an attribute of + *<source>/<address> for an intelligent hostdev (<interface>), + * but an attribute of the toplevel element for a standard + *<hostdev>. (the functions we're going to call expect address + * type to already be known).
Per the @type is passed in from caller...
Correct, but the caller gets that value from the XML which may result in NULL being passed
+ */ + if (type) { + if ((def->source.caps.type + = virDomainHostdevCapsTypeFromString(type))< 0) { + virReportError(VIR_ERR_XML_ERROR, + _("unknown host device source address type '%s'"), + type); + goto error; + } + } else { + virReportError(VIR_ERR_XML_ERROR, + "%s", _("missing source address type")); + goto error; + }
But this indicates a parsing error.
So this check is correct. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|