Add common headers to provide basic definitions and helpers. Open source license is included as well.
Signed-off-by: Gao Xiang <[email protected]> --- include/ez/defs.h | 76 +++++++++++++++++++++++++++++++++++++++++++++++ include/ez/util.h | 25 ++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 include/ez/defs.h create mode 100644 include/ez/util.h diff --git a/include/ez/defs.h b/include/ez/defs.h new file mode 100644 index 0000000..d5acccf --- /dev/null +++ b/include/ez/defs.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* + * ez/include/ez/defs.h + * + * Copyright (C) 2019-2020 Gao Xiang <[email protected]> + */ +#ifndef __EZ_DEFS_H +#define __EZ_DEFS_H + +#include <stdint.h> +#include <assert.h> +#include <limits.h> +#include <stdbool.h> +#include <string.h> +#include <errno.h> + +#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) + +#define min(x, y) ({ \ + typeof(x) _min1 = (x); \ + typeof(y) _min2 = (y); \ + (void) (&_min1 == &_min2); \ + _min1 < _min2 ? _min1 : _min2; }) + +#define max(x, y) ({ \ + typeof(x) _max1 = (x); \ + typeof(y) _max2 = (y); \ + (void) (&_max1 == &_max2); \ + _max1 > _max2 ? _max1 : _max2; }) + +/* + * ..and if you can't take the strict types, you can specify one yourself. + * Or don't use min/max at all, of course. + */ +#define min_t(type, x, y) ({ \ + type __min1 = (x); \ + type __min2 = (y); \ + __min1 < __min2 ? __min1: __min2; }) + +#define max_t(type, x, y) ({ \ + type __max1 = (x); \ + type __max2 = (y); \ + __max1 > __max2 ? __max1: __max2; }) + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) + +#ifndef __OPTIMIZE__ +#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)])) +#else +#define BUILD_BUG_ON(condition) assert(condition) +#endif + +#define BUG_ON(cond) assert(!(cond)) + +#ifdef NDEBUG +#define DBG_BUGON(condition) ((void)(condition)) +#else +#define DBG_BUGON(condition) BUG_ON(condition) +#endif + +#ifndef __maybe_unused +#define __maybe_unused __attribute__((__unused__)) +#endif + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) + +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#endif + +#ifndef unlikely +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + +#endif + diff --git a/include/ez/util.h b/include/ez/util.h new file mode 100644 index 0000000..9cb6e62 --- /dev/null +++ b/include/ez/util.h @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* + * ez/include/ez/util.h + * + * Copyright (C) 2019-2020 Gao Xiang <[email protected]> + */ +#ifndef __EZ_UTIL_H +#define __EZ_UTIL_H + +#include "defs.h" + +static inline const uint8_t *ez_memcmp(const void *ptr1, const void *ptr2, + const void *buf1end) +{ + const uint8_t *buf1 = ptr1; + const uint8_t *buf2 = ptr2; + + for (; buf1 != buf1end; ++buf1, ++buf2) + if (*buf1 != *buf2) + break; + return buf1; +} + +#endif + -- 2.20.1
