[libvirt] [PATCH] Implement a virBool type

Claudio Bley cbley at av-test.de
Fri Jan 11 15:40:32 UTC 2013


Signed-off-by: Claudio Bley <cbley at 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




More information about the libvir-list mailing list