> > 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@xxxxxxxxxx> From: Jiri Denemark <jdenemar@xxxxxxxxxx> 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@xxxxxxxxxx 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list