Create a branch for network fixes.
[reactos.git] / include / host / typedefs.h
1 /*
2 PROJECT: ReactOS
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>
8 */
9
10 #ifndef _TYPEDEFS_HOST_H
11 #define _TYPEDEFS_HOST_H
12
13 #include <assert.h>
14 #include <stdlib.h>
15 #include <limits.h>
16
17 /* Function attributes for GCC */
18 #if !defined(_MSC_VER) && !defined(__fastcall)
19 #define __fastcall __attribute__((fastcall))
20 #endif
21 #if !defined(_MSC_VER) && !defined(__cdecl)
22 #define __cdecl __attribute__((cdecl))
23 #endif
24 #if !defined(_MSC_VER) && !defined(__stdcall)
25 #define __stdcall __attribute__((stdcall))
26 #endif
27
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
34
35 #define NTAPI
36 #define WINAPI
37
38 #define IN
39 #define OUT
40 #define OPTIONAL
41
42 #define FALSE 0
43 #define TRUE (!(FALSE))
44
45 /* FIXME: this value is target specific, host tools MUST not use it
46 * and this line has to be removed */
47 #define PAGE_SIZE 4096
48
49 #define ANYSIZE_ARRAY 1
50
51 /* Type definitions */
52 typedef void VOID, *PVOID, *HANDLE;
53 typedef HANDLE HKEY, *PHKEY;
54 typedef unsigned char UCHAR, *PUCHAR, BYTE, *LPBYTE;
55 typedef char CHAR, *PCHAR, *PSTR;
56 typedef const char CCHAR;
57 typedef const char *PCSTR, *LPCSTR;
58 typedef short SHORT, *PSHORT;
59 typedef unsigned short USHORT, *PUSHORT;
60 typedef unsigned short WORD, *PWORD, *LPWORD;
61 typedef int LONG, *PLONG, *LPLONG;
62 typedef unsigned int ULONG, *PULONG, DWORD, *LPDWORD;
63 typedef long long LONGLONG;
64 typedef unsigned long long ULONGLONG;
65 typedef int INT;
66 typedef unsigned int UINT, *PUINT, *LPUINT, UINT_PTR, *PUINT_PTR;
67 typedef UCHAR BOOLEAN, *PBOOLEAN;
68 typedef int BOOL;
69 typedef long int LONG_PTR, *PLONG_PTR;
70 typedef long unsigned int ULONG_PTR, DWORD_PTR, *PULONG_PTR;
71 typedef ULONG_PTR SIZE_T, *PSIZE_T;
72 typedef unsigned short WCHAR, *PWCHAR, *PWSTR, *LPWSTR;
73 typedef const unsigned short *PCWSTR, *LPCWSTR;
74 typedef int NTSTATUS;
75 typedef int POOL_TYPE;
76 typedef LONG HRESULT;
77
78 #define MAXUSHORT USHRT_MAX
79
80 /* Widely used structures */
81 #include <host/pshpack4.h>
82 typedef struct _RTL_BITMAP
83 {
84 ULONG SizeOfBitMap;
85 PULONG Buffer;
86 } RTL_BITMAP, *PRTL_BITMAP;
87
88 typedef struct _RTL_BITMAP_RUN
89 {
90 ULONG StartingIndex;
91 ULONG NumberOfBits;
92 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
93
94 typedef union _LARGE_INTEGER
95 {
96 struct
97 {
98 DWORD LowPart;
99 LONG HighPart;
100 };
101 LONGLONG QuadPart;
102 } LARGE_INTEGER, *PLARGE_INTEGER;
103
104 typedef struct _LIST_ENTRY
105 {
106 struct _LIST_ENTRY *Flink;
107 struct _LIST_ENTRY *Blink;
108 } LIST_ENTRY,*PLIST_ENTRY;
109
110 typedef struct _ANSI_STRING
111 {
112 USHORT Length;
113 USHORT MaximumLength;
114 PSTR Buffer;
115 } ANSI_STRING, *PANSI_STRING;
116
117 typedef struct _UNICODE_STRING
118 {
119 USHORT Length;
120 USHORT MaximumLength;
121 PWSTR Buffer;
122 } UNICODE_STRING, *PUNICODE_STRING;
123 #include <host/poppack.h>
124
125 /* List Functions */
126 static __inline
127 VOID
128 InitializeListHead(
129 IN PLIST_ENTRY ListHead
130 )
131 {
132 ListHead->Flink = ListHead->Blink = ListHead;
133 }
134
135 static __inline
136 VOID
137 InsertHeadList(
138 IN PLIST_ENTRY ListHead,
139 IN PLIST_ENTRY Entry
140 )
141 {
142 PLIST_ENTRY OldFlink;
143 OldFlink = ListHead->Flink;
144 Entry->Flink = OldFlink;
145 Entry->Blink = ListHead;
146 OldFlink->Blink = Entry;
147 ListHead->Flink = Entry;
148 }
149
150 static __inline
151 VOID
152 InsertTailList(
153 IN PLIST_ENTRY ListHead,
154 IN PLIST_ENTRY Entry
155 )
156 {
157 PLIST_ENTRY OldBlink;
158 OldBlink = ListHead->Blink;
159 Entry->Flink = ListHead;
160 Entry->Blink = OldBlink;
161 OldBlink->Flink = Entry;
162 ListHead->Blink = Entry;
163 }
164
165 BOOLEAN
166 static __inline
167 IsListEmpty(
168 IN const LIST_ENTRY * ListHead
169 )
170 {
171 return (BOOLEAN)(ListHead->Flink == ListHead);
172 }
173
174 static __inline
175 BOOLEAN
176 RemoveEntryList(
177 IN PLIST_ENTRY Entry)
178 {
179 PLIST_ENTRY OldFlink;
180 PLIST_ENTRY OldBlink;
181
182 OldFlink = Entry->Flink;
183 OldBlink = Entry->Blink;
184 OldFlink->Blink = OldBlink;
185 OldBlink->Flink = OldFlink;
186 return (BOOLEAN)(OldFlink == OldBlink);
187 }
188
189 static __inline
190 PLIST_ENTRY
191 RemoveHeadList(
192 IN PLIST_ENTRY ListHead)
193 {
194 PLIST_ENTRY Flink;
195 PLIST_ENTRY Entry;
196
197 Entry = ListHead->Flink;
198 Flink = Entry->Flink;
199 ListHead->Flink = Flink;
200 Flink->Blink = ListHead;
201 return Entry;
202 }
203
204 static __inline
205 PLIST_ENTRY
206 RemoveTailList(
207 IN PLIST_ENTRY ListHead)
208 {
209 PLIST_ENTRY Blink;
210 PLIST_ENTRY Entry;
211
212 Entry = ListHead->Blink;
213 Blink = Entry->Blink;
214 ListHead->Blink = Blink;
215 Blink->Flink = ListHead;
216 return Entry;
217 }
218
219 typedef const UNICODE_STRING *PCUNICODE_STRING;
220
221 /* Widely used macros */
222 #define LOBYTE(w) ((BYTE)(w))
223 #define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
224 #define LOWORD(l) ((WORD)((DWORD_PTR)(l)))
225 #define HIWORD(l) ((WORD)(((DWORD_PTR)(l)>>16)&0xFFFF))
226 #define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
227 #define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
228
229 #define NT_SUCCESS(x) ((x)>=0)
230 #define FIELD_OFFSET(t,f) ((LONG_PTR)&(((t*)0)->f))
231 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
232 #define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
233
234 #define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
235 #define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
236 #define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
237
238 /* Prevent inclusion of some other headers */
239 #define __INTERNAL_DEBUG
240 #define RTL_H
241
242 #endif