
On Wed, Apr 21, 2010 at 12:01:17PM -0400, Chris Lalancette wrote:
This patch adds namespace XML parsers to be hooked into the main domain parser. This allows for individual hypervisor drivers to add per-namespace XML into the main domain XML.
Signed-off-by: Chris Lalancette <clalance@redhat.com> --- src/conf/capabilities.c | 2 ++ src/conf/capabilities.h | 17 +++++++++++++++++ src/conf/domain_conf.c | 44 +++++++++++++++++++++++++++++++++++++------- src/conf/domain_conf.h | 3 +++ 4 files changed, 59 insertions(+), 7 deletions(-)
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index dafd821..d4a6070 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -174,6 +174,8 @@ virCapabilitiesFree(virCapsPtr caps) { VIR_FREE(caps->host.secModel.doi); virCPUDefFree(caps->host.cpu);
+ VIR_FREE(caps->ns); + VIR_FREE(caps); }
I'm inclined to say caps->ns can just be a pointer to a statically declared table as we with for the main driver function tables, avoiding need to free it.
@@ -4366,6 +4372,22 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, goto error; }
+ /* callout to per-namespace parsers (in the individual drivers) */ + if (caps->ns) { + /* we have to make a copy of all of the callback pointers here since + * we won't have the virCaps structure available during free + */ + def->ns.parse = caps->ns->parse; + def->ns.free = caps->ns->free; + def->ns.format = caps->ns->format; + def->ns.href = caps->ns->href; + + if (def->ns.parse) { + if ((def->ns.parse)(xml, root, ctxt, &def->namespaceData) < 0) + goto error; + } + }
If we're using the static driver tables, we can just use a plain assignment here like 'def->ns = caps->ns" Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|