/* 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,
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);