#include <stdarg.h>
#include <string.h>
+/* Helper macro to enable gcc's extension. */
+#ifndef __GNU_EXTENSION
+#ifdef __GNUC__
+#define __GNU_EXTENSION __extension__
+#else
+#define __GNU_EXTENSION
+#endif
+#endif
typedef unsigned long POINTER_64; // FIXME! HACK!!!
// We should use the -fms-extensions compiler flag for gcc,
// and clean up the mess.
//
+#ifndef __ANONYMOUS_DEFINED
+#define __ANONYMOUS_DEFINED
+
#ifndef NONAMELESSUNION
#ifdef __GNUC__
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-#define _ANONYMOUS_UNION __extension__
-#define _ANONYMOUS_STRUCT __extension__
-#else
-#if defined(__cplusplus)
-#define _ANONYMOUS_UNION __extension__
-#endif /* __cplusplus */
-#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */
+#define _ANONYMOUS_UNION __GNU_EXTENSION
+#define _ANONYMOUS_STRUCT __GNU_EXTENSION
#elif defined(__WATCOMC__) || defined(_MSC_VER)
#define _ANONYMOUS_UNION
#define _ANONYMOUS_STRUCT
#define DUMMYSTRUCTNAME s
#define DUMMYSTRUCTNAME2 s2
#define DUMMYSTRUCTNAME3 s3
+#define DUMMYSTRUCTNAME4 s4
+#define DUMMYSTRUCTNAME5 s5
#else
#define _STRUCT_NAME(x)
#define DUMMYSTRUCTNAME
#define DUMMYSTRUCTNAME2
#define DUMMYSTRUCTNAME3
+#define DUMMYSTRUCTNAME4
+#define DUMMYSTRUCTNAME5
#endif
-
+#endif /* __ANONYMOUS_DEFINED */
// FIXME
#undef UNALIGNED
{
_ANONYMOUS_UNION union
{
- __int64 UseThisFieldToCopy;
+ __GNU_EXTENSION __int64 UseThisFieldToCopy;
double DoNotUseThisField;
};
} QUAD, *PQUAD, UQUAD, *PUQUAD;
//
// 64-bit types
//
-typedef __int64 LONGLONG, *PLONGLONG;
-typedef unsigned __int64 ULONGLONG, *PULONGLONG;
+__GNU_EXTENSION typedef __int64 LONGLONG, *PLONGLONG;
+__GNU_EXTENSION typedef unsigned __int64 ULONGLONG, *PULONGLONG;
typedef ULONGLONG DWORDLONG, *PDWORDLONG;
//
typedef STRING CANSI_STRING;
typedef PSTRING PCANSI_STRING;
+typedef struct _STRING32 {
+ USHORT Length;
+ USHORT MaximumLength;
+ ULONG Buffer;
+} STRING32, *PSTRING32,
+ UNICODE_STRING32, *PUNICODE_STRING32,
+ ANSI_STRING32, *PANSI_STRING32;
+typedef struct _STRING64 {
+ USHORT Length;
+ USHORT MaximumLength;
+ ULONGLONG Buffer;
+} STRING64, *PSTRING64,
+ UNICODE_STRING64, *PUNICODE_STRING64,
+ ANSI_STRING64, *PANSI_STRING64;
//
// LangID and NLS
//
// C_ASSERT Definition
//
-#define __C_ASSERT_JOIN(X, Y) __C_ASSERT_DO_JOIN(X, Y)
-#define __C_ASSERT_DO_JOIN(X, Y) __C_ASSERT_DO_JOIN2(X, Y)
-#define __C_ASSERT_DO_JOIN2(X, Y) X##Y
-#define C_ASSERT(e) typedef char __C_ASSERT_JOIN(__C_ASSERT__, __LINE__)[(e) ? 1 : -1]
+#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]