From: Peter Krempa Date: Tue, 15 Aug 2017 13:11:45 +0000 (+0200) Subject: conf: Add 'basic' post parse callback X-Git-Tag: v3.7.0-rc1~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f19c9325ea266eeb634e13e8a1a72ef4a1b0e42;p=thirdparty%2Flibvirt.git conf: Add 'basic' post parse callback Add yet another post parse callback, which is executed prior the real one without @parseOpaque. This is meant to set basics before @parseOpaque (in case of the qemu driver qemuCaps) can be allocated. This callback will allow to optimize passing of custom parseOpaque through the callbacks. --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3db56ffb7a..b7519c8b34 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4828,6 +4828,15 @@ virDomainDefPostParse(virDomainDefPtr def, .parseOpaque = parseOpaque, }; + /* call the basic post parse callback */ + if (xmlopt->config.domainPostParseBasicCallback) { + ret = xmlopt->config.domainPostParseBasicCallback(def, caps, + xmlopt->config.priv); + + if (ret < 0) + return ret; + } + /* this must be done before the hypervisor-specific callback, * in case presence of a controller at a specific index is checked */ diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index f857f509e4..bb5faa8b8e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2497,6 +2497,15 @@ typedef enum { typedef struct _virDomainXMLOption virDomainXMLOption; typedef virDomainXMLOption *virDomainXMLOptionPtr; + +/* Called after everything else has been parsed, for adjusting basics. + * This has similar semantics to virDomainDefPostParseCallback, but no + * parseOpaque is used. This callback is run prior to + * virDomainDefPostParseCallback. */ +typedef int (*virDomainDefPostParseBasicCallback)(virDomainDefPtr def, + virCapsPtr caps, + void *opaque); + /* Called once after everything else has been parsed, for adjusting * overall domain defaults. * @parseOpaque is opaque data passed by virDomainDefParse* caller, @@ -2546,6 +2555,7 @@ typedef struct _virDomainDefParserConfig virDomainDefParserConfig; typedef virDomainDefParserConfig *virDomainDefParserConfigPtr; struct _virDomainDefParserConfig { /* driver domain definition callbacks */ + virDomainDefPostParseBasicCallback domainPostParseBasicCallback; virDomainDefPostParseCallback domainPostParseCallback; virDomainDeviceDefPostParseCallback devicesPostParseCallback; virDomainDefAssignAddressesCallback assignAddressesCallback;