From cb784c89505c6f45ec0a90a6d6e84ee6f4c76aaf Mon Sep 17 00:00:00 2001
From: Dimitri Papadopoulos <dimitri_at@users.sf.net>
Date: Wed, 19 Apr 2006 08:40:53 +0000
Subject: [PATCH] 	* include/winnt.h, include/ddk/winddk.h
 (FIELD_OFFSET): 	Compile with recent C++ compiler such as gcc 3.4. 
 * include/ddk/winddk.h: Ditto.

---
 winsup/w32api/ChangeLog            | 6 ++++++
 winsup/w32api/include/ddk/winddk.h | 5 +++++
 winsup/w32api/include/winnt.h      | 5 +++++
 3 files changed, 16 insertions(+)

diff --git a/winsup/w32api/ChangeLog b/winsup/w32api/ChangeLog
index 2c1df14c4..91b930b07 100644
--- a/winsup/w32api/ChangeLog
+++ b/winsup/w32api/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-19  Dimitri Papadopoulos  <papadopo@users.sourceforge.net>
+
+	* include/winnt.h, include/ddk/winddk.h (FIELD_OFFSET):
+	Compile with recent C++ compiler such as gcc 3.4.
+	* include/ddk/winddk.h: Ditto.
+
 2006-04-19  Dimitri Papadopoulos  <papadopo@users.sourceforge.net>
 
 	* include/winuser.h (CharNextEx,CharNextExW,CharPrevEx,CharPrevExW):
diff --git a/winsup/w32api/include/ddk/winddk.h b/winsup/w32api/include/ddk/winddk.h
index 123a44a73..c9dabbb52 100644
--- a/winsup/w32api/include/ddk/winddk.h
+++ b/winsup/w32api/include/ddk/winddk.h
@@ -3967,9 +3967,14 @@ KefReleaseSpinLockFromDpcLevel(
  *   IN PCHAR  Field);
  */
 #ifndef FIELD_OFFSET
+#ifdef __cplusplus
+#define FIELD_OFFSET(Type, Field) (reinterpret_cast<LONG> \
+  (&reinterpret_cast<char&>(static_cast<Type *>(0)->Field)))
+#else
 #define FIELD_OFFSET(Type, Field) \
   ((LONG) (&(((Type *) 0)->Field)))
 #endif
+#endif
 
 /*
  * PVOID
diff --git a/winsup/w32api/include/winnt.h b/winsup/w32api/include/winnt.h
index e6f071d79..219d99055 100644
--- a/winsup/w32api/include/winnt.h
+++ b/winsup/w32api/include/winnt.h
@@ -845,7 +845,12 @@ typedef DWORD FLONG;
 #define RTL_CRITSECT_TYPE 0
 #define RTL_RESOURCE_TYPE 1
 /* Also in winddk.h */
+#ifdef __cplusplus
+#define FIELD_OFFSET(t,f) (reinterpret_cast<LONG> \
+	(&reinterpret_cast<char&>(static_cast<t*>(0)->f)))
+#else
 #define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f))
+#endif
 #ifndef CONTAINING_RECORD
 #define CONTAINING_RECORD(address, type, field) \
   ((type*)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))