X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Futil.h;h=08a661b8d34572de7e02a37a28406f6335921d24;hb=e80cc109d6bf74bc76277fb1dc1bccda907b2564;hp=4563d506be1c1c0e9e28a1dfd4038ea425b6604c;hpb=d0e7f039e4ab206b9fd973c983e3fb841fcd2bf2;p=wimlib diff --git a/src/util.h b/src/util.h index 4563d506..08a661b8 100644 --- a/src/util.h +++ b/src/util.h @@ -30,6 +30,14 @@ # define HOT #endif /* __GNUC__ */ +#ifdef WITH_FUSE +#define atomic_inc(ptr) \ + __sync_fetch_and_add(ptr, 1) + +#define atomic_dec(ptr) \ + __sync_sub_and_fetch(ptr, 1) +#endif + #ifndef _NTFS_TYPES_H typedef uint8_t u8; typedef uint16_t u16; @@ -52,6 +60,19 @@ typedef unsigned uint; #define swap(a, b) ({typeof(a) _a = a; (a) = (b); (b) = _a;}) #endif +/** + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#ifndef container_of +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) +#endif + #define ARRAY_LEN(array) (sizeof(array) / sizeof((array)[0])) #define ZERO_ARRAY(array) memset(array, 0, sizeof(array))