mirror of
https://github.com/asterisk/asterisk.git
synced 2025-12-02 11:11:55 +00:00
utils: Add ast_assert_return
Similar to pjproject's PJ_ASSERT_RETURN macro, this one will do the following... If the assert passes... NoOp If the assert fails and AST_DEVMODE is defined, execute ast_assert() then, if DO_CRASH isn't set, return from the calling function with the supplied value. If the assert fails and AST_DEVMODE is not defined, return from the calling function with the supplied value. The macro will execute a return without a value if one isn't suppled. Change-Id: I0003844affeab550d5ff5bca7aa7cf8a559b873e
This commit is contained in:
@@ -578,6 +578,13 @@ void DO_CRASH_NORETURN __ast_assert_failed(int condition, const char *condition_
|
|||||||
|
|
||||||
#ifdef AST_DEVMODE
|
#ifdef AST_DEVMODE
|
||||||
#define ast_assert(a) _ast_assert(a, # a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
#define ast_assert(a) _ast_assert(a, # a, __FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||||
|
#define ast_assert_return(a, ...) \
|
||||||
|
({ \
|
||||||
|
if (__builtin_expect(!(a), 1)) { \
|
||||||
|
_ast_assert(0, # a, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
|
||||||
|
return __VA_ARGS__; \
|
||||||
|
}\
|
||||||
|
})
|
||||||
static void force_inline _ast_assert(int condition, const char *condition_str, const char *file, int line, const char *function)
|
static void force_inline _ast_assert(int condition, const char *condition_str, const char *file, int line, const char *function)
|
||||||
{
|
{
|
||||||
if (__builtin_expect(!condition, 1)) {
|
if (__builtin_expect(!condition, 1)) {
|
||||||
@@ -586,6 +593,12 @@ static void force_inline _ast_assert(int condition, const char *condition_str, c
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define ast_assert(a)
|
#define ast_assert(a)
|
||||||
|
#define ast_assert_return(a, ...) \
|
||||||
|
({ \
|
||||||
|
if (__builtin_expect(!(a), 1)) { \
|
||||||
|
return __VA_ARGS__; \
|
||||||
|
}\
|
||||||
|
})
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
Reference in New Issue
Block a user