You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
952 B
36 lines
952 B
/**
|
|
* 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
|
|
|