X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fmacro.h;h=0874102ece6afa10cdebd0031120532a3828b5c8;hb=2f79c10e9aef916efbcf29315eea8c25d0a50ac4;hp=f91f7de76956da0de546cf4bdba1b9c7c66650ca;hpb=fc6e6d245ee3989c222a2a8cc82a33475f9922f3;p=elogind.git diff --git a/src/shared/macro.h b/src/shared/macro.h index f91f7de76..0874102ec 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -28,6 +28,7 @@ #include #define _printf_attr_(a,b) __attribute__ ((format (printf, a, b))) +#define _alloc_(...) __attribute__ ((alloc_size(__VA_ARGS__))) #define _sentinel_ __attribute__ ((sentinel)) #define _noreturn_ __attribute__((noreturn)) #define _unused_ __attribute__ ((unused)) @@ -264,21 +265,11 @@ do { \ } \ } while(false) -/* Remove this macro, when the kernel has f_type as unsigned int or long - * for every architecure. Currently some 64bit architecures (like s390x) - * have int in the kernel, but long in userspace for f_type, so glibc - * extends the int to long and carries over the sign. Negative numbers are - * caused by the 32bit magic constants in linux/magic.h stuffed into the - * signed int in the kernel and these negative numbers are extended to - * long, which cannot be simply compared to the magic constants anymore. + /* Because statfs.t_type can be int on some architecures, we have to cast + * the const magic to the type, otherwise the compiler warns about + * signed/unsigned comparison, because the magic can be 32 bit unsigned. */ -#define CMP_F_TYPE(f, c) \ - __extension__ ({ \ - __SWORD_TYPE _f = (f); \ - const __SWORD_TYPE _c = (c); \ - const int _c32 = (c); \ - (_f == _c || _f == _c32 ); \ - }) +#define F_TYPE_CMP(a, b) (a == (typeof(a)) b) /* Returns the number of chars needed to format variables of the