]> wimlib.net Git - wimlib/blobdiff - src/util.h
Various portability fixes
[wimlib] / src / util.h
index 4563d506be1c1c0e9e28a1dfd4038ea425b6604c..d87a0e827d16e5c2d80629c84b8af4e5ef3b3769 100644 (file)
 #      define HOT
 #endif /* __GNUC__ */
 
+
+#if 0
+#ifdef WITH_FUSE
+#define atomic_inc(ptr) \
+       __sync_fetch_and_add(ptr, 1)
+
+#define atomic_dec(ptr) \
+       __sync_sub_and_fetch(ptr, 1)
+#endif
+#endif
+
 #ifndef _NTFS_TYPES_H
 typedef uint8_t  u8;
 typedef uint16_t u16;
@@ -52,6 +63,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))