123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /// ********* WIN32 **********
- #ifdef SYSTEM_WIN32
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #include <malloc.h>
- #include "cmdlib.h"
- #include "messages.h"
- #include "log.h"
- #include "hlassert.h"
- #include "blockmem.h"
- // =====================================================================================
- // AllocBlock
- // =====================================================================================
- void* AllocBlock(const unsigned long size)
- {
- void* pointer;
- HANDLE h;
- if (!size)
- {
- Warning("Attempting to allocate 0 bytes");
- }
- h = GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, size);
- if (h)
- {
- pointer = GlobalLock(h);
- }
- else
- {
- return NULL;
- }
- return pointer;
- }
- // =====================================================================================
- // FreeBlock
- // =====================================================================================
- bool FreeBlock(void* pointer)
- {
- HANDLE h;
- if (!pointer)
- {
- Warning("Freeing a null pointer");
- }
- h = GlobalHandle(pointer);
- if (h)
- {
- GlobalUnlock(h);
- GlobalFree(h);
- return true;
- }
- else
- {
- Warning("Could not translate pointer into handle");
- return false;
- }
- }
- #ifdef CHECK_HEAP
- // =====================================================================================
- // HeapCheck
- // =====================================================================================
- void HeapCheck()
- {
- if (_heapchk() != _HEAPOK)
- hlassert(false);
- }
- #endif
- // =====================================================================================
- // AllocBlock
- // =====================================================================================
- // HeapAlloc/HeapFree is thread safe by default
- void* Alloc(const unsigned long size)
- {
- HeapCheck();
- return calloc(1, size);
- }
- // =====================================================================================
- // AllocBlock
- // =====================================================================================
- bool Free(void* pointer)
- {
- HeapCheck();
- free(pointer);
- return true;
- }
- #endif /// ********* WIN32 **********
- /// ********* POSIX **********
- #ifdef SYSTEM_POSIX
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- #ifdef STDC_HEADERS
- #include <stdlib.h>
- #endif
- #include "cmdlib.h"
- #include "messages.h"
- #include "log.h"
- // =====================================================================================
- // AllocBlock
- // =====================================================================================
- void* AllocBlock(const unsigned long size)
- {
- if (!size)
- {
- Warning("Attempting to allocate 0 bytes");
- }
- return calloc(1, size);
- }
- // =====================================================================================
- // FreeBlock
- // =====================================================================================
- bool FreeBlock(void* pointer)
- {
- if (!pointer)
- {
- Warning("Freeing a null pointer");
- }
- free(pointer);
- return true;
- }
- // =====================================================================================
- // Alloc
- // =====================================================================================
- void* Alloc(const unsigned long size)
- {
- return AllocBlock(size);
- }
- // =====================================================================================
- // Free
- // =====================================================================================
- bool Free(void* pointer)
- {
- return FreeBlock(pointer);
- }
- #endif /// ********* POSIX **********
|