X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fmacro.h;h=f884bf653fe41fd24ffd0b1e75f43b96ab54fdca;hb=f10dda3b82dd493eada52bcc52b790a1cc1094e6;hp=29d91392f8abc3848a3f454307ea9560f36a3a73;hpb=bac3c8eefe23a820caac930d41629cebafbfc7b2;p=elogind.git diff --git a/src/shared/macro.h b/src/shared/macro.h index 29d91392f..f884bf653 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -46,6 +46,9 @@ #define _introspect_(x) __attribute__((section("introspect." x))) #define _alignas_(x) __attribute__((aligned(__alignof(x)))) +/* automake test harness */ +#define EXIT_TEST_SKIP 77 + #define XSTRINGIFY(x) #x #define STRINGIFY(x) XSTRINGIFY(x) @@ -64,34 +67,35 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { * @member: the name of the member within the struct. * */ -#define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) +#define container_of(ptr, type, member) \ + __extension__ ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) ); \ + }) -#ifndef MAX -#define MAX(a,b) \ - __extension__ ({ \ - typeof(a) _a = (a); \ - typeof(b) _b = (b); \ - _a > _b ? _a : _b; \ +#undef 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) +#define MAX3(x,y,z) \ + __extension__ ({ \ + typeof(x) _c = MAX(x,y); \ + MAX(_c, z); \ + }) -#ifndef MIN +#undef 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) +#ifndef CLAMP #define CLAMP(x, low, high) \ __extension__ ({ \ typeof(x) _x = (x); \ @@ -99,6 +103,7 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { typeof(high) _high = (high); \ ((_x > _high) ? _high : ((_x < _low) ? _low : _x)); \ }) +#endif #define assert_se(expr) \ do { \ @@ -156,6 +161,8 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { #define memzero(x,l) (memset((x), 0, (l))) #define zero(x) (memzero(&(x), sizeof(x))) +#define CHAR_TO_STR(x) ((char[2]) { x, 0 }) + #define char_array_0(x) x[sizeof(x)-1] = 0; #define IOVEC_SET_STRING(i, s) \ @@ -196,11 +203,14 @@ static inline size_t IOVEC_INCREMENT(struct iovec *i, unsigned n, size_t k) { #define _cleanup_free_ __attribute__((cleanup(freep))) #define _cleanup_fclose_ __attribute__((cleanup(fclosep))) +#define _cleanup_pclose_ __attribute__((cleanup(pclosep))) #define _cleanup_close_ __attribute__((cleanup(closep))) #define _cleanup_closedir_ __attribute__((cleanup(closedirp))) #define _cleanup_umask_ __attribute__((cleanup(umaskp))) #define _cleanup_set_free_ __attribute__((cleanup(set_freep))) +#define _cleanup_set_free_free_ __attribute__((cleanup(set_free_freep))) #define _cleanup_strv_free_ __attribute__((cleanup(strv_freep))) +#define _cleanup_journal_close_ __attribute__((cleanup(journal_closep))) #define VA_FORMAT_ADVANCE(format, ap) \ do { \ @@ -247,4 +257,14 @@ do { \ } \ } while(false) +/* Returns the number of chars needed to format variables of the + * specified type as a decimal string. Adds in extra space for a + * negative '-' prefix. */ + +#define DECIMAL_STR_MAX(type) \ + (1+(sizeof(type) <= 1 ? 3 : \ + sizeof(type) <= 2 ? 5 : \ + sizeof(type) <= 4 ? 10 : \ + sizeof(type) <= 8 ? 20 : sizeof(int[-2*(sizeof(type) > 8)]))) + #include "log.h"