Signed-off-by: Claudio Bley <cbley(a)av-test.de>
---
include/libvirt/libvirt.h.in | 25 +++++++++++++++++++++----
python/generator.py | 16 ++++++++++++++++
src/libvirt.c | 8 ++++----
3 files changed, 41 insertions(+), 8 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index c1233f6..b51f415 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -80,6 +80,23 @@ typedef void (*virFreeCallback)(void *opaque);
/**
+ * virBool:
+ *
+ * A tri-state boolean type being able to signal an error in addition
+ * to having a value of true or false.
+ *
+ * 1 - true
+ * 0 - false
+ * -1 on error
+ */
+typedef enum {
+ VIR_BOOL_TRUE = 1,
+ VIR_BOOL_FALSE = 0,
+ VIR_BOOL_ERROR = -1
+} virBool;
+
+
+/**
* virConnect:
*
* a virConnect is a private structure representing a connection to
@@ -3728,11 +3745,11 @@ int virNetworkIsPersistent(virNetworkPtr net);
int virStoragePoolIsActive(virStoragePoolPtr pool);
int virStoragePoolIsPersistent(virStoragePoolPtr pool);
-int virInterfaceIsActive(virInterfacePtr iface);
+virBool virInterfaceIsActive(virInterfacePtr iface);
-int virConnectIsEncrypted(virConnectPtr conn);
-int virConnectIsSecure(virConnectPtr conn);
-int virConnectIsAlive(virConnectPtr conn);
+virBool virConnectIsEncrypted(virConnectPtr conn);
+virBool virConnectIsSecure(virConnectPtr conn);
+virBool virConnectIsAlive(virConnectPtr conn);
/*
* CPU specification API
diff --git a/python/generator.py b/python/generator.py
index bae4edc..43df257 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -266,6 +266,8 @@ py_types = {
'const char *': ('z', None, "constcharPtr", "const
char *"),
'size_t': ('n', None, "size_t", "size_t"),
+ 'virBool': ('i', None, "int", "int"),
+
'virDomainPtr': ('O', "virDomain",
"virDomainPtr", "virDomainPtr"),
'const virDomainPtr': ('O', "virDomain",
"virDomainPtr", "virDomainPtr"),
'virDomain *': ('O', "virDomain",
"virDomainPtr", "virDomainPtr"),
@@ -1291,6 +1293,13 @@ def buildWrappers(module):
classes.write(classes_type[ret[0]][1] % ("ret"));
classes.write("\n");
+ # special case for virBool
+ elif ret[0] == 'virBool':
+ classes.write((" if " + functions_int_default_test +
+ ": raise libvirtError ('%s()
failed')\n" +
+ " return (ret == 1)\n") %
+ ("ret", name))
+
# For functions returning an integral type there are
# several things that we can do, depending on the
# contents of functions_int_*:
@@ -1529,6 +1538,13 @@ def buildWrappers(module):
classes.write(converter_type[ret[0]] % ("ret"));
classes.write("\n");
+ # special case for virBool
+ elif ret[0] == 'virBool':
+ classes.write((" if " +
functions_int_default_test +
+ ": raise libvirtError ('%s()
failed')\n" +
+ " return (ret == 1)\n") %
+ ("ret", name))
+
# For functions returning an integral type there
# are several things that we can do, depending on
# the contents of functions_int_*:
diff --git a/src/libvirt.c b/src/libvirt.c
index a783fa6..2e298d7 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -17112,7 +17112,7 @@ virNWFilterRef(virNWFilterPtr nwfilter)
*
* Returns 1 if running, 0 if inactive, -1 on error
*/
-int virInterfaceIsActive(virInterfacePtr iface)
+virBool virInterfaceIsActive(virInterfacePtr iface)
{
VIR_DEBUG("iface=%p", iface);
@@ -17146,7 +17146,7 @@ error:
*
* Returns 1 if encrypted, 0 if not encrypted, -1 on error
*/
-int virConnectIsEncrypted(virConnectPtr conn)
+virBool virConnectIsEncrypted(virConnectPtr conn)
{
VIR_DEBUG("conn=%p", conn);
@@ -17183,7 +17183,7 @@ error:
*
* Returns 1 if secure, 0 if secure, -1 on error
*/
-int virConnectIsSecure(virConnectPtr conn)
+virBool virConnectIsSecure(virConnectPtr conn)
{
VIR_DEBUG("conn=%p", conn);
@@ -19858,7 +19858,7 @@ error:
*
* Returns 1 if alive, 0 if dead, -1 on error
*/
-int virConnectIsAlive(virConnectPtr conn)
+virBool virConnectIsAlive(virConnectPtr conn)
{
VIR_DEBUG("conn=%p", conn);
--
1.7.9.5