|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 08/24] tools: move CONTAINER_OF to xentoolcore_internal.h
Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
tools/libs/toolcore/include/xentoolcore_internal.h | 42 ++++++++++++++++++++++
tools/libxl/libxl_internal.h | 30 ----------------
2 files changed, 42 insertions(+), 30 deletions(-)
diff --git a/tools/libs/toolcore/include/xentoolcore_internal.h
b/tools/libs/toolcore/include/xentoolcore_internal.h
index 670e29d..27497d6 100644
--- a/tools/libs/toolcore/include/xentoolcore_internal.h
+++ b/tools/libs/toolcore/include/xentoolcore_internal.h
@@ -24,6 +24,8 @@
#ifndef XENTOOLCORE_INTERNAL_H
#define XENTOOLCORE_INTERNAL_H
+#include <stddef.h>
+
#include "xentoolcore.h"
#include "_xentoolcore_list.h"
@@ -89,6 +91,46 @@ struct Xentoolcore__Active_Handle {
void xentoolcore__register_active_handle(Xentoolcore__Active_Handle*);
void xentoolcore__deregister_active_handle(Xentoolcore__Active_Handle*);
+/* ---------- convenient stuff ---------- */
+
+/*
+ * This does not appear in xentoolcore.h because it is a bit
+ * namespace-unclean.
+ */
+
+/*
+ * Convenience macros.
+ */
+
+/*
+ * CONTAINER_OF work like this. Given:
+ * typedef struct {
+ * ...
+ * member_type member_name;
+ * ...
+ * } outer_type;
+ * outer_type outer, *outer_var;
+ * member_type *inner_ptr = &outer->member_name;
+ *
+ * Then, effectively:
+ * outer_type *CONTAINER_OF(member_type *inner_ptr,
+ * *outer_var, // or type name for outer_type
+ * member_name);
+ *
+ * So that:
+ * CONTAINER_OF(inner_ptr, *outer_var, member_name) == &outer
+ * CONTAINER_OF(inner_ptr, outer_type, member_name) == &outer
+ */
+#define CONTAINER_OF(inner_ptr, outer, member_name) \
+ ({ \
+ typeof(outer) *container_of_; \
+ container_of_ = (void*)((char*)(inner_ptr) - \
+ offsetof(typeof(outer), member_name)); \
+ (void)(&container_of_->member_name == \
+ (typeof(inner_ptr))0) /* type check */; \
+ container_of_; \
+ })
+
#endif /* XENTOOLCORE_INTERNAL_H */
/*
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index ab0a765..43939a7 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -3845,36 +3845,6 @@ _hidden void libxl__remus_restore_setup(libxl__egc *egc,
* Convenience macros.
*/
-/*
- * CONTAINER_OF work like this. Given:
- * typedef struct {
- * ...
- * member_type member_name;
- * ...
- * } outer_type;
- * outer_type outer, *outer_var;
- * member_type *inner_ptr = &outer->member_name;
- *
- * Then, effectively:
- * outer_type *CONTAINER_OF(member_type *inner_ptr,
- * *outer_var, // or type name for outer_type
- * member_name);
- *
- * So that:
- * CONTAINER_OF(inner_ptr, *outer_var, member_name) == &outer
- * CONTAINER_OF(inner_ptr, outer_type, member_name) == &outer
- */
-#define CONTAINER_OF(inner_ptr, outer, member_name) \
- ({ \
- typeof(outer) *container_of_; \
- container_of_ = (void*)((char*)(inner_ptr) - \
- offsetof(typeof(outer), member_name)); \
- (void)(&container_of_->member_name == \
- (typeof(inner_ptr))0) /* type check */; \
- container_of_; \
- })
-
-
#define FILLZERO LIBXL_FILLZERO
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |