l2-unlegits/l2detect/mymem.cpp
2012-02-01 05:25:08 +00:00

69 lines
2.1 KiB
C++

#include "stdafx.h"
#include "Logger.h"
HANDLE int_mymem_heap = NULL;
int int_mymem_was_init = 0;
unsigned int int_mymem_page_size = 0;
void MyMem_Init()
{
if( int_mymem_was_init ) return;
int_mymem_was_init = 1;
SYSTEM_INFO sysinfo;
memset( &sysinfo, 0, sizeof(sysinfo) );
GetSystemInfo( &sysinfo );
int_mymem_page_size = sysinfo.dwPageSize;
int_mymem_heap = HeapCreate( HEAP_GENERATE_EXCEPTIONS, 1048576, 0 );
if( !int_mymem_heap )
FatalAppExit( 0, TEXT("Memory Manager failed to allocate heap (HeapCreate() failed!)") );
}
void MyMem_Free()
{
if( !int_mymem_was_init ) return;
int_mymem_was_init = 0;
HeapDestroy( int_mymem_heap );
int_mymem_heap = NULL;
}
// Memory tracking allocation
/*inline void *operator new( size_t size ) // non-debug version
{
return HeapAlloc( int_mymem_heap, 0, (SIZE_T)size );
}*/
void *operator new( size_t nSize, const char *lpszFileName, int nLine )
{
log_error( LOG_OK, "[MM]: calling new from %d:\"%s\"... ", nLine, lpszFileName );
void *ret = HeapAlloc( int_mymem_heap, 0, (SIZE_T)nSize );
log_error_np( LOG_OK, "0x%p\n", ret );
ErrorLogger_FlushLogFile();
return ret;
}
/*void operator delete( void* p )
{
log_error( LOG_OK, "[MM]: calling delete( 0x%p )... ", p );
BOOL bRet = FALSE;
if( p ) bRet = HeapFree( int_mymem_heap, 0, p );
if( bRet == FALSE ) log_error_np( LOG_OK, "FALSE\n" ); else log_error_np( LOG_OK, "TRUE\n" );
}*/
void operator delete( void* p, size_t size )
{
log_error( LOG_OK, "[MM]: calling delete( 0x%p, %u )... ", p, (unsigned int)size );
BOOL bRet = FALSE;
if( p ) bRet = HeapFree( int_mymem_heap, 0, p );
if( bRet == FALSE ) log_error_np( LOG_OK, "FALSE\n" ); else log_error_np( LOG_OK, "TRUE\n" );
}
void operator delete( void* p, const char *lpszFileName, int nLine )
{
log_error( LOG_OK, "[MM]: calling delete( 0x%p ) from %d:\"%s\"... ",
p, nLine, lpszFileName );
BOOL bRet = FALSE;
if( p ) bRet = HeapFree( int_mymem_heap, 0, p );
if( bRet == FALSE ) log_error_np( LOG_OK, "FALSE\n" ); else log_error_np( LOG_OK, "TRUE\n" );
}