X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmacro.h;h=b3da60f13e51e926c967c5c07c0222080861a801;hp=622c08eeda89ef840f06ac24638ae01873d13469;hb=b853f6e9d60c0eab2038227718ee1ed1266f94de;hpb=e99e38bbdcca3fe5956823bdb3d38544ccf93221 diff --git a/src/macro.h b/src/macro.h index 622c08eed..b3da60f13 100644 --- a/src/macro.h +++ b/src/macro.h @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ #ifndef foomacrohfoo #define foomacrohfoo @@ -24,41 +24,62 @@ #include #include - -#define _printf_attr(a,b) __attribute__ ((format (printf, a, b))) -#define _sentinel __attribute__ ((sentinel)) -#define _noreturn __attribute__((noreturn)) -#define _unused __attribute__ ((unused)) -#define _destructor __attribute__ ((destructor)) -#define _pure __attribute__ ((pure)) -#define _const __attribute__ ((const)) -#define _deprecated __attribute__ ((deprecated)) -#define _packed __attribute__ ((packed)) -#define _malloc __attribute__ ((malloc)) -#define _weak __attribute__ ((weak)) -#define _likely(x) (__builtin_expect(!!(x),1)) -#define _unlikely(x) (__builtin_expect(!!(x),0)) +#include +#include + +#define PAGE_SIZE 4096 + +#define _printf_attr_(a,b) __attribute__ ((format (printf, a, b))) +#define _sentinel_ __attribute__ ((sentinel)) +#define _noreturn_ __attribute__((noreturn)) +#define _unused_ __attribute__ ((unused)) +#define _destructor_ __attribute__ ((destructor)) +#define _pure_ __attribute__ ((pure)) +#define _const_ __attribute__ ((const)) +#define _deprecated_ __attribute__ ((deprecated)) +#define _packed_ __attribute__ ((packed)) +#define _malloc_ __attribute__ ((malloc)) +#define _weak_ __attribute__ ((weak)) +#define _likely_(x) (__builtin_expect(!!(x),1)) +#define _unlikely_(x) (__builtin_expect(!!(x),0)) +#define _public_ __attribute__ ((visibility("default"))) +#define _hidden_ __attribute__ ((visibility("hidden"))) +#define _weakref_(x) __attribute__((weakref(#x))) /* Rounds up */ static inline size_t ALIGN(size_t l) { return ((l + sizeof(void*) - 1) & ~(sizeof(void*) - 1)); } +static inline size_t PAGE_ALIGN(size_t l) { + return ((l + PAGE_SIZE - 1) & ~(PAGE_SIZE -1)); +} + #define ELEMENTSOF(x) (sizeof(x)/sizeof((x)[0])) +#ifndef MAX #define MAX(a,b) \ __extension__ ({ \ typeof(a) _a = (a); \ typeof(b) _b = (b); \ _a > _b ? _a : _b; \ }) +#endif + +#define MAX3(a,b,c) \ + MAX(MAX(a,b),c) +#ifndef MIN #define MIN(a,b) \ __extension__ ({ \ typeof(a) _a = (a); \ typeof(b) _b = (b); \ _a < _b ? _a : _b; \ }) +#endif + +#define MIN3(a,b,c) \ + MIN(MIN(a,b),c) #define CLAMP(x, low, high) \ __extension__ ({ \ @@ -70,7 +91,7 @@ static inline size_t ALIGN(size_t l) { #define assert_se(expr) \ do { \ - if (_unlikely(!(expr))) \ + if (_unlikely_(!(expr))) \ log_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \ "Assertion '%s' failed at %s:%u, function %s(). Aborting.", \ #expr , __FILE__, __LINE__, __PRETTY_FUNCTION__); \ @@ -106,12 +127,18 @@ static inline size_t ALIGN(size_t l) { #define PTR_TO_UINT32(p) ((uint32_t) ((uintptr_t) (p))) #define UINT32_TO_PTR(u) ((void*) ((uintptr_t) (u))) +#define PTR_TO_ULONG(p) ((unsigned long) ((uintptr_t) (p))) +#define ULONG_TO_PTR(u) ((void*) ((uintptr_t) (u))) + #define PTR_TO_INT(p) ((int) ((intptr_t) (p))) #define INT_TO_PTR(u) ((void*) ((intptr_t) (u))) #define TO_INT32(p) ((int32_t) ((intptr_t) (p))) #define INT32_TO_PTR(u) ((void*) ((intptr_t) (u))) +#define PTR_TO_LONG(p) ((long) ((intptr_t) (p))) +#define LONG_TO_PTR(u) ((void*) ((intptr_t) (u))) + #define memzero(x,l) (memset((x), 0, (l))) #define zero(x) (memzero(&(x), sizeof(x))) @@ -125,6 +152,34 @@ static inline size_t ALIGN(size_t l) { _i->iov_len = strlen(_s); \ } while(false); +static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, unsigned n) { + unsigned j; + size_t r = 0; + + for (j = 0; j < n; j++) + r += i[j].iov_len; + + return r; +} + +static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) { + unsigned j; + + for (j = 0; j < n; j++) { + size_t sub; + + if (_unlikely_(k <= 0)) + break; + + sub = MIN(i[j].iov_len, k); + i[j].iov_len -= sub; + i[j].iov_base = (uint8_t*) i[j].iov_base + sub; + k -= sub; + } + + return k; +} + #include "log.h" #endif