3 LICENSE: GPL v2 or any later version
4 FILE: include/host/typedefs.h
5 PURPOSE: Type definitions and useful macros for host tools
6 COPYRIGHT: Copyright 2007 Hervé Poussineau
9 #ifndef _TYPEDEFS_HOST_H
10 #define _TYPEDEFS_HOST_H
18 #elif defined(__GNUC__)
21 #error Unknown compiler
24 #if !defined(_MSC_VER) && !defined(__fastcall)
25 #define __fastcall __attribute__((fastcall))
27 #if !defined(_MSC_VER) && !defined(__cdecl)
28 #define __cdecl __attribute__((cdecl))
30 #if !defined(_MSC_VER) && !defined(__stdcall)
31 #define __stdcall __attribute__((stdcall))
34 #define UNIMPLEMENTED { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
35 #define ASSERT(x) assert(x)
36 #define ASSERTMSG(x, m) assert(x)
37 #define DPRINT if (0) printf
38 #define DPRINT1 printf
48 #define TRUE (!(FALSE))
50 /* FIXME: this value is target specific, host tools MUST not use it
51 * and this line has to be removed */
52 #define PAGE_SIZE 4096
54 #define ANYSIZE_ARRAY 1
56 typedef void VOID
, *PVOID
, *HANDLE
;
57 typedef HANDLE HKEY
, *PHKEY
;
58 typedef unsigned char UCHAR
, *PUCHAR
, BYTE
, *LPBYTE
;
59 typedef char CHAR
, *PCHAR
, *PSTR
;
60 typedef const char CCHAR
;
61 typedef const char *PCSTR
, *LPCSTR
;
62 typedef short SHORT
, *PSHORT
;
63 typedef unsigned short USHORT
, *PUSHORT
;
64 typedef unsigned short WORD
, *PWORD
, *LPWORD
;
65 typedef int LONG
, *PLONG
, *LPLONG
;
66 typedef unsigned int ULONG
, *PULONG
, DWORD
, *LPDWORD
;
67 typedef long long LONGLONG
;
68 typedef unsigned long long ULONGLONG
;
69 typedef UCHAR BOOLEAN
, *PBOOLEAN
;
71 typedef long int W64 LONG_PTR
, *PLONG_PTR
;
72 typedef long unsigned int W64 ULONG_PTR
, DWORD_PTR
, *PULONG_PTR
;
73 typedef ULONG_PTR SIZE_T
, *PSIZE_T
;
74 typedef unsigned short WCHAR
, *PWCHAR
, *PWSTR
, *LPWSTR
;
75 typedef const unsigned short *PCWSTR
, *LPCWSTR
;
77 typedef int POOL_TYPE
;
79 #define MAXUSHORT USHRT_MAX
81 #include <host/pshpack4.h>
82 typedef struct _RTL_BITMAP
86 } RTL_BITMAP
, *PRTL_BITMAP
;
88 typedef struct _RTL_BITMAP_RUN
92 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
94 typedef union _LARGE_INTEGER
102 } LARGE_INTEGER
, *PLARGE_INTEGER
;
104 typedef struct _LIST_ENTRY
106 struct _LIST_ENTRY
*Flink
;
107 struct _LIST_ENTRY
*Blink
;
108 } LIST_ENTRY
,*PLIST_ENTRY
;
110 typedef struct _ANSI_STRING
113 USHORT MaximumLength
;
115 } ANSI_STRING
, *PANSI_STRING
;
117 typedef struct _UNICODE_STRING
120 USHORT MaximumLength
;
122 } UNICODE_STRING
, *PUNICODE_STRING
;
123 #include <host/poppack.h>
131 IN PLIST_ENTRY ListHead
134 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
140 IN PLIST_ENTRY ListHead
,
144 PLIST_ENTRY OldFlink
;
145 OldFlink
= ListHead
->Flink
;
146 Entry
->Flink
= OldFlink
;
147 Entry
->Blink
= ListHead
;
148 OldFlink
->Blink
= Entry
;
149 ListHead
->Flink
= Entry
;
155 IN PLIST_ENTRY ListHead
,
159 PLIST_ENTRY OldBlink
;
160 OldBlink
= ListHead
->Blink
;
161 Entry
->Flink
= ListHead
;
162 Entry
->Blink
= OldBlink
;
163 OldBlink
->Flink
= Entry
;
164 ListHead
->Blink
= Entry
;
170 IN
const LIST_ENTRY
* ListHead
173 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
179 IN PLIST_ENTRY Entry
)
181 PLIST_ENTRY OldFlink
;
182 PLIST_ENTRY OldBlink
;
184 OldFlink
= Entry
->Flink
;
185 OldBlink
= Entry
->Blink
;
186 OldFlink
->Blink
= OldBlink
;
187 OldBlink
->Flink
= OldFlink
;
188 return (BOOLEAN
)(OldFlink
== OldBlink
);
194 IN PLIST_ENTRY ListHead
)
199 Entry
= ListHead
->Flink
;
200 Flink
= Entry
->Flink
;
201 ListHead
->Flink
= Flink
;
202 Flink
->Blink
= ListHead
;
209 IN PLIST_ENTRY ListHead
)
214 Entry
= ListHead
->Blink
;
215 Blink
= Entry
->Blink
;
216 ListHead
->Blink
= Blink
;
217 Blink
->Flink
= ListHead
;
221 typedef const UNICODE_STRING
*PCUNICODE_STRING
;
223 #define NT_SUCCESS(x) ((x)>=0)
224 #define FIELD_OFFSET(t,f) ((LONG_PTR)&(((t*)0)->f))
225 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
226 #define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
227 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
228 #define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
229 #define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
231 /* Prevent inclusion of some other headers */
232 #define __INTERNAL_DEBUG