[libvirt] [PATCH 00/21] conf: namespaces: remove some copy'n'paste

Ján Tomko (21): virDomainDefNamespaceParse: remove unused attributes virDomainDefParseXML: remove unused parameter prepare: domain format if format not href conf: ns.parse: decouple call from condition util: introduce virXMLNamespace conf: network: use generic XML namespace types conf: storage: use generic XML namespace types conf: domain: use generic XML namespace types xml: virXMLNamespace: add prefix conf: network: store namespace prefix conf: domain: store namespace prefix conf: storage: store namespace prefix conf: test: store namespace href util: introduce virXMLNamespaceFormatNS conf: network: use virXMLNamespaceFormatNS conf: storage: use virXMLNamespaceFormatNS conf: domain: use virXMLNamespaceFormatNS util: xml: introduce virXMLNamespaceRegister conf: network: use virXMLNamespaceRegister conf: storage: use virXMLNamespaceRegister conf: domain: use virXMLNamespaceRegister src/bhyve/bhyve_domain.c | 18 ++++-------------- src/bhyve/bhyve_domain.h | 2 +- src/conf/capabilities.h | 13 ------------- src/conf/domain_conf.c | 24 +++++++++++++----------- src/conf/domain_conf.h | 6 +++--- src/conf/network_conf.c | 13 ++++++++----- src/conf/network_conf.h | 25 ++++--------------------- src/conf/storage_conf.c | 15 +++++++++------ src/conf/storage_conf.h | 23 ++++------------------- src/conf/virconftypes.h | 3 --- src/lxc/lxc_domain.c | 17 ++++------------- src/lxc/lxc_domain.h | 2 +- src/network/bridge_driver.c | 15 +++------------ src/network/bridge_driver.h | 2 +- src/qemu/qemu_domain.c | 17 ++++------------- src/qemu/qemu_domain.h | 2 +- src/storage/storage_backend_fs.c | 14 +++----------- src/storage/storage_backend_rbd.c | 14 +++----------- src/storage/storage_util.c | 2 +- src/storage/storage_util.h | 2 +- src/test/test_driver.c | 23 ++++++++++------------- src/util/virxml.c | 27 +++++++++++++++++++++++++++ src/util/virxml.h | 22 ++++++++++++++++++++++ src/vmx/vmx.c | 5 +++-- 24 files changed, 130 insertions(+), 176 deletions(-) -- 2.19.2

