[PATCH 3/4] Add a macro to get the opcode number of a request given the interface

Neil Roberts neil at linux.intel.com
Mon May 19 10:26:16 PDT 2014


This adds a macro called WL_REQUEST_OPCODE which takes the name of the
struct for the interface and the name of one of its members. It then
calculates the opcode number by dividing the offsetof the member by
the size of a function pointer. This assumes the interface struct only
contains function pointers and that they are in order of the opcodes.
---
 src/wayland-util.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/wayland-util.h b/src/wayland-util.h
index fd32826..480a887 100644
--- a/src/wayland-util.h
+++ b/src/wayland-util.h
@@ -73,6 +73,18 @@ struct wl_interface {
 	const struct wl_message *events;
 };
 
+/**
+ * Gets the opcode of a request from its interface struct
+ *
+ * Given the name of an interface struct an a request within it this
+ * will return the opcode number. For example it can be used like
+ * this:
+ *
+ * int opcode = WL_REQUEST_OPCODE(wl_region_interface, subtract);
+ */
+#define WL_REQUEST_OPCODE(interface, member) \
+	(offsetof(struct interface, member) / sizeof (void (*) (void)))
+
 /** \class wl_list
  *
  * \brief doubly-linked list
-- 
1.9.0



More information about the wayland-devel mailing list