diff options
Diffstat (limited to 'src/assert_safe.h')
-rw-r--r-- | src/assert_safe.h | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/assert_safe.h b/src/assert_safe.h index 9f2e16493..8c261100f 100644 --- a/src/assert_safe.h +++ b/src/assert_safe.h @@ -21,28 +21,35 @@ # define GIT_ASSERT(expr) assert(expr) # define GIT_ASSERT_ARG(expr) assert(expr) + +# define GIT_ASSERT_WITH_RETVAL(expr, fail) assert(expr) +# define GIT_ASSERT_ARG_WITH_RETVAL(expr, fail) assert(expr) #else +/** Internal consistency check to stop the function. */ +# define GIT_ASSERT(expr) GIT_ASSERT_WITH_RETVAL(expr, -1) + /** * Assert that a consumer-provided argument is valid, setting an * actionable error message and returning -1 if it is not. */ -# define GIT_ASSERT_ARG(expr) do { \ - if (!(expr)) { \ - git_error_set(GIT_ERROR_INVALID, \ - "invalid argument: '%s'", \ - #expr); \ - return -1; \ - } \ - } while(0) +# define GIT_ASSERT_ARG(expr) GIT_ASSERT_ARG_WITH_RETVAL(expr, -1) + +/** Internal consistency check to return the `fail` param on failure. */ +# define GIT_ASSERT_WITH_RETVAL(expr, fail) \ + GIT_ASSERT__WITH_RETVAL(expr, GIT_ERROR_INTERNAL, "unrecoverable internal error", fail) + +/** + * Assert that a consumer-provided argument is valid, setting an + * actionable error message and returning the `fail` param if not. + */ +# define GIT_ASSERT_ARG_WITH_RETVAL(expr, fail) \ + GIT_ASSERT__WITH_RETVAL(expr, GIT_ERROR_INVALID, "invalid argument", fail) -/* Internal consistency check to stop the function. */ -# define GIT_ASSERT(expr) do { \ +# define GIT_ASSERT__WITH_RETVAL(expr, code, msg, fail) do { \ if (!(expr)) { \ - git_error_set(GIT_ERROR_INTERNAL, \ - "unrecoverable internal error: '%s'", \ - #expr); \ - return -1; \ + git_error_set(code, "%s: '%s'", msg, #expr); \ + return fail; \ } \ } while(0) |