69 lines
2.1 KiB
C
69 lines
2.1 KiB
C
#ifndef _INC_MEM
|
|
#define _INC_MEM
|
|
|
|
// wrappers for private allocations, near in 16 bits
|
|
|
|
#define NearAlloc(cb) ((void*)LocalAlloc(LPTR, (cb)))
|
|
#define NearReAlloc(pb, cb) ((void*)LocalReAlloc((HLOCAL)(pb), (cb), LMEM_MOVEABLE | LMEM_ZEROINIT))
|
|
#define NearFree(pb) (LocalFree((HLOCAL)(pb)) ? FALSE : TRUE)
|
|
#define NearSize(pb) LocalSize(pb)
|
|
|
|
#ifdef WIN32
|
|
//
|
|
// These macros are used in our controls, that in 32 bits we simply call
|
|
// LocalAlloc as to have the memory associated with the process that created
|
|
// it and as such will be cleaned up if the process goes away.
|
|
//
|
|
#ifdef DEBUG
|
|
LPVOID WINAPI ControlAlloc(HANDLE hheap, DWORD cb);
|
|
LPVOID WINAPI ControlReAlloc(HANDLE hheap, LPVOID pb, DWORD cb);
|
|
BOOL WINAPI ControlFree(HANDLE hheap, LPVOID pb);
|
|
SIZE_T WINAPI ControlSize(HANDLE hheap, LPVOID pb);
|
|
#else // DEBUG
|
|
#define ControlAlloc(hheap, cb) HeapAlloc((hheap), HEAP_ZERO_MEMORY, (cb))
|
|
#define ControlReAlloc(hheap, pb, cb) HeapReAlloc((hheap), HEAP_ZERO_MEMORY, (pb),(cb))
|
|
#define ControlFree(hheap, pb) HeapFree((hheap), 0, (pb))
|
|
#define ControlSize(hheap, pb) HeapSize((hheap), 0, (LPCVOID)(pb))
|
|
#endif // DEBUG
|
|
|
|
BOOL Str_Set(LPTSTR *ppsz, LPCTSTR psz); // in the process heap
|
|
|
|
#else // WIN32
|
|
|
|
//
|
|
// In 16 bit code we need the Allocs to go from our heap code as we do not
|
|
// want to limit them to 64K of data. If we have some type of notification of
|
|
// 16 bit application termination, We may want to see if we can
|
|
// dedicate different heaps for different processes to cleanup...
|
|
//
|
|
#define ControlAlloc(hheap, cb) Alloc(cb) /* calls to verify heap exists */
|
|
#define ControlReAlloc(hheap, pb, cb) ReAlloc(pb, cb)
|
|
#define ControlFree(hheap, pb) Free(pb)
|
|
#define ControlSize(hheap, pb) GetSize((LPCVOID)pb)
|
|
#define Str_Set(p, s) Str_SetPtr(p, s) // use shared heap for win16
|
|
|
|
#endif // WIN32
|
|
|
|
#ifndef WINNT
|
|
|
|
extern HANDLE g_hSharedHeap;
|
|
|
|
HANDLE InitSharedHeap(void);
|
|
|
|
__inline HANDLE
|
|
GetSharedHeapHandle(void)
|
|
{
|
|
if (g_hSharedHeap)
|
|
{
|
|
return g_hSharedHeap;
|
|
}
|
|
else
|
|
{
|
|
return InitSharedHeap();
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif // !_INC_MEM
|