mirror of
https://github.com/reactos/reactos.git
synced 2024-08-25 04:38:43 +00:00
![winesync](/assets/img/avatar_default.png)
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org> wine commit id 6b1bc0beac510aa48a848b8182b9310f92609dd0 by Jacek Caban <jacek@codeweavers.com>
277 lines
6.7 KiB
C
277 lines
6.7 KiB
C
/*
|
|
* PROJECT: ReactOS Host Headers
|
|
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
|
* PURPOSE: Type definitions and useful macros for host tools
|
|
* COPYRIGHT: Copyright 2007 Hervé Poussineau (hpoussin@reactos.org)
|
|
* Copyright 2007 Colin Finck (colin@reactos.org)
|
|
*/
|
|
|
|
#ifndef _TYPEDEFS_HOST_H
|
|
#define _TYPEDEFS_HOST_H
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
#include <stdint.h>
|
|
|
|
/* Function attributes for GCC */
|
|
#if !defined(_MSC_VER) && !defined(__fastcall)
|
|
#define __fastcall __attribute__((fastcall))
|
|
#endif
|
|
#if !defined(_MSC_VER) && !defined(__cdecl)
|
|
#define __cdecl __attribute__((cdecl))
|
|
#endif
|
|
#if !defined(_MSC_VER) && !defined(__stdcall)
|
|
#define __stdcall __attribute__((stdcall))
|
|
#endif
|
|
|
|
/* Basic definitions */
|
|
#define UNIMPLEMENTED { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
|
|
#define UNIMPLEMENTED_ONCE { printf("%s unimplemented\n", __FUNCTION__); exit(1); }
|
|
#define ASSERT(x) assert(x)
|
|
#define ASSERTMSG(m, x) assert(x)
|
|
#define DPRINT if (0) printf
|
|
#define DPRINT1 printf
|
|
|
|
#define NTAPI
|
|
#define WINAPI
|
|
|
|
#define IN
|
|
#define OUT
|
|
#define OPTIONAL
|
|
|
|
#define FALSE 0
|
|
#define TRUE 1
|
|
|
|
#define ANYSIZE_ARRAY 1
|
|
|
|
/* Basic types
|
|
Emulate a LLP64 memory model using a LP64 compiler */
|
|
typedef void VOID, *PVOID, *LPVOID;
|
|
typedef char CHAR, CCHAR, *PCHAR, *PSTR, *LPSTR;
|
|
typedef const char *PCSTR, *LPCSTR;
|
|
typedef unsigned char UCHAR, *PUCHAR, BYTE, *LPBYTE, BOOLEAN, *PBOOLEAN;
|
|
typedef uint8_t UINT8;
|
|
typedef int16_t SHORT, *PSHORT;
|
|
typedef uint16_t USHORT, *PUSHORT, WORD, *PWORD, *LPWORD, WCHAR, *PWCHAR, *PWSTR, *LPWSTR, UINT16;
|
|
typedef const uint16_t *PCWSTR, *LPCWSTR;
|
|
typedef int32_t INT, LONG, *PLONG, *LPLONG, BOOL, WINBOOL, INT32;
|
|
typedef uint32_t UINT, *PUINT, *LPUINT, ULONG, *PULONG, DWORD, *PDWORD, *LPDWORD, UINT32;
|
|
#if defined(_LP64) || defined(_WIN64)
|
|
typedef int64_t LONG_PTR, *PLONG_PTR, INT_PTR, *PINT_PTR;
|
|
typedef uint64_t ULONG_PTR, DWORD_PTR, *PULONG_PTR, UINT_PTR, *PUINT_PTR;
|
|
#else
|
|
typedef int32_t LONG_PTR, *PLONG_PTR, INT_PTR, *PINT_PTR;
|
|
typedef uint32_t ULONG_PTR, DWORD_PTR, *PULONG_PTR, UINT_PTR, *PUINT_PTR;
|
|
#endif
|
|
typedef uint64_t ULONG64, DWORD64, *PDWORD64, UINT64, ULONGLONG;
|
|
typedef int64_t LONGLONG, LONG64, INT64;
|
|
typedef float FLOAT;
|
|
typedef double DOUBLE;
|
|
|
|
/* Derived types */
|
|
typedef PVOID HANDLE;
|
|
#ifndef _HAVE_HKEY
|
|
typedef HANDLE HKEY, *PHKEY;
|
|
#endif
|
|
typedef HANDLE HMODULE, HINSTANCE;
|
|
typedef INT NTSTATUS, POOL_TYPE;
|
|
typedef LONG HRESULT;
|
|
typedef ULONG_PTR SIZE_T, *PSIZE_T;
|
|
typedef WORD LANGID;
|
|
|
|
#define MAXUSHORT USHRT_MAX
|
|
|
|
/* Widely used structures */
|
|
|
|
#ifndef _HAVE_RTL_BITMAP
|
|
typedef struct _RTL_BITMAP
|
|
{
|
|
ULONG SizeOfBitMap;
|
|
PULONG Buffer;
|
|
} RTL_BITMAP, *PRTL_BITMAP;
|
|
|
|
typedef struct _RTL_BITMAP_RUN
|
|
{
|
|
ULONG StartingIndex;
|
|
ULONG NumberOfBits;
|
|
} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
|
|
#endif
|
|
|
|
#ifndef _HAVE_LARGE_INTEGER
|
|
typedef union _LARGE_INTEGER
|
|
{
|
|
struct
|
|
{
|
|
ULONG LowPart;
|
|
LONG HighPart;
|
|
};
|
|
struct
|
|
{
|
|
ULONG LowPart;
|
|
LONG HighPart;
|
|
} u;
|
|
LONGLONG QuadPart;
|
|
} LARGE_INTEGER, *PLARGE_INTEGER;
|
|
#endif
|
|
|
|
#ifndef _HAVE_LIST_ENTRY
|
|
typedef struct _LIST_ENTRY
|
|
{
|
|
struct _LIST_ENTRY *Flink;
|
|
struct _LIST_ENTRY *Blink;
|
|
} LIST_ENTRY,*PLIST_ENTRY;
|
|
#endif
|
|
|
|
#ifndef _HAVE_ANSI_STRING
|
|
typedef struct _ANSI_STRING
|
|
{
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PSTR Buffer;
|
|
} ANSI_STRING, *PANSI_STRING;
|
|
|
|
typedef struct _UNICODE_STRING
|
|
{
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PWSTR Buffer;
|
|
} UNICODE_STRING, *PUNICODE_STRING;
|
|
#endif
|
|
|
|
|
|
#ifndef _HAVE_LIST_ENTRY
|
|
/* List Functions */
|
|
static __inline
|
|
VOID
|
|
InitializeListHead(
|
|
IN PLIST_ENTRY ListHead
|
|
)
|
|
{
|
|
ListHead->Flink = ListHead->Blink = ListHead;
|
|
}
|
|
|
|
static __inline
|
|
VOID
|
|
InsertHeadList(
|
|
IN PLIST_ENTRY ListHead,
|
|
IN PLIST_ENTRY Entry
|
|
)
|
|
{
|
|
PLIST_ENTRY OldFlink;
|
|
OldFlink = ListHead->Flink;
|
|
Entry->Flink = OldFlink;
|
|
Entry->Blink = ListHead;
|
|
OldFlink->Blink = Entry;
|
|
ListHead->Flink = Entry;
|
|
}
|
|
|
|
static __inline
|
|
VOID
|
|
InsertTailList(
|
|
IN PLIST_ENTRY ListHead,
|
|
IN PLIST_ENTRY Entry
|
|
)
|
|
{
|
|
PLIST_ENTRY OldBlink;
|
|
OldBlink = ListHead->Blink;
|
|
Entry->Flink = ListHead;
|
|
Entry->Blink = OldBlink;
|
|
OldBlink->Flink = Entry;
|
|
ListHead->Blink = Entry;
|
|
}
|
|
|
|
static __inline
|
|
BOOLEAN
|
|
IsListEmpty(
|
|
IN const LIST_ENTRY * ListHead
|
|
)
|
|
{
|
|
return (BOOLEAN)(ListHead->Flink == ListHead);
|
|
}
|
|
|
|
static __inline
|
|
BOOLEAN
|
|
RemoveEntryList(
|
|
IN PLIST_ENTRY Entry)
|
|
{
|
|
PLIST_ENTRY OldFlink;
|
|
PLIST_ENTRY OldBlink;
|
|
|
|
OldFlink = Entry->Flink;
|
|
OldBlink = Entry->Blink;
|
|
OldFlink->Blink = OldBlink;
|
|
OldBlink->Flink = OldFlink;
|
|
return (BOOLEAN)(OldFlink == OldBlink);
|
|
}
|
|
|
|
static __inline
|
|
PLIST_ENTRY
|
|
RemoveHeadList(
|
|
IN PLIST_ENTRY ListHead)
|
|
{
|
|
PLIST_ENTRY Flink;
|
|
PLIST_ENTRY Entry;
|
|
|
|
Entry = ListHead->Flink;
|
|
Flink = Entry->Flink;
|
|
ListHead->Flink = Flink;
|
|
Flink->Blink = ListHead;
|
|
return Entry;
|
|
}
|
|
|
|
static __inline
|
|
PLIST_ENTRY
|
|
RemoveTailList(
|
|
IN PLIST_ENTRY ListHead)
|
|
{
|
|
PLIST_ENTRY Blink;
|
|
PLIST_ENTRY Entry;
|
|
|
|
Entry = ListHead->Blink;
|
|
Blink = Entry->Blink;
|
|
ListHead->Blink = Blink;
|
|
Blink->Flink = ListHead;
|
|
return Entry;
|
|
}
|
|
#endif
|
|
|
|
#ifndef _HAVE_ANSI_STRING
|
|
typedef const UNICODE_STRING *PCUNICODE_STRING;
|
|
#endif
|
|
|
|
/* Widely used macros */
|
|
#define LOBYTE(w) ((BYTE)(w))
|
|
#define HIBYTE(w) ((BYTE)(((WORD)(w)>>8)&0xFF))
|
|
#define LOWORD(l) ((WORD)((DWORD_PTR)(l)))
|
|
#define HIWORD(l) ((WORD)(((DWORD_PTR)(l)>>16)&0xFFFF))
|
|
#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|(((WORD)((BYTE)(b)))<<8)))
|
|
#define MAKELONG(a,b) ((LONG)(((WORD)(a))|(((DWORD)((WORD)(b)))<<16)))
|
|
|
|
#define MAXULONG 0xFFFFFFFF
|
|
|
|
#define NT_SUCCESS(x) ((x)>=0)
|
|
#if !defined(__GNUC__)
|
|
#define FIELD_OFFSET(t,f) ((LONG)(LONG_PTR)&(((t*) 0)->f))
|
|
#else
|
|
#define FIELD_OFFSET(t,f) ((LONG)__builtin_offsetof(t,f))
|
|
#endif
|
|
#define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
|
|
#define CONTAINING_RECORD(address, type, field) ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
|
|
|
|
#define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
|
|
#define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
|
|
#define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
|
|
|
|
#define MAKELANGID(p,s) ((((WORD)(s))<<10)|(WORD)(p))
|
|
#define PRIMARYLANGID(l) ((WORD)(l)&0x3ff)
|
|
#define SUBLANGID(l) ((WORD)(l)>>10)
|
|
#define SUBLANG_NEUTRAL 0x00
|
|
|
|
/* Prevent inclusion of some other headers */
|
|
#define __INTERNAL_DEBUG
|
|
#define RTL_H
|
|
|
|
#endif
|
|
|