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
7 Copyright 2007 Colin Finck <mail@colinfinck.de>
10 #ifndef _TYPEDEFS_HOST_H
11 #define _TYPEDEFS_HOST_H
17 /* Function attributes for GCC */
18 #if !defined(_MSC_VER) && !defined(__fastcall)
19 #define __fastcall __attribute__((fastcall))
21 #if !defined(_MSC_VER) && !defined(__cdecl)
22 #define __cdecl __attribute__((cdecl))
24 #if !defined(_MSC_VER) && !defined(__stdcall)
25 #define __stdcall __attribute__((stdcall))
28 /* Basic definitions */
29 #define UNIMPLEMENTED { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
30 #define ASSERT(x) assert(x)
31 #define ASSERTMSG(x, m) assert(x)
32 #define DPRINT if (0) printf
33 #define DPRINT1 printf
45 #define ANYSIZE_ARRAY 1
48 Emulate a LLP64 memory model using a LP64 compiler */
49 typedef void VOID
, *PVOID
;
50 typedef char CHAR
, CCHAR
, *PCHAR
, *PSTR
;
51 typedef const char *PCSTR
, *LPCSTR
;
52 typedef unsigned char UCHAR
, *PUCHAR
, BYTE
, *LPBYTE
, BOOLEAN
, *PBOOLEAN
;
53 typedef short SHORT
, *PSHORT
;
54 typedef unsigned short USHORT
, *PUSHORT
, WORD
, *PWORD
, *LPWORD
, WCHAR
, *PWCHAR
, *PWSTR
, *LPWSTR
;
55 typedef const unsigned short *PCWSTR
, *LPCWSTR
;
56 typedef int INT
, LONG
, *PLONG
, *LPLONG
, BOOL
;
57 typedef unsigned int UINT
, *PUINT
, *LPUINT
, ULONG
, *PULONG
, DWORD
, *LPDWORD
;
58 typedef long LONG_PTR
, *PLONG_PTR
, INT_PTR
, *PINT_PTR
;
59 typedef unsigned long ULONG_PTR
, DWORD_PTR
, *PULONG_PTR
, UINT_PTR
, *PUINT_PTR
;
60 typedef long long LONGLONG
;
61 typedef unsigned long long ULONGLONG
;
64 typedef PVOID HANDLE
, HKEY
, *PHKEY
;
65 typedef INT NTSTATUS
, POOL_TYPE
;
67 typedef ULONG_PTR SIZE_T
, *PSIZE_T
;
69 #define MAXUSHORT USHRT_MAX
71 /* Widely used structures */
72 #include <host/pshpack4.h>
73 typedef struct _RTL_BITMAP
77 } RTL_BITMAP
, *PRTL_BITMAP
;
79 typedef struct _RTL_BITMAP_RUN
83 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
85 typedef union _LARGE_INTEGER
93 } LARGE_INTEGER
, *PLARGE_INTEGER
;
95 typedef struct _LIST_ENTRY
97 struct _LIST_ENTRY
*Flink
;
98 struct _LIST_ENTRY
*Blink
;
99 } LIST_ENTRY
,*PLIST_ENTRY
;
101 typedef struct _ANSI_STRING
104 USHORT MaximumLength
;
106 } ANSI_STRING
, *PANSI_STRING
;
108 typedef struct _UNICODE_STRING
111 USHORT MaximumLength
;
113 } UNICODE_STRING
, *PUNICODE_STRING
;
114 #include <host/poppack.h>
120 IN PLIST_ENTRY ListHead
123 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
129 IN PLIST_ENTRY ListHead
,
133 PLIST_ENTRY OldFlink
;
134 OldFlink
= ListHead
->Flink
;
135 Entry
->Flink
= OldFlink
;
136 Entry
->Blink
= ListHead
;
137 OldFlink
->Blink
= Entry
;
138 ListHead
->Flink
= Entry
;
144 IN PLIST_ENTRY ListHead
,
148 PLIST_ENTRY OldBlink
;
149 OldBlink
= ListHead
->Blink
;
150 Entry
->Flink
= ListHead
;
151 Entry
->Blink
= OldBlink
;
152 OldBlink
->Flink
= Entry
;
153 ListHead
->Blink
= Entry
;
159 IN
const LIST_ENTRY
* ListHead
162 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
168 IN PLIST_ENTRY Entry
)
170 PLIST_ENTRY OldFlink
;
171 PLIST_ENTRY OldBlink
;
173 OldFlink
= Entry
->Flink
;
174 OldBlink
= Entry
->Blink
;
175 OldFlink
->Blink
= OldBlink
;
176 OldBlink
->Flink
= OldFlink
;
177 return (BOOLEAN
)(OldFlink
== OldBlink
);
183 IN PLIST_ENTRY ListHead
)
188 Entry
= ListHead
->Flink
;
189 Flink
= Entry
->Flink
;
190 ListHead
->Flink
= Flink
;
191 Flink
->Blink
= ListHead
;
198 IN PLIST_ENTRY ListHead
)
203 Entry
= ListHead
->Blink
;
204 Blink
= Entry
->Blink
;
205 ListHead
->Blink
= Blink
;
206 Blink
->Flink
= ListHead
;
210 typedef const UNICODE_STRING
*PCUNICODE_STRING
;
212 /* Widely used macros */
213 #define LOBYTE(w) ((BYTE)(w))
214 #define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
215 #define LOWORD(l) ((WORD)((DWORD_PTR)(l)))
216 #define HIWORD(l) ((WORD)(((DWORD_PTR)(l)>>16)&0xFFFF))
217 #define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
218 #define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
220 #define MAXULONG 0xFFFFFFFF
222 #define NT_SUCCESS(x) ((x)>=0)
223 #if !defined(__GNUC__)
224 #define FIELD_OFFSET(t,f) ((LONG)(LONG_PTR)&(((t*) 0)->f))
226 #define FIELD_OFFSET(t,f) ((LONG)__builtin_offsetof(t,f))
228 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
229 #define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
231 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
232 #define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
233 #define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
235 /* Prevent inclusion of some other headers */
236 #define __INTERNAL_DEBUG