12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #ifndef HANDY_H
- #define HANDY_H
- #include <stddef.h>
- #include <stdint.h>
- #include <string.h>
- #define ARRAYCOUNT(arr) (sizeof arr / sizeof arr[0])
- #ifndef MIN
- #define MIN(x, y) \
- ({ typeof (x) __x = (x); \
- typeof (y) __y = (y); \
- __x < __y ? __x : __y; })
- #endif
- #ifndef MAX
- #define MAX(x, y) \
- ({ typeof (x) __x = (x); \
- typeof (y) __y = (y); \
- __x > __y ? __x : __y; })
- #endif
- #ifndef SWAP
- #define SWAP(x, y) \
- do { \
- typeof (x) __tmp = (x); \
- (x) = (y); \
- (y) = __tmp; \
- } while (0)
- #endif
- #define STRINGIFY(x) STRINGIFY_(x)
- #define STRINGIFY_(x) #x
- #define ER(expr) do { typeof (expr) err_ = (expr); if (err_) return err_; } while (0)
- #define EG(expr) do { err = (expr); if (err) goto x_err; } while (0)
- static inline void mem_clean(volatile void *v, size_t len)
- {
- if (len)
- {
- memset((void *) v, 0, len);
- (void) *((volatile uint8_t *) v);
- }
- }
- static inline unsigned mem_eq(const void *va, const void *vb, size_t len)
- {
- const volatile uint8_t *a = va;
- const volatile uint8_t *b = vb;
- uint8_t tmp;
- uint8_t diff = 0;
- while (len--)
- {
- tmp = *b++;
- diff |= *a++ ^ tmp;
- }
- return !diff;
- }
- #endif
|