Neither the xmlDocPtr nor the root xmlNode (also passed in the XPathContext) are interesting to the callees. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 4 +--- src/conf/capabilities.h | 3 +-- src/conf/domain_conf.c | 4 ++-- src/lxc/lxc_domain.c | 4 +--- src/qemu/qemu_domain.c | 4 +--- src/test/test_driver.c | 4 +--- 6 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 67cd6cc039..51366f8e26 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -196,9 +196,7 @@ bhyveDomainDefNamespaceFree(void *nsdata) } static int -bhyveDomainDefNamespaceParse(xmlDocPtr xml ATTRIBUTE_UNUSED, - xmlNodePtr root ATTRIBUTE_UNUSED, - xmlXPathContextPtr ctxt, +bhyveDomainDefNamespaceParse(xmlXPathContextPtr ctxt, void **data) { bhyveDomainCmdlineDefPtr cmd = NULL; diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h index 28b398891a..41c81ceeb1 100644 --- a/src/conf/capabilities.h +++ b/src/conf/capabilities.h @@ -182,8 +182,7 @@ struct _virCapsStoragePool { }; -typedef int (*virDomainDefNamespaceParse)(xmlDocPtr, xmlNodePtr, - xmlXPathContextPtr, void **); +typedef int (*virDomainDefNamespaceParse)(xmlXPathContextPtr, void **); typedef void (*virDomainDefNamespaceFree)(void *); typedef int (*virDomainDefNamespaceXMLFormat)(virBufferPtr, void *); typedef const char *(*virDomainDefNamespaceHref)(void); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 604e006dab..40b5f9b801 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -19643,7 +19643,7 @@ virDomainMemorytuneDefParse(virDomainDefPtr def, static virDomainDefPtr virDomainDefParseXML(xmlDocPtr xml, - xmlNodePtr root, + xmlNodePtr root ATTRIBUTE_UNUSED, xmlXPathContextPtr ctxt, virCapsPtr caps, virDomainXMLOptionPtr xmlopt, @@ -21345,7 +21345,7 @@ virDomainDefParseXML(xmlDocPtr xml, def->ns = xmlopt->ns; if (def->ns.parse && - (def->ns.parse)(xml, root, ctxt, &def->namespaceData) < 0) + (def->ns.parse)(ctxt, &def->namespaceData) < 0) goto error; return def; diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index 51a9fd36eb..87f3c7bd63 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -207,9 +207,7 @@ lxcDomainDefNamespaceFree(void *nsdata) } static int -lxcDomainDefNamespaceParse(xmlDocPtr xml ATTRIBUTE_UNUSED, - xmlNodePtr root ATTRIBUTE_UNUSED, - xmlXPathContextPtr ctxt, +lxcDomainDefNamespaceParse(xmlXPathContextPtr ctxt, void **data) { lxcDomainDefPtr lxcDef = NULL; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a06672333c..880307f215 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3626,9 +3626,7 @@ qemuDomainDefNamespaceParseCaps(qemuDomainXmlNsDefPtr nsdef, static int -qemuDomainDefNamespaceParse(xmlDocPtr xml ATTRIBUTE_UNUSED, - xmlNodePtr root ATTRIBUTE_UNUSED, - xmlXPathContextPtr ctxt, +qemuDomainDefNamespaceParse(xmlXPathContextPtr ctxt, void **data) { qemuDomainXmlNsDefPtr nsdata = NULL; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index c39eef2d4b..a59984051d 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -198,9 +198,7 @@ testDomainDefNamespaceFree(void *data) } static int -testDomainDefNamespaceParse(xmlDocPtr xml ATTRIBUTE_UNUSED, - xmlNodePtr root ATTRIBUTE_UNUSED, - xmlXPathContextPtr ctxt, +testDomainDefNamespaceParse(xmlXPathContextPtr ctxt, void **data) { testDomainNamespaceDefPtr nsdata = NULL; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:23 +0200, Ján Tomko wrote:
Neither the xmlDocPtr nor the root xmlNode (also passed in the XPathContext) are interesting to the callees.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 4 +--- src/conf/capabilities.h | 3 +-- src/conf/domain_conf.c | 4 ++-- src/lxc/lxc_domain.c | 4 +--- src/qemu/qemu_domain.c | 4 +--- src/test/test_driver.c | 4 +--- 6 files changed, 7 insertions(+), 16 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

We do not need to pass the root node, since it's already included in the XPathContext. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 40b5f9b801..1f2a91c710 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -19643,7 +19643,6 @@ virDomainMemorytuneDefParse(virDomainDefPtr def, static virDomainDefPtr virDomainDefParseXML(xmlDocPtr xml, - xmlNodePtr root ATTRIBUTE_UNUSED, xmlXPathContextPtr ctxt, virCapsPtr caps, virDomainXMLOptionPtr xmlopt, @@ -21386,7 +21385,7 @@ virDomainObjParseXML(xmlDocPtr xml, oldnode = ctxt->node; ctxt->node = config; - obj->def = virDomainDefParseXML(xml, config, ctxt, caps, xmlopt, flags); + obj->def = virDomainDefParseXML(xml, ctxt, caps, xmlopt, flags); ctxt->node = oldnode; if (!obj->def) goto error; @@ -21531,7 +21530,7 @@ virDomainDefParseNode(xmlDocPtr xml, ctxt->node = root; - if (!(def = virDomainDefParseXML(xml, root, ctxt, caps, xmlopt, flags))) + if (!(def = virDomainDefParseXML(xml, ctxt, caps, xmlopt, flags))) goto cleanup; /* callback to fill driver specific domain aspects */ -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:24 +0200, Ján Tomko wrote:
We do not need to pass the root node, since it's already included in the XPathContext.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

--- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1f2a91c710..f848483235 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28312,7 +28312,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, virBufferAsprintf(buf, "<domain type='%s'", type); if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) virBufferAsprintf(buf, " id='%d'", def->id); - if (def->namespaceData && def->ns.href) + if (def->namespaceData && def->ns.format) virBufferAsprintf(buf, " %s", (def->ns.href)()); virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2); -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:25 +0200, Ján Tomko wrote:
--- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 1f2a91c710..f848483235 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28312,7 +28312,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, virBufferAsprintf(buf, "<domain type='%s'", type); if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) virBufferAsprintf(buf, " id='%d'", def->id); - if (def->namespaceData && def->ns.href) + if (def->namespaceData && def->ns.format) virBufferAsprintf(buf, " %s", (def->ns.href)()); virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2);
Checking def->ns.format when you want to call def->ns.href doesn't make sense. Did you perhaps wanted to check for both as formatting the namespace attribute useless when no XML using it will be formatted? Jirka

In the future we will perform more actions if ns.parse is present. Decouple the condition from the actual call. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 7 ++++--- src/conf/network_conf.c | 7 ++++--- src/conf/storage_conf.c | 7 ++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f848483235..c8c304d2a2 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -21343,9 +21343,10 @@ virDomainDefParseXML(xmlDocPtr xml, */ def->ns = xmlopt->ns; - if (def->ns.parse && - (def->ns.parse)(ctxt, &def->namespaceData) < 0) - goto error; + if (def->ns.parse) { + if ((def->ns.parse)(ctxt, &def->namespaceData) < 0) + goto error; + } return def; diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index c5a243684a..f55b9e5409 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2050,9 +2050,10 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, if (xmlopt) def->ns = xmlopt->ns; - if (def->ns.parse && - (def->ns.parse)(ctxt, &def->namespaceData) < 0) - goto error; + if (def->ns.parse) { + if ((def->ns.parse)(ctxt, &def->namespaceData) < 0) + goto error; + } ctxt->node = save; return def; diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 05055cdc29..a2b977989f 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -997,9 +997,10 @@ virStoragePoolDefParseXML(xmlXPathContextPtr ctxt) /* Make a copy of all the callback pointers here for easier use, * especially during the virStoragePoolSourceClear method */ def->ns = options->ns; - if (def->ns.parse && - (def->ns.parse)(ctxt, &def->namespaceData) < 0) - return NULL; + if (def->ns.parse) { + if ((def->ns.parse)(ctxt, &def->namespaceData) < 0) + return NULL; + } VIR_STEAL_PTR(ret, def); return ret; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:26 +0200, Ján Tomko wrote:
In the future we will perform more actions if ns.parse is present. Decouple the condition from the actual call.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 7 ++++--- src/conf/network_conf.c | 7 ++++--- src/conf/storage_conf.c | 7 ++++--- 3 files changed, 12 insertions(+), 9 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

For various XMLs, we allow a custom namespace for passing unsupported configurations. Introduce a single structure to hold all the driver-specific functions to remove duplication. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/util/virxml.h b/src/util/virxml.h index 6208977dd1..5b209bb040 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -246,3 +246,17 @@ VIR_DEFINE_AUTOCLEAN_FUNC(virXPathContextNodeSave, virXPathContextNodeRestore); VIR_DEFINE_AUTOPTR_FUNC(xmlDoc, xmlFreeDoc); VIR_DEFINE_AUTOPTR_FUNC(xmlXPathContext, xmlXPathFreeContext); + +typedef int (*virXMLNamespaceParse)(xmlXPathContextPtr, void **); +typedef void (*virXMLNamespaceFree)(void *); +typedef int (*virXMLNamespaceFormat)(virBufferPtr, void *); +typedef const char *(*virXMLNamespaceHref)(void); + +struct _virXMLNamespace { + virXMLNamespaceParse parse; + virXMLNamespaceFree free; + virXMLNamespaceFormat format; + virXMLNamespaceHref href; +}; +typedef struct _virXMLNamespace virXMLNamespace; +typedef virXMLNamespace *virXMLNamespacePtr; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:27 +0200, Ján Tomko wrote:
For various XMLs, we allow a custom namespace for passing unsupported configurations.
Introduce a single structure to hold all the driver-specific functions to remove duplication.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/src/util/virxml.h b/src/util/virxml.h index 6208977dd1..5b209bb040 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -246,3 +246,17 @@ VIR_DEFINE_AUTOCLEAN_FUNC(virXPathContextNodeSave, virXPathContextNodeRestore);
VIR_DEFINE_AUTOPTR_FUNC(xmlDoc, xmlFreeDoc); VIR_DEFINE_AUTOPTR_FUNC(xmlXPathContext, xmlXPathFreeContext); + +typedef int (*virXMLNamespaceParse)(xmlXPathContextPtr, void **); +typedef void (*virXMLNamespaceFree)(void *); +typedef int (*virXMLNamespaceFormat)(virBufferPtr, void *); +typedef const char *(*virXMLNamespaceHref)(void);
I know you copied it, but I'd prefer to see the parameter names here rather than just their types.
+ +struct _virXMLNamespace { + virXMLNamespaceParse parse; + virXMLNamespaceFree free; + virXMLNamespaceFormat format; + virXMLNamespaceHref href; +}; +typedef struct _virXMLNamespace virXMLNamespace; +typedef virXMLNamespace *virXMLNamespacePtr;
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

There is no need to copy and paste the same types pointing to void all over the place. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/network_conf.c | 2 +- src/conf/network_conf.h | 25 ++++--------------------- src/network/bridge_driver.c | 2 +- src/network/bridge_driver.h | 2 +- 4 files changed, 7 insertions(+), 24 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index f55b9e5409..2c3a11fb10 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -93,7 +93,7 @@ virNetworkXMLOnceInit(void) VIR_ONCE_GLOBAL_INIT(virNetworkXML); virNetworkXMLOptionPtr -virNetworkXMLOptionNew(virNetworkXMLNamespacePtr xmlns) +virNetworkXMLOptionNew(virXMLNamespacePtr xmlns) { virNetworkXMLOptionPtr xmlopt; diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index b167b57e85..d5dd8480db 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -23,10 +23,6 @@ #define DNS_RECORD_LENGTH_SRV (512 - 30) /* Limit minus overhead as mentioned in RFC-2782 */ -#include <libxml/parser.h> -#include <libxml/tree.h> -#include <libxml/xpath.h> - #include "internal.h" #include "virthread.h" #include "virsocketaddr.h" @@ -40,25 +36,12 @@ #include "virobject.h" #include "virmacmap.h" #include "virenum.h" - -typedef int (*virNetworkDefNamespaceParse)(xmlXPathContextPtr, void **); -typedef void (*virNetworkDefNamespaceFree)(void *); -typedef int (*virNetworkDefNamespaceXMLFormat)(virBufferPtr, void *); -typedef const char *(*virNetworkDefNamespaceHref)(void); - -typedef struct _virNetworkXMLNamespace virNetworkXMLNamespace; -typedef virNetworkXMLNamespace *virNetworkXMLNamespacePtr; -struct _virNetworkXMLNamespace { - virNetworkDefNamespaceParse parse; - virNetworkDefNamespaceFree free; - virNetworkDefNamespaceXMLFormat format; - virNetworkDefNamespaceHref href; -}; +#include "virxml.h" struct _virNetworkXMLOption { virObject parent; - virNetworkXMLNamespace ns; + virXMLNamespace ns; }; typedef struct _virNetworkXMLOption virNetworkXMLOption; typedef virNetworkXMLOption *virNetworkXMLOptionPtr; @@ -295,7 +278,7 @@ struct _virNetworkDef { /* Network specific XML namespace data */ void *namespaceData; - virNetworkXMLNamespace ns; + virXMLNamespace ns; }; typedef enum { @@ -317,7 +300,7 @@ enum { }; virNetworkXMLOptionPtr -virNetworkXMLOptionNew(virNetworkXMLNamespacePtr xmlns); +virNetworkXMLOptionNew(virXMLNamespacePtr xmlns); virNetworkDefPtr virNetworkDefCopy(virNetworkDefPtr def, diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 9059296e55..b34b742bfa 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -248,7 +248,7 @@ networkDnsmasqDefNamespaceHref(void) } -virNetworkXMLNamespace networkDnsmasqXMLNamespace = { +virXMLNamespace networkDnsmasqXMLNamespace = { .parse = networkDnsmasqDefNamespaceParse, .free = networkDnsmasqDefNamespaceFree, .format = networkDnsmasqDefNamespaceFormatXML, diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h index b095388a0b..d35850d293 100644 --- a/src/network/bridge_driver.h +++ b/src/network/bridge_driver.h @@ -27,7 +27,7 @@ #include "virdnsmasq.h" #include "virnetworkobj.h" -extern virNetworkXMLNamespace networkDnsmasqXMLNamespace; +extern virXMLNamespace networkDnsmasqXMLNamespace; typedef struct _networkDnsmasqXmlNsDef networkDnsmasqXmlNsDef; typedef networkDnsmasqXmlNsDef *networkDnsmasqXmlNsDefPtr; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:28 +0200, Ján Tomko wrote:
There is no need to copy and paste the same types pointing to void all over the place.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/network_conf.c | 2 +- src/conf/network_conf.h | 25 ++++--------------------- src/network/bridge_driver.c | 2 +- src/network/bridge_driver.h | 2 +- 4 files changed, 7 insertions(+), 24 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

There is no need to copy and paste the same types pointing to void all over the place. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/storage_conf.c | 4 ++-- src/conf/storage_conf.h | 23 ++++------------------- src/storage/storage_backend_fs.c | 2 +- src/storage/storage_backend_rbd.c | 2 +- src/storage/storage_util.c | 2 +- src/storage/storage_util.h | 2 +- 6 files changed, 10 insertions(+), 25 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index a2b977989f..fb8a16a119 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -140,7 +140,7 @@ struct _virStoragePoolOptions { int defaultFormat; int lastFormat; - virStoragePoolXMLNamespace ns; + virXMLNamespace ns; virStoragePoolFormatToString formatToString; virStoragePoolFormatFromString formatFromString; @@ -341,7 +341,7 @@ virStoragePoolOptionsForPoolType(int type) */ int virStoragePoolOptionsPoolTypeSetXMLNamespace(int type, - virStoragePoolXMLNamespacePtr ns) + virXMLNamespacePtr ns) { int ret = -1; virStoragePoolTypeInfoPtr backend = virStoragePoolTypeInfoLookup(type); diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h index f399ac6192..1f62803a9d 100644 --- a/src/conf/storage_conf.h +++ b/src/conf/storage_conf.h @@ -31,28 +31,13 @@ #include "storage_adapter_conf.h" #include "virautoclean.h" #include "virenum.h" +#include "virxml.h" + -#include <libxml/tree.h> - -/* Various callbacks needed to parse/create Storage Pool XML's using - * a private namespace */ -typedef int (*virStoragePoolDefNamespaceParse)(xmlXPathContextPtr, void **); -typedef void (*virStoragePoolDefNamespaceFree)(void *); -typedef int (*virStoragePoolDefNamespaceXMLFormat)(virBufferPtr, void *); -typedef const char *(*virStoragePoolDefNamespaceHref)(void); - -typedef struct _virStoragePoolXMLNamespace virStoragePoolXMLNamespace; -typedef virStoragePoolXMLNamespace *virStoragePoolXMLNamespacePtr; -struct _virStoragePoolXMLNamespace { - virStoragePoolDefNamespaceParse parse; - virStoragePoolDefNamespaceFree free; - virStoragePoolDefNamespaceXMLFormat format; - virStoragePoolDefNamespaceHref href; -}; int virStoragePoolOptionsPoolTypeSetXMLNamespace(int type, - virStoragePoolXMLNamespacePtr ns); + virXMLNamespacePtr ns); int virStoragePoolOptionsFormatPool(virBufferPtr buf, @@ -277,7 +262,7 @@ struct _virStoragePoolDef { /* Pool backend specific XML namespace data */ void *namespaceData; - virStoragePoolXMLNamespace ns; + virXMLNamespace ns; }; typedef struct _virStoragePoolSourceList virStoragePoolSourceList; diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index ae4e9a03a3..d575b75449 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -701,7 +701,7 @@ virStorageBackend virStorageBackendNetFileSystem = { .wipeVol = virStorageBackendVolWipeLocal, }; -static virStoragePoolXMLNamespace virStoragePoolFSXMLNamespace = { +static virXMLNamespace virStoragePoolFSXMLNamespace = { .parse = virStoragePoolDefFSNamespaceParse, .free = virStoragePoolDefFSNamespaceFree, .format = virStoragePoolDefFSNamespaceFormatXML, diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c index f3104ba310..e490c690f5 100644 --- a/src/storage/storage_backend_rbd.c +++ b/src/storage/storage_backend_rbd.c @@ -1542,7 +1542,7 @@ virStorageBackend virStorageBackendRBD = { }; -static virStoragePoolXMLNamespace virStoragePoolRBDXMLNamespace = { +static virXMLNamespace virStoragePoolRBDXMLNamespace = { .parse = virStoragePoolDefRBDNamespaceParse, .free = virStoragePoolDefRBDNamespaceFree, .format = virStoragePoolDefRBDNamespaceFormatXML, diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c index 62f857f9ea..3dc5ad2969 100644 --- a/src/storage/storage_util.c +++ b/src/storage/storage_util.c @@ -92,7 +92,7 @@ VIR_LOG_INIT("storage.storage_util"); */ int virStorageBackendNamespaceInit(int poolType, - virStoragePoolXMLNamespacePtr xmlns) + virXMLNamespacePtr xmlns) { return virStoragePoolOptionsPoolTypeSetXMLNamespace(poolType, xmlns); } diff --git a/src/storage/storage_util.h b/src/storage/storage_util.h index 6df5928d9b..705e23631d 100644 --- a/src/storage/storage_util.h +++ b/src/storage/storage_util.h @@ -36,7 +36,7 @@ struct _virStoragePoolFSMountOptionsDef { int virStorageBackendNamespaceInit(int poolType, - virStoragePoolXMLNamespacePtr xmlns); + virXMLNamespacePtr xmlns); /* File creation/cloning functions used for cloning between backends */ -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:29 +0200, Ján Tomko wrote:
There is no need to copy and paste the same types pointing to void all over the place.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/storage_conf.c | 4 ++-- src/conf/storage_conf.h | 23 ++++------------------- src/storage/storage_backend_fs.c | 2 +- src/storage/storage_backend_rbd.c | 2 +- src/storage/storage_util.c | 2 +- src/storage/storage_util.h | 2 +- 6 files changed, 10 insertions(+), 25 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Now that virDomainXMLNamespace matches virXMLNamespace, we no longer need to keep both around. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 2 +- src/bhyve/bhyve_domain.h | 2 +- src/conf/capabilities.h | 12 ------------ src/conf/domain_conf.c | 6 +++--- src/conf/domain_conf.h | 6 +++--- src/conf/virconftypes.h | 3 --- src/lxc/lxc_domain.c | 2 +- src/lxc/lxc_domain.h | 2 +- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_domain.h | 2 +- src/test/test_driver.c | 2 +- src/vmx/vmx.c | 2 +- 12 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 51366f8e26..4924766030 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -273,7 +273,7 @@ bhyveDomainDefNamespaceHref(void) return "xmlns:bhyve='" BHYVE_NAMESPACE_HREF "'"; } -virDomainXMLNamespace virBhyveDriverDomainXMLNamespace = { +virXMLNamespace virBhyveDriverDomainXMLNamespace = { .parse = bhyveDomainDefNamespaceParse, .free = bhyveDomainDefNamespaceFree, .format = bhyveDomainDefNamespaceFormatXML, diff --git a/src/bhyve/bhyve_domain.h b/src/bhyve/bhyve_domain.h index 17cb283e54..e985278041 100644 --- a/src/bhyve/bhyve_domain.h +++ b/src/bhyve/bhyve_domain.h @@ -38,6 +38,6 @@ virDomainXMLOptionPtr virBhyveDriverCreateXMLConf(bhyveConnPtr); extern virDomainXMLPrivateDataCallbacks virBhyveDriverPrivateDataCallbacks; extern virDomainDefParserConfig virBhyveDriverDomainDefParserConfig; -extern virDomainXMLNamespace virBhyveDriverDomainXMLNamespace; +extern virXMLNamespace virBhyveDriverDomainXMLNamespace; bool bhyveDomainDefNeedsISAController(virDomainDefPtr def); diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h index 41c81ceeb1..d6a4e79d77 100644 --- a/src/conf/capabilities.h +++ b/src/conf/capabilities.h @@ -182,18 +182,6 @@ struct _virCapsStoragePool { }; -typedef int (*virDomainDefNamespaceParse)(xmlXPathContextPtr, void **); -typedef void (*virDomainDefNamespaceFree)(void *); -typedef int (*virDomainDefNamespaceXMLFormat)(virBufferPtr, void *); -typedef const char *(*virDomainDefNamespaceHref)(void); - -struct _virDomainXMLNamespace { - virDomainDefNamespaceParse parse; - virDomainDefNamespaceFree free; - virDomainDefNamespaceXMLFormat format; - virDomainDefNamespaceHref href; -}; - struct _virCaps { virObject parent; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c8c304d2a2..3a1f7c9709 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -79,7 +79,7 @@ struct _virDomainXMLOption { virDomainXMLPrivateDataCallbacks privateData; /* XML namespace callbacks */ - virDomainXMLNamespace ns; + virXMLNamespace ns; /* ABI stability callbacks */ virDomainABIStability abi; @@ -1385,7 +1385,7 @@ virDomainKeyWrapDefParseXML(virDomainDefPtr def, xmlXPathContextPtr ctxt) virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config, virDomainXMLPrivateDataCallbacksPtr priv, - virDomainXMLNamespacePtr xmlns, + virXMLNamespacePtr xmlns, virDomainABIStabilityPtr abi, virSaveCookieCallbacksPtr saveCookie) { @@ -1435,7 +1435,7 @@ virDomainXMLOptionNew(virDomainDefParserConfigPtr config, * Returns a pointer to the stored namespace structure. * The lifetime of the pointer is equal to @xmlopt; */ -virDomainXMLNamespacePtr +virXMLNamespacePtr virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt) { return &xmlopt->ns; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index cbe7b61170..33cef5b75c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2491,7 +2491,7 @@ struct _virDomainDef { virDomainVsockDefPtr vsock; void *namespaceData; - virDomainXMLNamespace ns; + virXMLNamespace ns; virDomainKeyWrapDefPtr keywrap; @@ -2731,7 +2731,7 @@ struct _virDomainABIStability { virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config, virDomainXMLPrivateDataCallbacksPtr priv, - virDomainXMLNamespacePtr xmlns, + virXMLNamespacePtr xmlns, virDomainABIStabilityPtr abi, virSaveCookieCallbacksPtr saveCookie); @@ -2747,7 +2747,7 @@ int virDomainXMLOptionRunMomentPostParse(virDomainXMLOptionPtr xmlopt, void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac); -virDomainXMLNamespacePtr +virXMLNamespacePtr virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt) ATTRIBUTE_NONNULL(1); diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index e8e9b6c314..a15cfb5f9e 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -342,9 +342,6 @@ typedef virDomainVsockDef *virDomainVsockDefPtr; typedef struct _virDomainWatchdogDef virDomainWatchdogDef; typedef virDomainWatchdogDef *virDomainWatchdogDefPtr; -typedef struct _virDomainXMLNamespace virDomainXMLNamespace; -typedef virDomainXMLNamespace *virDomainXMLNamespacePtr; - typedef struct _virDomainXMLOption virDomainXMLOption; typedef virDomainXMLOption *virDomainXMLOptionPtr; diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index 87f3c7bd63..df847b4fca 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -317,7 +317,7 @@ lxcDomainDefNamespaceHref(void) } -virDomainXMLNamespace virLXCDriverDomainXMLNamespace = { +virXMLNamespace virLXCDriverDomainXMLNamespace = { .parse = lxcDomainDefNamespaceParse, .free = lxcDomainDefNamespaceFree, .format = lxcDomainDefNamespaceFormatXML, diff --git a/src/lxc/lxc_domain.h b/src/lxc/lxc_domain.h index 92ed4ac594..9cb7090b5b 100644 --- a/src/lxc/lxc_domain.h +++ b/src/lxc/lxc_domain.h @@ -91,7 +91,7 @@ struct _virLXCDomainObjPrivate { struct virLXCDomainJobObj job; }; -extern virDomainXMLNamespace virLXCDriverDomainXMLNamespace; +extern virXMLNamespace virLXCDriverDomainXMLNamespace; extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks; extern virDomainDefParserConfig virLXCDriverDomainDefParserConfig; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 880307f215..f92b483bcf 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3728,7 +3728,7 @@ qemuDomainDefNamespaceHref(void) } -virDomainXMLNamespace virQEMUDriverDomainXMLNamespace = { +virXMLNamespace virQEMUDriverDomainXMLNamespace = { .parse = qemuDomainDefNamespaceParse, .free = qemuDomainDefNamespaceFree, .format = qemuDomainDefNamespaceFormatXML, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 2ba51929db..37a00323a7 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -854,7 +854,7 @@ void qemuDomainCleanupRun(virQEMUDriverPtr driver, void qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv); extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks; -extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace; +extern virXMLNamespace virQEMUDriverDomainXMLNamespace; extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig; extern virDomainABIStability virQEMUDriverDomainABIStability; extern virSaveCookieCallbacks virQEMUDriverDomainSaveCookie; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index a59984051d..6dbd76d449 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -426,7 +426,7 @@ testDomainObjPrivateFree(void *data) static testDriverPtr testDriverNew(void) { - virDomainXMLNamespace ns = { + virXMLNamespace ns = { .parse = testDomainDefNamespaceParse, .free = testDomainDefNamespaceFree, }; diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 7bb5eb956d..0f7c2d5f20 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -603,7 +603,7 @@ virVMXDomainDefNamespaceHref(void) return "xmlns:vmware='http://libvirt.org/schemas/domain/vmware/1.0'"; } -static virDomainXMLNamespace virVMXDomainXMLNamespace = { +static virXMLNamespace virVMXDomainXMLNamespace = { .parse = NULL, .free = virVMXDomainDefNamespaceFree, .format = virVMXDomainDefNamespaceFormatXML, -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:30 +0200, Ján Tomko wrote:
Now that virDomainXMLNamespace matches virXMLNamespace, we no longer need to keep both around.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 2 +- src/bhyve/bhyve_domain.h | 2 +- src/conf/capabilities.h | 12 ------------ src/conf/domain_conf.c | 6 +++--- src/conf/domain_conf.h | 6 +++--- src/conf/virconftypes.h | 3 --- src/lxc/lxc_domain.c | 2 +- src/lxc/lxc_domain.h | 2 +- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_domain.h | 2 +- src/test/test_driver.c | 2 +- src/vmx/vmx.c | 2 +- 12 files changed, 14 insertions(+), 29 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

We have hardcoded the namespace prefix in various places: 1) the xmlns string stored in the 'href' function 2) the xmlXPathRegisterNs call in each parser 3) all the parsing and formatting code actually dealing with these elements While eliminating the third one is probably a job for an actual XML-aware formatter, let's store the prefix separately here in the virXMLNamespace structure so that future patches can get rid of the first two bullets. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/virxml.h b/src/util/virxml.h index 5b209bb040..ea0c3d3ab3 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -256,6 +256,7 @@ struct _virXMLNamespace { virXMLNamespaceParse parse; virXMLNamespaceFree free; virXMLNamespaceFormat format; + const char *prefix; virXMLNamespaceHref href; }; typedef struct _virXMLNamespace virXMLNamespace; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:31 +0200, Ján Tomko wrote:
We have hardcoded the namespace prefix in various places: 1) the xmlns string stored in the 'href' function 2) the xmlXPathRegisterNs call in each parser 3) all the parsing and formatting code actually dealing with these elements
While eliminating the third one is probably a job for an actual XML-aware formatter, let's store the prefix separately here in the virXMLNamespace structure so that future patches can get rid of the first two bullets.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.h | 1 + 1 file changed, 1 insertion(+)
diff --git a/src/util/virxml.h b/src/util/virxml.h index 5b209bb040..ea0c3d3ab3 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -256,6 +256,7 @@ struct _virXMLNamespace { virXMLNamespaceParse parse; virXMLNamespaceFree free; virXMLNamespaceFormat format; + const char *prefix; virXMLNamespaceHref href; }; typedef struct _virXMLNamespace virXMLNamespace;
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/network/bridge_driver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index b34b742bfa..b0ada0132a 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -252,6 +252,7 @@ virXMLNamespace networkDnsmasqXMLNamespace = { .parse = networkDnsmasqDefNamespaceParse, .free = networkDnsmasqDefNamespaceFree, .format = networkDnsmasqDefNamespaceFormatXML, + .prefix = "dnsmasq", .href = networkDnsmasqDefNamespaceHref, }; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:32 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/network/bridge_driver.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index b34b742bfa..b0ada0132a 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -252,6 +252,7 @@ virXMLNamespace networkDnsmasqXMLNamespace = { .parse = networkDnsmasqDefNamespaceParse, .free = networkDnsmasqDefNamespaceFree, .format = networkDnsmasqDefNamespaceFormatXML, + .prefix = "dnsmasq", .href = networkDnsmasqDefNamespaceHref, };
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 1 + src/lxc/lxc_domain.c | 1 + src/qemu/qemu_domain.c | 1 + src/test/test_driver.c | 1 + src/vmx/vmx.c | 1 + 5 files changed, 5 insertions(+) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 4924766030..9a21cde452 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -277,5 +277,6 @@ virXMLNamespace virBhyveDriverDomainXMLNamespace = { .parse = bhyveDomainDefNamespaceParse, .free = bhyveDomainDefNamespaceFree, .format = bhyveDomainDefNamespaceFormatXML, + .prefix = "bhyve", .href = bhyveDomainDefNamespaceHref, }; diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index df847b4fca..b61c172804 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -321,6 +321,7 @@ virXMLNamespace virLXCDriverDomainXMLNamespace = { .parse = lxcDomainDefNamespaceParse, .free = lxcDomainDefNamespaceFree, .format = lxcDomainDefNamespaceFormatXML, + .prefix = "lxc", .href = lxcDomainDefNamespaceHref, }; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index f92b483bcf..bd124b824c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3732,6 +3732,7 @@ virXMLNamespace virQEMUDriverDomainXMLNamespace = { .parse = qemuDomainDefNamespaceParse, .free = qemuDomainDefNamespaceFree, .format = qemuDomainDefNamespaceFormatXML, + .prefix = "qemu", .href = qemuDomainDefNamespaceHref, }; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6dbd76d449..adda3ac4c0 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -429,6 +429,7 @@ testDriverNew(void) virXMLNamespace ns = { .parse = testDomainDefNamespaceParse, .free = testDomainDefNamespaceFree, + .prefix = "test", }; virDomainDefParserConfig config = { .features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG | diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 0f7c2d5f20..ac24e765d4 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -607,6 +607,7 @@ static virXMLNamespace virVMXDomainXMLNamespace = { .parse = NULL, .free = virVMXDomainDefNamespaceFree, .format = virVMXDomainDefNamespaceFormatXML, + .prefix = "vmware", .href = virVMXDomainDefNamespaceHref, }; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:33 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 1 + src/lxc/lxc_domain.c | 1 + src/qemu/qemu_domain.c | 1 + src/test/test_driver.c | 1 + src/vmx/vmx.c | 1 + 5 files changed, 5 insertions(+)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/storage/storage_backend_fs.c | 1 + src/storage/storage_backend_rbd.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index d575b75449..c2d0d7bd1f 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -705,6 +705,7 @@ static virXMLNamespace virStoragePoolFSXMLNamespace = { .parse = virStoragePoolDefFSNamespaceParse, .free = virStoragePoolDefFSNamespaceFree, .format = virStoragePoolDefFSNamespaceFormatXML, + .prefix = "fs", .href = virStoragePoolDefFSNamespaceHref, }; #endif /* WITH_STORAGE_FS */ diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c index e490c690f5..f86df9a2fa 100644 --- a/src/storage/storage_backend_rbd.c +++ b/src/storage/storage_backend_rbd.c @@ -1546,6 +1546,7 @@ static virXMLNamespace virStoragePoolRBDXMLNamespace = { .parse = virStoragePoolDefRBDNamespaceParse, .free = virStoragePoolDefRBDNamespaceFree, .format = virStoragePoolDefRBDNamespaceFormatXML, + .prefix = "rbd", .href = virStoragePoolDefRBDNamespaceHref, }; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:34 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/storage/storage_backend_fs.c | 1 + src/storage/storage_backend_rbd.c | 1 + 2 files changed, 2 insertions(+)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Unlike all the other occurrences, only store the actual URL instead of the whole xmlns:<prefix>='<url>' header. The rest will be converted before this string is used. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/test/test_driver.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index adda3ac4c0..3bdeb6c00a 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -181,6 +181,12 @@ struct _testDomainNamespaceDef { xmlNodePtr *snap_nodes; }; +static const char* +testDomainDefNamespaceHref(void) +{ + return TEST_NAMESPACE_HREF; +} + static void testDomainDefNamespaceFree(void *data) { @@ -430,6 +436,7 @@ testDriverNew(void) .parse = testDomainDefNamespaceParse, .free = testDomainDefNamespaceFree, .prefix = "test", + .href = testDomainDefNamespaceHref, }; virDomainDefParserConfig config = { .features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG | -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:35 +0200, Ján Tomko wrote:
Unlike all the other occurrences, only store the actual URL instead of the whole xmlns:<prefix>='<url>' header.
The rest will be converted before this string is used.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/test/test_driver.c | 7 +++++++ 1 file changed, 7 insertions(+)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

A function to automatically format the xmlns:<prefix>='<uri>' attribute for per-driver namespaces. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.c | 7 +++++++ src/util/virxml.h | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/util/virxml.c b/src/util/virxml.c index f55b9a362c..11b6031b09 100644 --- a/src/util/virxml.c +++ b/src/util/virxml.c @@ -1408,3 +1408,10 @@ virXPathContextNodeRestore(virXPathContextNodeSavePtr save) save->ctxt->node = save->node; } + +void +virXMLNamespaceFormatNS(virBufferPtr buf, + virXMLNamespace const *ns) +{ + virBufferAsprintf(buf, " xmlns:%s='%s'", ns->prefix, ns->href()); +} diff --git a/src/util/virxml.h b/src/util/virxml.h index ea0c3d3ab3..bcc10647b5 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -261,3 +261,7 @@ struct _virXMLNamespace { }; typedef struct _virXMLNamespace virXMLNamespace; typedef virXMLNamespace *virXMLNamespacePtr; + +void +virXMLNamespaceFormatNS(virBufferPtr buf, + virXMLNamespace const *ns); -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:36 +0200, Ján Tomko wrote:
A function to automatically format the xmlns:<prefix>='<uri>' attribute for per-driver namespaces.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.c | 7 +++++++ src/util/virxml.h | 4 ++++ 2 files changed, 11 insertions(+)
diff --git a/src/util/virxml.c b/src/util/virxml.c index f55b9a362c..11b6031b09 100644 --- a/src/util/virxml.c +++ b/src/util/virxml.c @@ -1408,3 +1408,10 @@ virXPathContextNodeRestore(virXPathContextNodeSavePtr save)
save->ctxt->node = save->node; } +
Two empty lines between functions, please.
+void +virXMLNamespaceFormatNS(virBufferPtr buf, + virXMLNamespace const *ns) +{ + virBufferAsprintf(buf, " xmlns:%s='%s'", ns->prefix, ns->href()); +}
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/network_conf.c | 2 +- src/network/bridge_driver.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 2c3a11fb10..7eba9eacbf 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2435,7 +2435,7 @@ virNetworkDefFormatBuf(virBufferPtr buf, virBufferAddLit(buf, "<network"); if (def->namespaceData && def->ns.href) - virBufferAsprintf(buf, " %s", (def->ns.href)()); + virXMLNamespaceFormatNS(buf, &def->ns); if (!(flags & VIR_NETWORK_XML_INACTIVE) && (def->connections > 0)) virBufferAsprintf(buf, " connections='%d'", def->connections); if (def->ipv6nogw) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index b0ada0132a..a3f7ae337a 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -244,7 +244,7 @@ networkDnsmasqDefNamespaceFormatXML(virBufferPtr buf, static const char * networkDnsmasqDefNamespaceHref(void) { - return "xmlns:dnsmasq='" DNSMASQ_NAMESPACE_HREF "'"; + return DNSMASQ_NAMESPACE_HREF; } -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:37 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/network_conf.c | 2 +- src/network/bridge_driver.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 2c3a11fb10..7eba9eacbf 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2435,7 +2435,7 @@ virNetworkDefFormatBuf(virBufferPtr buf,
virBufferAddLit(buf, "<network"); if (def->namespaceData && def->ns.href)
I guess this could benefit from the same treatment you did for domains. That is, check for def->ns.format instead.
- virBufferAsprintf(buf, " %s", (def->ns.href)()); + virXMLNamespaceFormatNS(buf, &def->ns); if (!(flags & VIR_NETWORK_XML_INACTIVE) && (def->connections > 0)) virBufferAsprintf(buf, " connections='%d'", def->connections); if (def->ipv6nogw)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/storage_conf.c | 2 +- src/storage/storage_backend_fs.c | 2 +- src/storage/storage_backend_rbd.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index fb8a16a119..6588d5c8ef 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1172,7 +1172,7 @@ virStoragePoolDefFormatBuf(virBufferPtr buf, } virBufferAsprintf(buf, "<pool type='%s'", type); if (def->namespaceData && def->ns.href) - virBufferAsprintf(buf, " %s", (def->ns.href)()); + virXMLNamespaceFormatNS(buf, &def->ns); virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2); virBufferEscapeString(buf, "<name>%s</name>\n", def->name); diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index c2d0d7bd1f..4bed6df0bb 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -636,7 +636,7 @@ virStoragePoolDefFSNamespaceFormatXML(virBufferPtr buf, static const char * virStoragePoolDefFSNamespaceHref(void) { - return "xmlns:fs='" STORAGE_POOL_FS_NAMESPACE_HREF "'"; + return STORAGE_POOL_FS_NAMESPACE_HREF; } #endif /* WITH_STORAGE_FS */ diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c index f86df9a2fa..2d6c51de35 100644 --- a/src/storage/storage_backend_rbd.c +++ b/src/storage/storage_backend_rbd.c @@ -178,7 +178,7 @@ virStoragePoolDefRBDNamespaceFormatXML(virBufferPtr buf, static const char * virStoragePoolDefRBDNamespaceHref(void) { - return "xmlns:rbd='" STORAGE_POOL_RBD_NAMESPACE_HREF "'"; + return STORAGE_POOL_RBD_NAMESPACE_HREF; } -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:38 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/storage_conf.c | 2 +- src/storage/storage_backend_fs.c | 2 +- src/storage/storage_backend_rbd.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index fb8a16a119..6588d5c8ef 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1172,7 +1172,7 @@ virStoragePoolDefFormatBuf(virBufferPtr buf, } virBufferAsprintf(buf, "<pool type='%s'", type); if (def->namespaceData && def->ns.href)
def->ns.format?
- virBufferAsprintf(buf, " %s", (def->ns.href)()); + virXMLNamespaceFormatNS(buf, &def->ns); virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2); virBufferEscapeString(buf, "<name>%s</name>\n", def->name);
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 2 +- src/conf/domain_conf.c | 2 +- src/lxc/lxc_domain.c | 2 +- src/qemu/qemu_domain.c | 2 +- src/vmx/vmx.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 9a21cde452..631fb50db9 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -270,7 +270,7 @@ bhyveDomainDefNamespaceFormatXML(virBufferPtr buf, static const char * bhyveDomainDefNamespaceHref(void) { - return "xmlns:bhyve='" BHYVE_NAMESPACE_HREF "'"; + return BHYVE_NAMESPACE_HREF; } virXMLNamespace virBhyveDriverDomainXMLNamespace = { diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3a1f7c9709..a39f5f845d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28314,7 +28314,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) virBufferAsprintf(buf, " id='%d'", def->id); if (def->namespaceData && def->ns.format) - virBufferAsprintf(buf, " %s", (def->ns.href)()); + virXMLNamespaceFormatNS(buf, &def->ns); virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2); diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index b61c172804..022e3c6f6a 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -313,7 +313,7 @@ lxcDomainDefNamespaceFormatXML(virBufferPtr buf, static const char * lxcDomainDefNamespaceHref(void) { - return "xmlns:lxc='" LXC_NAMESPACE_HREF "'"; + return LXC_NAMESPACE_HREF; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index bd124b824c..0b2065b52c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3724,7 +3724,7 @@ qemuDomainDefNamespaceFormatXML(virBufferPtr buf, static const char * qemuDomainDefNamespaceHref(void) { - return "xmlns:qemu='" QEMU_NAMESPACE_HREF "'"; + return QEMU_NAMESPACE_HREF; } diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index ac24e765d4..c4e90537f8 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -600,7 +600,7 @@ virVMXDomainDefNamespaceFormatXML(virBufferPtr buf, void *nsdata) static const char * virVMXDomainDefNamespaceHref(void) { - return "xmlns:vmware='http://libvirt.org/schemas/domain/vmware/1.0'"; + return "http://libvirt.org/schemas/domain/vmware/1.0"; } static virXMLNamespace virVMXDomainXMLNamespace = { -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:39 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 2 +- src/conf/domain_conf.c | 2 +- src/lxc/lxc_domain.c | 2 +- src/qemu/qemu_domain.c | 2 +- src/vmx/vmx.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 9a21cde452..631fb50db9 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -270,7 +270,7 @@ bhyveDomainDefNamespaceFormatXML(virBufferPtr buf, static const char * bhyveDomainDefNamespaceHref(void) { - return "xmlns:bhyve='" BHYVE_NAMESPACE_HREF "'"; + return BHYVE_NAMESPACE_HREF; }
virXMLNamespace virBhyveDriverDomainXMLNamespace = { diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3a1f7c9709..a39f5f845d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28314,7 +28314,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) virBufferAsprintf(buf, " id='%d'", def->id); if (def->namespaceData && def->ns.format) - virBufferAsprintf(buf, " %s", (def->ns.href)()); + virXMLNamespaceFormatNS(buf, &def->ns); virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2);
I see the reason for the change in 3/21 now. But I think the change should be squashed in this patch as it doesn't make a lot of sense when isolated. Unless you explain that def->ns.href is never NULL there... Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

A wrapper around xmlXPathRegisterNs that will save us from having to include xpathInternals.h everywhere we want to use a custom namespace and open-coding the strings already contained in virXMLNamespace. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.c | 20 ++++++++++++++++++++ src/util/virxml.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/src/util/virxml.c b/src/util/virxml.c index 11b6031b09..84b824f432 100644 --- a/src/util/virxml.c +++ b/src/util/virxml.c @@ -24,6 +24,8 @@ #include <math.h> /* for isnan() */ #include <sys/stat.h> +#include <libxml/xpathInternals.h> + #include "virerror.h" #include "virxml.h" #include "virbuffer.h" @@ -1409,9 +1411,27 @@ virXPathContextNodeRestore(virXPathContextNodeSavePtr save) save->ctxt->node = save->node; } + void virXMLNamespaceFormatNS(virBufferPtr buf, virXMLNamespace const *ns) { virBufferAsprintf(buf, " xmlns:%s='%s'", ns->prefix, ns->href()); } + + +int +virXMLNamespaceRegister(xmlXPathContextPtr ctxt, + virXMLNamespace const *ns) +{ + if (xmlXPathRegisterNs(ctxt, + BAD_CAST ns->prefix, + BAD_CAST ns->href()) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to register xml namespace '%s'"), + ns->href()); + return -1; + } + + return 0; +} diff --git a/src/util/virxml.h b/src/util/virxml.h index bcc10647b5..dfa20b3edb 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -265,3 +265,6 @@ typedef virXMLNamespace *virXMLNamespacePtr; void virXMLNamespaceFormatNS(virBufferPtr buf, virXMLNamespace const *ns); +int +virXMLNamespaceRegister(xmlXPathContextPtr ctxt, + virXMLNamespace const *ns); -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:40 +0200, Ján Tomko wrote:
A wrapper around xmlXPathRegisterNs that will save us from having to include xpathInternals.h everywhere we want to use a custom namespace and open-coding the strings already contained in virXMLNamespace.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/util/virxml.c | 20 ++++++++++++++++++++ src/util/virxml.h | 3 +++ 2 files changed, 23 insertions(+)
diff --git a/src/util/virxml.c b/src/util/virxml.c index 11b6031b09..84b824f432 100644 --- a/src/util/virxml.c +++ b/src/util/virxml.c @@ -24,6 +24,8 @@ #include <math.h> /* for isnan() */ #include <sys/stat.h>
+#include <libxml/xpathInternals.h> + #include "virerror.h" #include "virxml.h" #include "virbuffer.h" @@ -1409,9 +1411,27 @@ virXPathContextNodeRestore(virXPathContextNodeSavePtr save) save->ctxt->node = save->node; }
+
Oh I see, squash this into the patch which introduced virXMLNamespaceFormatNS, please.
void virXMLNamespaceFormatNS(virBufferPtr buf, virXMLNamespace const *ns) { virBufferAsprintf(buf, " xmlns:%s='%s'", ns->prefix, ns->href()); } + + +int +virXMLNamespaceRegister(xmlXPathContextPtr ctxt, + virXMLNamespace const *ns) +{ + if (xmlXPathRegisterNs(ctxt, + BAD_CAST ns->prefix, + BAD_CAST ns->href()) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to register xml namespace '%s'"), + ns->href()); + return -1; + } + + return 0; +}
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/network_conf.c | 2 ++ src/network/bridge_driver.c | 10 ---------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 7eba9eacbf..8db041bd2c 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2051,6 +2051,8 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt, if (xmlopt) def->ns = xmlopt->ns; if (def->ns.parse) { + if (virXMLNamespaceRegister(ctxt, &def->ns) < 0) + goto error; if ((def->ns.parse)(ctxt, &def->namespaceData) < 0) goto error; } diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index a3f7ae337a..dd4f111cc0 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -69,8 +69,6 @@ #include "virjson.h" #include "virnetworkportdef.h" -#include <libxml/xpathInternals.h> - #define VIR_FROM_THIS VIR_FROM_NETWORK #define MAX_BRIDGE_ID 256 @@ -191,14 +189,6 @@ networkDnsmasqDefNamespaceParse(xmlXPathContextPtr ctxt, networkDnsmasqXmlNsDefPtr nsdata = NULL; int ret = -1; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "dnsmasq", - BAD_CAST DNSMASQ_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - DNSMASQ_NAMESPACE_HREF); - return -1; - } - if (VIR_ALLOC(nsdata) < 0) return -1; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:41 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/network_conf.c | 2 ++ src/network/bridge_driver.c | 10 ---------- 2 files changed, 2 insertions(+), 10 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/storage_conf.c | 2 ++ src/storage/storage_backend_fs.c | 9 --------- src/storage/storage_backend_rbd.c | 9 --------- 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 6588d5c8ef..b5451e447f 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -998,6 +998,8 @@ virStoragePoolDefParseXML(xmlXPathContextPtr ctxt) * especially during the virStoragePoolSourceClear method */ def->ns = options->ns; if (def->ns.parse) { + if (virXMLNamespaceRegister(ctxt, &def->ns) < 0) + return NULL; if ((def->ns.parse)(ctxt, &def->namespaceData) < 0) return NULL; } diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index 4bed6df0bb..d947beac2c 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -41,7 +41,6 @@ VIR_LOG_INIT("storage.storage_backend_fs"); #if WITH_STORAGE_FS -# include <libxml/xpathInternals.h> # include <mntent.h> struct _virNetfsDiscoverState { @@ -571,14 +570,6 @@ virStoragePoolDefFSNamespaceParse(xmlXPathContextPtr ctxt, int ret = -1; VIR_AUTOFREE(xmlNodePtr *)nodes = NULL; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "fs", - BAD_CAST STORAGE_POOL_FS_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - STORAGE_POOL_FS_NAMESPACE_HREF); - return -1; - } - nnodes = virXPathNodeSet("./fs:mount_opts/fs:option", ctxt, &nodes); if (nnodes < 0) return -1; diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c index 2d6c51de35..22caa189d7 100644 --- a/src/storage/storage_backend_rbd.c +++ b/src/storage/storage_backend_rbd.c @@ -36,7 +36,6 @@ #include "rbd/librbd.h" #include "secret_util.h" #include "storage_util.h" -#include <libxml/xpathInternals.h> #define VIR_FROM_THIS VIR_FROM_STORAGE @@ -91,14 +90,6 @@ virStoragePoolDefRBDNamespaceParse(xmlXPathContextPtr ctxt, int ret = -1; VIR_AUTOFREE(xmlNodePtr *)nodes = NULL; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "rbd", - BAD_CAST STORAGE_POOL_RBD_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - STORAGE_POOL_RBD_NAMESPACE_HREF); - return -1; - } - nnodes = virXPathNodeSet("./rbd:config_opts/rbd:option", ctxt, &nodes); if (nnodes < 0) return -1; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:42 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/storage_conf.c | 2 ++ src/storage/storage_backend_fs.c | 9 --------- src/storage/storage_backend_rbd.c | 9 --------- 3 files changed, 2 insertions(+), 18 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 9 --------- src/conf/domain_conf.c | 2 ++ src/lxc/lxc_domain.c | 8 -------- src/qemu/qemu_domain.c | 8 -------- src/test/test_driver.c | 9 --------- 5 files changed, 2 insertions(+), 34 deletions(-) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 631fb50db9..ea4bd54969 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -27,8 +27,6 @@ #include "viralloc.h" #include "virlog.h" -#include <libxml/xpathInternals.h> - #define VIR_FROM_THIS VIR_FROM_BHYVE VIR_LOG_INIT("bhyve.bhyve_domain"); @@ -205,13 +203,6 @@ bhyveDomainDefNamespaceParse(xmlXPathContextPtr ctxt, size_t i; int ret = -1; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "bhyve", BAD_CAST BHYVE_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - BHYVE_NAMESPACE_HREF); - return -1; - } - if (VIR_ALLOC(cmd) < 0) return -1; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a39f5f845d..b7a342bb91 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -21344,6 +21344,8 @@ virDomainDefParseXML(xmlDocPtr xml, def->ns = xmlopt->ns; if (def->ns.parse) { + if (virXMLNamespaceRegister(ctxt, &def->ns) < 0) + goto error; if ((def->ns.parse)(ctxt, &def->namespaceData) < 0) goto error; } diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index 022e3c6f6a..00362e4c7f 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -26,7 +26,6 @@ #include "viralloc.h" #include "virlog.h" #include "virerror.h" -#include <libxml/xpathInternals.h> #include "virstring.h" #include "virutil.h" #include "virfile.h" @@ -219,13 +218,6 @@ lxcDomainDefNamespaceParse(xmlXPathContextPtr ctxt, char *tmp = NULL; size_t i; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "lxc", BAD_CAST LXC_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - LXC_NAMESPACE_HREF); - return -1; - } - if (VIR_ALLOC(lxcDef) < 0) return -1; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 0b2065b52c..6d770d3c13 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -73,7 +73,6 @@ # include <selinux/selinux.h> #endif -#include <libxml/xpathInternals.h> #include "dosname.h" #define QEMU_QXL_VGAMEM_DEFAULT 16 * 1024 @@ -3632,13 +3631,6 @@ qemuDomainDefNamespaceParse(xmlXPathContextPtr ctxt, qemuDomainXmlNsDefPtr nsdata = NULL; int ret = -1; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "qemu", BAD_CAST QEMU_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - QEMU_NAMESPACE_HREF); - return -1; - } - if (VIR_ALLOC(nsdata) < 0) return -1; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 3bdeb6c00a..57d54c05b3 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -26,7 +26,6 @@ #include <unistd.h> #include <sys/stat.h> #include <libxml/xmlsave.h> -#include <libxml/xpathInternals.h> #include "virerror.h" @@ -213,14 +212,6 @@ testDomainDefNamespaceParse(xmlXPathContextPtr ctxt, unsigned int tmpuint; VIR_AUTOFREE(xmlNodePtr *) nodes = NULL; - if (xmlXPathRegisterNs(ctxt, BAD_CAST "test", - BAD_CAST TEST_NAMESPACE_HREF) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to register xml namespace '%s'"), - TEST_NAMESPACE_HREF); - return -1; - } - if (VIR_ALLOC(nsdata) < 0) return -1; -- 2.19.2

On Wed, Aug 21, 2019 at 01:15:43 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/bhyve/bhyve_domain.c | 9 --------- src/conf/domain_conf.c | 2 ++ src/lxc/lxc_domain.c | 8 -------- src/qemu/qemu_domain.c | 8 -------- src/test/test_driver.c | 9 --------- 5 files changed, 2 insertions(+), 34 deletions(-)
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>

I'd like to see one more patch added to this series which would change virXMLNamespace.href from a function pointer into a const char *. And you could even call it uri instead of href :-) Nice cleanup. Jirka
participants (2)
-
Jiri Denemark
-
Ján Tomko