| /* |
| * Win32 heap definitions |
| * |
| * Copyright 1996 Alexandre Julliard |
| */ |
| |
| #ifndef __WINE_HEAP_H |
| #define __WINE_HEAP_H |
| |
| #include "winbase.h" |
| #include "winnt.h" |
| |
| extern HANDLE32 SystemHeap; |
| extern HANDLE32 SegptrHeap; |
| extern CRITICAL_SECTION *HEAP_SystemLock; |
| |
| extern int HEAP_IsInsideHeap( HANDLE32 heap, DWORD flags, LPCVOID ptr ); |
| extern SEGPTR HEAP_GetSegptr( HANDLE32 heap, DWORD flags, LPCVOID ptr ); |
| extern LPVOID HEAP_xalloc( HANDLE32 heap, DWORD flags, DWORD size ); |
| extern LPSTR HEAP_strdupA( HANDLE32 heap, DWORD flags, LPCSTR str ); |
| extern LPWSTR HEAP_strdupW( HANDLE32 heap, DWORD flags, LPCWSTR str ); |
| extern LPWSTR HEAP_strdupAtoW( HANDLE32 heap, DWORD flags, LPCSTR str ); |
| extern LPSTR HEAP_strdupWtoA( HANDLE32 heap, DWORD flags, LPCWSTR str ); |
| |
| /* SEGPTR helper macros */ |
| |
| #define SEGPTR_ALLOC(size) \ |
| (HeapAlloc( SegptrHeap, 0, (size) )) |
| #define SEGPTR_NEW(type) \ |
| ((type *)HeapAlloc( SegptrHeap, 0, sizeof(type) )) |
| #define SEGPTR_STRDUP(str) \ |
| (HIWORD(str) ? HEAP_strdupA( SegptrHeap, 0, (str) ) : (LPSTR)(str)) |
| #define SEGPTR_STRDUP_WtoA(str) \ |
| (HIWORD(str) ? HEAP_strdupWtoA( SegptrHeap, 0, (str) ) : (LPSTR)(str)) |
| /* define an inline function, a macro won't do */ |
| static __inline__ SEGPTR SEGPTR_Get(LPCVOID ptr) { |
| return (HIWORD(ptr) ? HEAP_GetSegptr( SegptrHeap, 0, ptr ) : (SEGPTR)ptr); |
| } |
| #define SEGPTR_GET(ptr) SEGPTR_Get(ptr) |
| #define SEGPTR_FREE(ptr) \ |
| (HIWORD(ptr) ? HeapFree( SegptrHeap, 0, (ptr) ) : 0) |
| |
| /* System heap locking macros */ |
| |
| #define SYSTEM_LOCK() (EnterCriticalSection(HEAP_SystemLock)) |
| #define SYSTEM_UNLOCK() (LeaveCriticalSection(HEAP_SystemLock)) |
| /* Use this one only when you own the lock! */ |
| #define SYSTEM_LOCK_COUNT() (HEAP_SystemLock->RecursionCount) |
| |
| |
| typedef struct |
| { |
| LPVOID lpData; |
| DWORD cbData; |
| BYTE cbOverhead; |
| BYTE iRegionIndex; |
| WORD wFlags; |
| union { |
| struct { |
| HANDLE32 hMem; |
| DWORD dwReserved[3]; |
| } Block; |
| struct { |
| DWORD dwCommittedSize; |
| DWORD dwUnCommittedSize; |
| LPVOID lpFirstBlock; |
| LPVOID lpLastBlock; |
| } Region; |
| } Foo; |
| } PROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY; |
| |
| #endif /* __WINE_HEAP_H */ |