61 #define __LB(l, ...) l 62 #define __RB(l, ...) __VA_ARGS__ 63 #define __emitmsg_fp stderr 70 #define __atomic_emitmsg(...) \ 72 if (ftrylockfile(__emitmsg_fp) == 0) { \ 73 fprintf (__emitmsg_fp, __VA_ARGS__); \ 74 funlockfile(__emitmsg_fp); \ 79 # define __terminate(retval) abort() 80 # define __emitmsg(...) __atomic_emitmsg (__VA_ARGS__) 82 # define __terminate(retval) return retval 83 # ifdef ASSUME_VERBOSE 84 # define __emitmsg(...) __atomic_emitmsg (__VA_ARGS__) 86 # define __emitmsg(...) while(0) 90 #define __assume(expr, exprstr, retval, ...) \ 93 int OSCAP_CONCAT(__cont, __LINE__) = 1; \ 94 __emitmsg ("%s:%d (%s): Assumption `%s' not fulfilled!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, exprstr); \ 95 do {__LB(__VA_ARGS__)} while((OSCAP_CONCAT(__cont, __LINE__) = 0)); \ 96 if (OSCAP_CONCAT(__cont, __LINE__) == 0) __terminate(retval); \ 98 do {__RB(__VA_ARGS__)} while(0); \ 102 #if defined(__GNUC__) 103 # define assume(expr, retval, ...) __assume(__builtin_expect(expr, 1), #expr, retval, __VA_ARGS__) 105 # define assume(expr, retval, ...) __assume(expr, #expr, retval, __VA_ARGS__) 111 #define assume_r(...) assume(__VA_ARGS__) 117 # define assume_d(...) assume(__VA_ARGS__) 119 # define assume_d(...) while(0) 126 # define assume_ex(expr, retval, ...) assume(expr, retval, __VA_ARGS__) 128 # define assume_ex(expr, retval, ...) expr