[PATCH 1/3] include: Define FIELD_OFFSET to the standard offsetof macro

Amine Khaldi amine.khaldi at reactos.org
Mon Dec 10 12:37:11 CST 2012


This prevents the undefined behavior (null pointer dereference)
diagnostics (clang with ubsan checks for example).

---
 include/winnt.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/include/winnt.h b/include/winnt.h
index 207adaa..a3b996a 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -746,8 +746,12 @@ typedef struct _MEMORY_BASIC_INFORMATION
 
 #define UNICODE_STRING_MAX_CHARS 32767
 
+#if defined(__GNUC__) || defined(__clang__)
+#define FIELD_OFFSET(type, field) offsetof(type, field)
+#else
 #define FIELD_OFFSET(type, field) \
   ((LONG)(INT_PTR)&(((type *)0)->field))
+#endif
 
 #define CONTAINING_RECORD(address, type, field) \
   ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
-- 
1.8.0




More information about the wine-patches mailing list