// We should use the -fms-extensions compiler flag for gcc,
// and clean up the mess.
//
-#ifdef __GNUC__
#ifndef NONAMELESSUNION
+#ifdef __GNUC__
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
#define _ANONYMOUS_UNION __extension__
#define _ANONYMOUS_STRUCT __extension__
#define _ANONYMOUS_UNION __extension__
#endif /* __cplusplus */
#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */
-#endif /* NONAMELESSUNION */
#elif defined(__WATCOMC__) || defined(_MSC_VER)
#define _ANONYMOUS_UNION
#define _ANONYMOUS_STRUCT
#endif /* __GNUC__/__WATCOMC__ */
+#endif /* NONAMELESSUNION */
#ifndef _ANONYMOUS_UNION
#define _ANONYMOUS_UNION
//
// Returns the byte offset of the specified structure's member
//
-#ifndef FIELD_OFFSET
-#define FIELD_OFFSET(Type, Field) \
- ((LONG)(LONG_PTR) (&(((Type *) 0)->Field)))
+#ifndef __GNUC__
+#define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field))
+#else
+#define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field)
#endif
//
// Returns the type's alignment
//
+#if defined(_MSC_VER) && (_MSC_VER >= 1300)
+#define TYPE_ALIGNMENT(t) __alignof(t)
+#else
#define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test )
-
+#endif
//
// Calling Conventions
typedef union _LARGE_INTEGER {
_ANONYMOUS_STRUCT struct
{
- ULONG LowPart;
+ DWORD LowPart;
LONG HighPart;
} DUMMYSTRUCTNAME;
struct
{
- ULONG LowPart;
+ DWORD LowPart;
LONG HighPart;
} u;
#endif //MIDL_PASS
typedef union _ULARGE_INTEGER {
_ANONYMOUS_STRUCT struct
{
- ULONG LowPart;
- ULONG HighPart;
+ DWORD LowPart;
+ DWORD HighPart;
} DUMMYSTRUCTNAME;
struct
{
- ULONG LowPart;
- ULONG HighPart;
+ DWORD LowPart;
+ DWORD HighPart;
} u;
#endif //MIDL_PASS
ULONGLONG QuadPart;