vcl: add api to retrieve num bytes for tx
[vpp.git] / src / vppinfra / error_bootstrap.h
index 1cd9105..ae23d1b 100644 (file)
@@ -62,9 +62,8 @@ enum
 /* Low level error reporting function.
    Code specifies whether to call exit, abort or nothing at
    all (for non-fatal warnings). */
-extern void _clib_error (int code,
-                        char *function_name,
-                        uword line_number, char *format, ...);
+extern void _clib_error (int code, const char *function_name,
+                        uword line_number, const char *format, ...);
 
 #define ASSERT(truth)                                  \
 do {                                                   \
@@ -79,11 +78,36 @@ do {                                                        \
     }                                                  \
 } while (0)
 
-#if defined(__clang__)
-#define STATIC_ASSERT(truth,...)
-#else
+/*
+ * This version always generates code, and has a Coverity-specific
+ * version to stop Coverity complaining about
+ * ALWAYS_ASSERT(p != 0); p->member...
+ */
+
+#ifndef __COVERITY__
+#define ALWAYS_ASSERT(truth)                           \
+do {                                                   \
+  if (PREDICT_FALSE(!(truth)))                          \
+    {                                                  \
+      _clib_error (CLIB_ERROR_ABORT, 0, 0,             \
+                  "%s:%d (%s) assertion `%s' fails",   \
+                  __FILE__,                            \
+                  (uword) __LINE__,                    \
+                  clib_error_function,                 \
+                  # truth);                            \
+    }                                                  \
+} while (0)
+#else /* __COVERITY__ */
+#define ALWAYS_ASSERT(truth)                    \
+do {                                            \
+  if (PREDICT_FALSE(!(truth)))                  \
+    {                                           \
+      abort();                                  \
+    }                                           \
+} while (0)
+#endif /* __COVERITY */
+
 #define STATIC_ASSERT(truth,...) _Static_assert(truth, __VA_ARGS__)
-#endif
 
 #define STATIC_ASSERT_SIZEOF(d, s) \
   STATIC_ASSERT (sizeof (d) == s, "Size of " #d " must be " # s " bytes")