#include <stddef.h>
#include "config.h"
-#include "check_type/check_type.h"
+#include <ccan/check_type/check_type.h>
/**
* container_of - get pointer to enclosing structure
* subtraction to return the pointer to the enclosing type.
*
* Example:
- * struct info
- * {
+ * struct foo {
+ * int fielda, fieldb;
+ * // ...
+ * };
+ * struct info {
* int some_other_field;
* struct foo my_foo;
* };
*
- * struct info *foo_to_info(struct foo *foop)
+ * static struct info *foo_to_info(struct foo *foo)
* {
* return container_of(foo, struct info, my_foo);
* }
* subtraction to return the pointer to the enclosing type.
*
* Example:
- * struct info
- * {
- * int some_other_field;
- * struct foo my_foo;
- * };
- *
- * struct info *foo_to_info(struct foo *foop)
+ * static struct info *foo_to_i(struct foo *foo)
* {
* struct info *i = container_of_var(foo, i, my_foo);
* return i;
* }
*/
-#ifdef HAVE_TYPEOF
+#if HAVE_TYPEOF
#define container_of_var(member_ptr, var, member) \
container_of(member_ptr, typeof(*var), member)
#else
-#define container_of_var(member_ptr, var, member) \
- ((void *)((char *)(member_ptr) - offsetof(containing_type, member)))
+#define container_of_var(member_ptr, var, member) \
+ ((void *)((char *)(member_ptr) \
+ - ((char *)&(var)->member - (char *)(var))))
#endif
#endif /* CCAN_CONTAINER_OF_H */