/** * Helper macros * * Created on 2021/11/17. */ #ifndef FORTH_FH_MACROS_H #define FORTH_FH_MACROS_H /** * strncasecmp with guard against prefix match * * a - input string * b - example string with terminator * n - len of input string */ #define EQ(a, b, n) (0 == strncasecmp((a), (b), (n)) && (b)[(n)]==0) /** Get a value rounded up to multiple of word size */ #define WORDALIGNED(var) (((var) + 3) & ~3) _Static_assert(WORDALIGNED(0) == 0, "word align"); _Static_assert(WORDALIGNED(1) == 4, "word align"); _Static_assert(WORDALIGNED(2) == 4, "word align"); _Static_assert(WORDALIGNED(3) == 4, "word align"); _Static_assert(WORDALIGNED(4) == 4, "word align"); _Static_assert(WORDALIGNED(5) == 8, "word align"); _Static_assert(WORDALIGNED(1023) == 1024, "word align"); _Static_assert(WORDALIGNED(1024) == 1024, "word align"); #define TRY(x) \ do { \ if (FH_OK != (rv = (x))) return rv; \ } while (0) #endif //FORTH_FH_MACROS_H