Make it easier to query what nativeFormat strings are valid in
the conversion between XML and native formats.
* include/libvirt/libvirt.h.in (virConnectDomainNativeFormats):
New declaration.
* src/libvirt.c (virConnectDomainNativeFormats): Implement it.
* src/driver.h (virDrvConnectDomainNativeFormats): New callback.
* src/libvirt_public.syms (LIBVIRT_0.9.10): Export it.
* python/generator.py (skip_function): Skip python binding for now.
---
include/libvirt/libvirt.h.in | 4 +++
python/generator.py | 3 ++
src/driver.h | 6 ++++
src/libvirt.c | 59 ++++++++++++++++++++++++++++++++++++++++++
src/libvirt_public.syms | 5 +++
5 files changed, 77 insertions(+), 0 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index e436f3c..7d7f22a 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -1432,6 +1432,10 @@ char * virConnectDomainXMLToNative(virConnectPtr
conn,
const char *nativeFormat,
const char *domainXml,
unsigned int flags);
+int virConnectDomainNativeFormats(virConnectPtr conn,
+ char **formats,
+ int nformats,
+ unsigned int flags);
int virDomainBlockStats (virDomainPtr dom,
const char *disk,
diff --git a/python/generator.py b/python/generator.py
index 6fee3a4..57615b8 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -477,6 +477,9 @@ skip_function = (
"virNWFilterGetConnect",
"virStoragePoolGetConnect",
"virStorageVolGetConnect",
+
+ # Not implemented yet
+ "virConnectDomainNativeFormats",
)
qemu_skip_function = (
diff --git a/src/driver.h b/src/driver.h
index 24636a4..15e4f2c 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -243,6 +243,11 @@ typedef char *
const char *domainXml,
unsigned int flags);
typedef int
+ (*virDrvConnectDomainNativeFormats) (virConnectPtr conn,
+ char **formats,
+ int nformats,
+ unsigned int flags);
+typedef int
(*virDrvListDefinedDomains) (virConnectPtr conn,
char **const names,
int maxnames);
@@ -868,6 +873,7 @@ struct _virDriver {
virDrvDomainGetXMLDesc domainGetXMLDesc;
virDrvConnectDomainXMLFromNative domainXMLFromNative;
virDrvConnectDomainXMLToNative domainXMLToNative;
+ virDrvConnectDomainNativeFormats domainNativeFormats;
virDrvListDefinedDomains listDefinedDomains;
virDrvNumOfDefinedDomains numOfDefinedDomains;
virDrvDomainCreate domainCreate;
diff --git a/src/libvirt.c b/src/libvirt.c
index a540424..2e9f773 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -4347,6 +4347,65 @@ error:
return NULL;
}
+/**
+ * virConnectDomainNativeFormats:
+ * @conn: pointer to the hypervisor connection.
+ * @formats: array for storing result
+ * @nformats: maximum size of array
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * This function provides a list of all supported formats used by
+ * virConnectDomainXMLToNative() and virConnectDomainXMLFromNative().
+ *
+ * As a special case, if @formats is NULL and @nformats is 0, the output
+ * will be the number of supported formats; the caller can use this to
+ * properly allocate the @formats array. For example:
+ *
+ * nformats = virConnectNativeFormats(conn, NULL, 0, 0);
+ * if (nformats < 0 ||
+ * (formats = calloc(nformats, sizeof(char *))) == NULL ||
+ * (nformats = virConnectNativeFormats(conn, formats, nformats, 0)) < 0)
+ * goto error;
+ *
+ * This function doesn't require privileged access to the hypervisor.
+ * This function expects the caller to allocate the @formats array,
+ * and to call free() on each returned array element.
+ *
+ * Returns -1 in case of error, or the count of returned elements.
+ */
+int
+virConnectDomainNativeFormats(virConnectPtr conn, char **formats, int nformats,
+ unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, formats=%p, nformats=%d, flags=%x",
+ conn, formats, nformats, flags);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECT(conn)) {
+ virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
+ virDispatchError(NULL);
+ return -1;
+ }
+
+ if (formats == NULL ? nformats != 0 : nformats < 1) {
+ virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ goto error;
+ }
+
+ if (conn->driver->domainNativeFormats) {
+ int ret;
+ ret = conn->driver->domainNativeFormats(conn, formats, nformats, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+ virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ virDispatchError(conn);
+ return -1;
+}
/*
* Sequence v1:
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 4ca7216..dde3c7a 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -516,4 +516,9 @@ LIBVIRT_0.9.9 {
virDomainSetNumaParameters;
} LIBVIRT_0.9.8;
+LIBVIRT_0.9.10 {
+ global:
+ virConnectDomainNativeFormats;
+} LIBVIRT_0.9.9;
+
# .... define new API here using predicted next version number ....
--
1.7.7.5