[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] Change return value of VIR_DRV_SUPPORTS_FEATURE to bool



> > diff --git a/src/driver.h b/src/driver.h
> > index b770e5e..e797a75 100644
> > --- a/src/driver.h
> > +++ b/src/driver.h
> > @@ -52,12 +52,12 @@ typedef enum {
> >   * Note that you must check for errors.
> 
> However, this comment is no longer applicable.  So you'll need a v2 that
> fixes the documentation, and make it explicit that the macro ignores
> errors, as well as a cross-reference to the actual function for someone
> that cares about errors.

Ah, I haven't noticed that line... What about the following v2?

Jirka

>From 592fd277d7a853025d92946701590485c0973205 Mon Sep 17 00:00:00 2001
Message-Id: <592fd277d7a853025d92946701590485c0973205 1291390396 git jdenemar redhat com>
From: Jiri Denemark <jdenemar redhat com>
Date: Fri, 3 Dec 2010 09:31:48 +0100
Subject: [PATCH] Change return value of VIR_DRV_SUPPORTS_FEATURE to bool
Mail-Followup-To: libvir-list redhat com

virDrvSupportsFeature API is allowed to return -1 on error while all but
one uses of VIR_DRV_SUPPORTS_FEATURE only check for (non)zero return
value. Let's make this macro return zero on error, which is what
everyone expects anyway.
---
 src/driver.h  |   15 +++++++++------
 src/libvirt.c |    5 ++++-
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/driver.h b/src/driver.h
index b770e5e..75305fe 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -47,17 +47,20 @@ typedef enum {
 
 
 /* Internal feature-detection macro.  Don't call drv->supports_feature
- * directly, because it may be NULL, use this macro instead.
+ * directly if you don't have to, because it may be NULL, use this macro
+ * instead.
  *
- * Note that you must check for errors.
+ * Note that this treats a possible error returned by drv->supports_feature
+ * the same as not supported. If you care about the error, call
+ * drv->supports_feature directly.
  *
  * Returns:
- *   >= 1  Feature is supported.
+ *   != 0  Feature is supported.
  *   0     Feature is not supported.
- *   -1    Error.
  */
-# define VIR_DRV_SUPPORTS_FEATURE(drv,conn,feature)                      \
-    ((drv)->supports_feature ? (drv)->supports_feature((conn),(feature)) : 0)
+# define VIR_DRV_SUPPORTS_FEATURE(drv,conn,feature)                         \
+    ((drv)->supports_feature ?                                              \
+        (drv)->supports_feature((conn), (feature)) > 0 : 0)
 
 typedef virDrvOpenStatus
         (*virDrvOpen)			(virConnectPtr conn,
diff --git a/src/libvirt.c b/src/libvirt.c
index b4951c2..4188b45 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -1605,7 +1605,10 @@ virDrvSupportsFeature (virConnectPtr conn, int feature)
         return (-1);
     }
 
-    ret = VIR_DRV_SUPPORTS_FEATURE (conn->driver, conn, feature);
+    if (!conn->driver->supports_feature)
+        ret = 0;
+    else
+        ret = conn->driver->supports_feature(conn, feature);
 
     if (ret < 0)
         virDispatchError(conn);
-- 
1.7.3.2


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]