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
19 #elif defined(__GNUC__)
22 #error Unknown compiler
25 /* Function attributes for GCC */
26 #if !defined(_MSC_VER) && !defined(__fastcall)
27 #define __fastcall __attribute__((fastcall))
29 #if !defined(_MSC_VER) && !defined(__cdecl)
30 #define __cdecl __attribute__((cdecl))
32 #if !defined(_MSC_VER) && !defined(__stdcall)
33 #define __stdcall __attribute__((stdcall))
36 /* Basic definitions */
37 #define UNIMPLEMENTED { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
38 #define ASSERT(x) assert(x)
39 #define ASSERTMSG(x, m) assert(x)
40 #define DPRINT if (0) printf
41 #define DPRINT1 printf
51 #define TRUE (!(FALSE))
53 /* FIXME: this value is target specific, host tools MUST not use it
54 * and this line has to be removed */
55 #define PAGE_SIZE 4096
57 #define ANYSIZE_ARRAY 1
59 /* Type definitions */
60 typedef void VOID
, *PVOID
, *HANDLE
;
61 typedef HANDLE HKEY
, *PHKEY
;
62 typedef unsigned char UCHAR
, *PUCHAR
, BYTE
, *LPBYTE
;
63 typedef char CHAR
, *PCHAR
, *PSTR
;
64 typedef const char CCHAR
;
65 typedef const char *PCSTR
, *LPCSTR
;
66 typedef short SHORT
, *PSHORT
;
67 typedef unsigned short USHORT
, *PUSHORT
;
68 typedef unsigned short WORD
, *PWORD
, *LPWORD
;
69 typedef int LONG
, *PLONG
, *LPLONG
;
70 typedef unsigned int ULONG
, *PULONG
, DWORD
, *LPDWORD
;
71 typedef long long LONGLONG
;
72 typedef unsigned long long ULONGLONG
;
74 typedef unsigned int UINT
, *PUINT
, *LPUINT
;
75 typedef UCHAR BOOLEAN
, *PBOOLEAN
;
77 typedef long int W64 LONG_PTR
, *PLONG_PTR
;
78 typedef long unsigned int W64 ULONG_PTR
, DWORD_PTR
, *PULONG_PTR
;
79 typedef ULONG_PTR SIZE_T
, *PSIZE_T
;
80 typedef unsigned short WCHAR
, *PWCHAR
, *PWSTR
, *LPWSTR
;
81 typedef const unsigned short *PCWSTR
, *LPCWSTR
;
83 typedef int POOL_TYPE
;
86 #define MAXUSHORT USHRT_MAX
88 /* Widely used structures */
89 #include <host/pshpack4.h>
90 typedef struct _RTL_BITMAP
94 } RTL_BITMAP
, *PRTL_BITMAP
;
96 typedef struct _RTL_BITMAP_RUN
100 } RTL_BITMAP_RUN
, *PRTL_BITMAP_RUN
;
102 typedef union _LARGE_INTEGER
110 } LARGE_INTEGER
, *PLARGE_INTEGER
;
112 typedef struct _LIST_ENTRY
114 struct _LIST_ENTRY
*Flink
;
115 struct _LIST_ENTRY
*Blink
;
116 } LIST_ENTRY
,*PLIST_ENTRY
;
118 typedef struct _ANSI_STRING
121 USHORT MaximumLength
;
123 } ANSI_STRING
, *PANSI_STRING
;
125 typedef struct _UNICODE_STRING
128 USHORT MaximumLength
;
130 } UNICODE_STRING
, *PUNICODE_STRING
;
131 #include <host/poppack.h>
137 IN PLIST_ENTRY ListHead
140 ListHead
->Flink
= ListHead
->Blink
= ListHead
;
146 IN PLIST_ENTRY ListHead
,
150 PLIST_ENTRY OldFlink
;
151 OldFlink
= ListHead
->Flink
;
152 Entry
->Flink
= OldFlink
;
153 Entry
->Blink
= ListHead
;
154 OldFlink
->Blink
= Entry
;
155 ListHead
->Flink
= Entry
;
161 IN PLIST_ENTRY ListHead
,
165 PLIST_ENTRY OldBlink
;
166 OldBlink
= ListHead
->Blink
;
167 Entry
->Flink
= ListHead
;
168 Entry
->Blink
= OldBlink
;
169 OldBlink
->Flink
= Entry
;
170 ListHead
->Blink
= Entry
;
176 IN
const LIST_ENTRY
* ListHead
179 return (BOOLEAN
)(ListHead
->Flink
== ListHead
);
185 IN PLIST_ENTRY Entry
)
187 PLIST_ENTRY OldFlink
;
188 PLIST_ENTRY OldBlink
;
190 OldFlink
= Entry
->Flink
;
191 OldBlink
= Entry
->Blink
;
192 OldFlink
->Blink
= OldBlink
;
193 OldBlink
->Flink
= OldFlink
;
194 return (BOOLEAN
)(OldFlink
== OldBlink
);
200 IN PLIST_ENTRY ListHead
)
205 Entry
= ListHead
->Flink
;
206 Flink
= Entry
->Flink
;
207 ListHead
->Flink
= Flink
;
208 Flink
->Blink
= ListHead
;
215 IN PLIST_ENTRY ListHead
)
220 Entry
= ListHead
->Blink
;
221 Blink
= Entry
->Blink
;
222 ListHead
->Blink
= Blink
;
223 Blink
->Flink
= ListHead
;
227 typedef const UNICODE_STRING
*PCUNICODE_STRING
;
229 /* Widely used macros */
230 #define min(a, b) ((a) < (b) ? (a) : (b))
231 #define max(a,b) ((a) < (b) ? (b) : (a))
233 #define LOBYTE(w) ((BYTE)(w))
234 #define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
235 #define LOWORD(l) ((WORD)((DWORD_PTR)(l)))
236 #define HIWORD(l) ((WORD)(((DWORD_PTR)(l)>>16)&0xFFFF))
237 #define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
238 #define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
240 #define NT_SUCCESS(x) ((x)>=0)
241 #define FIELD_OFFSET(t,f) ((LONG_PTR)&(((t*)0)->f))
242 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
243 #define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
245 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
246 #define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
247 #define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
249 /* Prevent inclusion of some other headers */
250 #define __INTERNAL_DEBUG