Add macros in Debug.h Checks that: a) make the code shorter for functions that return BOOLEAN or OVS_ERROR, by hiding the repetitive work. b) on debug mode, do ASSERT, while on release mode can do an, e.g. "return X;" instead, for the failure case. c) by using OVS_CHECK, we can choose via OVS_USE_ASSERTS, if we want asserts enabled or disabled.
Signed-off-by: Samuel Ghinet <sghi...@cloudbasesolutions.com> --- datapath-windows/ovsext/Core/Debug.h | 59 ++++++++++++++++++++++++++++++++++++ datapath-windows/ovsext/precomp.h | 1 + 2 files changed, 60 insertions(+) diff --git a/datapath-windows/ovsext/Core/Debug.h b/datapath-windows/ovsext/Core/Debug.h index 3705d1e..27a40ca 100644 --- a/datapath-windows/ovsext/Core/Debug.h +++ b/datapath-windows/ovsext/Core/Debug.h @@ -69,6 +69,65 @@ VOID OvsLog(UINT32 level, UINT32 flag, CHAR *funcName, #define OVS_LOG_WARN(_format, ...) \ OvsLog(OVS_DBG_WARN, OVS_DBG_MOD, __FUNCTION__, __LINE__, _format, __VA_ARGS__) +#ifdef DBG + +#undef OVS_USE_ASSERTS +#define OVS_USE_ASSERTS 1 + +#else + +#endif //DBG + +//OVS_USE_ASSERTS is not #define-d on release mode +#if OVS_USE_ASSERTS +#define OVS_CHECK(x) ASSERT(x) +#define OVS_CHECK_OR(x, expr) { if (!(x)) { ASSERT(0); expr; } } +#define OVS_CHECK_BREAK(x) { if (!(x)) { ASSERT(0); break; } } +#define OVS_CHECK_RET(x, value) { if (!(x)) { ASSERT(0); return value; } } +#define OVS_CHECK_GC(x) { if (!(x)) { ASSERT(0); goto Cleanup; } } +#else +#define OVS_CHECK(x) +#define OVS_CHECK_OR(x, expr) { if (!(x)) expr; } +#define OVS_CHECK_BREAK(x) { if (!(x)) break; } +#define OVS_CHECK_RET(x, value) { if (!(x)) return value; } +#define OVS_CHECK_GC(x) { if (!(x)) goto Cleanup; } +#endif //OVS_USE_ASSERTS + +//on failure, return FALSE +#define OVS_EXPECT(expr) OVS_CHECK_RET(expr, FALSE) + +#define OVS_CHECK_E(expr) \ +{ \ + error = (expr); \ + if (error != OVS_ERROR_NOERROR) \ + { \ + OVS_CHECK(__UNEXPECTED__); \ + goto Cleanup; \ + } \ +} + +//check boolean expr, on failure, set ok = FALSE and goto Cleanup +#define OVS_CHECK_B(expr) \ +{ \ + if (!(expr)) \ + { \ + ok = FALSE; \ + OVS_CHECK(__UNEXPECTED__); \ + goto Cleanup; \ + } \ +} + +//check boolean expr, and use OVS_ERROR +#define OVS_CHECK_B_E(expr, errorVal) \ +{ \ + if (!(expr)) \ + { \ + error = errorVal; \ + OVS_CHECK(__UNEXPECTED__); \ + goto Cleanup; \ + } \ +} + #if DBG #define OVS_VERIFY_IRQL(_x) \ if (KeGetCurrentIrql() != (KIRQL)_x) { \ diff --git a/datapath-windows/ovsext/precomp.h b/datapath-windows/ovsext/precomp.h index f54df0e..529d7de 100644 --- a/datapath-windows/ovsext/precomp.h +++ b/datapath-windows/ovsext/precomp.h @@ -21,6 +21,7 @@ #include <ntstrsafe.h> #include <Strsafe.h> +#include "Core/Debug.h" #include "Core/Types.h" #include "Core/Util.h" #include "OpenFlow/Pub.h" -- 1.8.3.msysgit.0 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev