diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-01-30 22:23:00 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-01-30 22:23:00 -0500 |
commit | 7da82792e165504c1565904dc4541fccbc10bcf8 (patch) | |
tree | 6cf4dc43daa9b9f7fe91ac64f79a4a1483f62c7e /src/_safety.h | |
parent | 0862a2b142ee6c9da71c9e7f58b47954ae4534f8 (diff) |
add macros for 1:1 checked functions
Diffstat (limited to 'src/_safety.h')
-rw-r--r-- | src/_safety.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/_safety.h b/src/_safety.h index 348b6b0b..76129899 100644 --- a/src/_safety.h +++ b/src/_safety.h @@ -60,6 +60,56 @@ extern struct __checked_call { &_ci, 0); \ } \ } while (0) + +#define __setchecked(__file, __func, __line) \ + do { \ + __checked_call.func = (char*)func; \ + __checked_call.file = (char*)file; \ + __checked_call.line = line; \ + } while (0) + +#define __vcheck_0(__fn) \ + void __#__fn(const char * file, const char * func, unsigned long long line) { \ + __setchecked(file, func, line); \ + __fn(); \ + __setchecked(NULL, NULL, 0); \ + } + +#define __check_0(__type, __def, __fn) \ + __type __##__fn(const char * file, const char * func, unsigned long long line) { \ + __type ret = __def; \ + __setchecked(file, func, line); \ + ret = __fn(); \ + __setchecked(NULL, NULL, 0); \ + return ret; \ + } + +#define __check_1(__type, __def, __fn, __t1) \ + __type __##__fn(const char * file, const char * func, unsigned long long line, __t1 a1) { \ + __type ret = __def; \ + __setchecked(file, func, line); \ + ret = __fn(a1); \ + __setchecked(NULL, NULL, 0); \ + return ret; \ + } + +#define __check_2(__type, __def, __fn, __t1, __t2) \ + __type __##__fn(const char * file, const char * func, unsigned long long line, __t1 a1, __t2 a2) { \ + __type ret = __def; \ + __setchecked(file, func, line); \ + ret = __fn(a1, a2); \ + __setchecked(NULL, NULL, 0); \ + return ret; \ + } + +#define __check_3(__type, __def, __fn, __t1, __t2, __t3) \ + __type __##__fn(const char * file, const char * func, unsigned long long line, __t1 a1, __t2 a2, __t3 a3) { \ + __type ret = __def; \ + __setchecked(file, func, line); \ + ret = __fn(a1, a2, a3); \ + __setchecked(NULL, NULL, 0); \ + return ret; \ + } #else #define ASSERT_REPRESENTABLE(_n, _min, _max, _type, _sentinel) |