]> wimlib.net Git - wimlib/blobdiff - src/util.h
Add rbtree files
[wimlib] / src / util.h
index 4563d506be1c1c0e9e28a1dfd4038ea425b6604c..3292a32eb9878890efd45d43845699d536f304c8 100644 (file)
@@ -52,6 +52,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))