summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2016-03-01 15:45:43 +0100
committerBrian Behlendorf <[email protected]>2016-03-30 12:26:42 -0700
commit726c4a25659bfc0b3458da48a115dad67ddcb2ab (patch)
tree7e10e0807f46d32db7f4ad9a1aa927b43bdf8be8 /lib
parente3e7cf6026f0761c155ae7920b03fb76c7ad5df8 (diff)
Remove complicated libspl assert wrappers
Effectively provide our own version of assert()/verify() for use in user space. This minimizes our dependencies and aligns the user space assertion handling with what's used in the kernel. Signed-off-by: Carlo Landmeter <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #4449
Diffstat (limited to 'lib')
-rw-r--r--lib/libspl/include/assert.h82
1 files changed, 36 insertions, 46 deletions
diff --git a/lib/libspl/include/assert.h b/lib/libspl/include/assert.h
index 52924e8ba..6226872e5 100644
--- a/lib/libspl/include/assert.h
+++ b/lib/libspl/include/assert.h
@@ -32,68 +32,54 @@
#include <stdio.h>
#include <stdlib.h>
-#ifndef __assert_c99
-static inline void
-__assert_c99(const char *expr, const char *file, int line, const char *func)
+static inline int
+libspl_assert(const char *buf, const char *file, const char *func, int line)
{
- fprintf(stderr, "%s:%i: %s: Assertion `%s` failed.\n",
- file, line, func, expr);
+ fprintf(stderr, "%s\n", buf);
+ fprintf(stderr, "ASSERT at %s:%d:%s()", file, line, func);
abort();
}
-#endif /* __assert_c99 */
-
-#ifndef verify
-#if defined(__STDC__)
-#if __STDC_VERSION__ - 0 >= 199901L
-#define verify(EX) (void)((EX) || \
- (__assert_c99(#EX, __FILE__, __LINE__, __func__), 0))
-#else
-#define verify(EX) (void)((EX) || (__assert(#EX, __FILE__, __LINE__), 0))
-#endif /* __STDC_VERSION__ - 0 >= 199901L */
-#else
-#define verify(EX) (void)((EX) || (_assert("EX", __FILE__, __LINE__), 0))
-#endif /* __STDC__ */
-#endif /* verify */
-
-#undef VERIFY
-#undef ASSERT
-#define VERIFY verify
-#define ASSERT assert
+#ifdef verify
+#undef verify
+#endif
-extern void __assert(const char *, const char *, int);
+#define VERIFY(cond) \
+ (void) ((!(cond)) && \
+ libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__))
+#define verify(cond) \
+ (void) ((!(cond)) && \
+ libspl_assert(#cond, __FILE__, __FUNCTION__, __LINE__))
-static inline int
-assfail(const char *buf, const char *file, int line)
-{
- __assert(buf, file, line);
- return (0);
-}
-
-/* BEGIN CSTYLED */
-#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) do { \
- const TYPE __left = (TYPE)(LEFT); \
- const TYPE __right = (TYPE)(RIGHT); \
- if (!(__left OP __right)) { \
- char *__buf = alloca(256); \
- (void) snprintf(__buf, 256, "%s %s %s (0x%llx %s 0x%llx)", \
- #LEFT, #OP, #RIGHT, \
- (u_longlong_t)__left, #OP, (u_longlong_t)__right); \
- assfail(__buf, __FILE__, __LINE__); \
- } \
+#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) \
+do { \
+ const TYPE __left = (TYPE)(LEFT); \
+ const TYPE __right = (TYPE)(RIGHT); \
+ if (!(__left OP __right)) { \
+ char *__buf = alloca(256); \
+ (void) snprintf(__buf, 256, \
+ "%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
+ (u_longlong_t)__left, #OP, (u_longlong_t)__right); \
+ libspl_assert(__buf, __FILE__, __FUNCTION__, __LINE__); \
+ } \
} while (0)
-/* END CSTYLED */
#define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t)
#define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t)
#define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t)
#define VERIFY0(x) VERIFY3_IMPL(x, ==, 0, uint64_t)
+#ifdef assert
+#undef assert
+#endif
+
#ifdef NDEBUG
#define ASSERT3S(x, y, z) ((void)0)
#define ASSERT3U(x, y, z) ((void)0)
#define ASSERT3P(x, y, z) ((void)0)
#define ASSERT0(x) ((void)0)
+#define ASSERT(x) ((void)0)
+#define assert(x) ((void)0)
#define ASSERTV(x)
#define IMPLY(A, B) ((void)0)
#define EQUIV(A, B) ((void)0)
@@ -102,13 +88,17 @@ assfail(const char *buf, const char *file, int line)
#define ASSERT3U(x, y, z) VERIFY3U(x, y, z)
#define ASSERT3P(x, y, z) VERIFY3P(x, y, z)
#define ASSERT0(x) VERIFY0(x)
+#define ASSERT(x) VERIFY(x)
+#define assert(x) VERIFY(x)
#define ASSERTV(x) x
#define IMPLY(A, B) \
((void)(((!(A)) || (B)) || \
- assfail("(" #A ") implies (" #B ")", __FILE__, __LINE__)))
+ libspl_assert("(" #A ") implies (" #B ")", \
+ __FILE__, __FUNCTION__, __LINE__)))
#define EQUIV(A, B) \
((void)((!!(A) == !!(B)) || \
- assfail("(" #A ") is equivalent to (" #B ")", __FILE__, __LINE__)))
+ libspl_assert("(" #A ") is equivalent to (" #B ")", \
+ __FILE__, __FUNCTION__, __LINE__)))
#endif /* NDEBUG */