229 lines
6.5 KiB
C
229 lines
6.5 KiB
C
/*#define TMP_D_DebugMalloc*/
|
|
|
|
#include "acp_base.h"
|
|
#include "TmpCpa.h"
|
|
|
|
|
|
#include "Tmp_Ext.h"
|
|
#include "ErmTmp.h"
|
|
#include "MmgTmp.h"
|
|
|
|
#include "TmpMem.h"
|
|
|
|
#ifdef U64
|
|
#include "GLD\Specif\DisplMsg.h"
|
|
#endif
|
|
|
|
#define TMP_C_ActionMalloc 0
|
|
#define TMP_C_ActionRealloc 1
|
|
#define TMP_C_ActionFree 2
|
|
|
|
/**************************************************************************/
|
|
void TMP_fn_vCreateFixMemory(unsigned long _ulSize)
|
|
{
|
|
Mmg_M_InitBlock(TMP,E_ucTMPFixMemory,_ulSize);
|
|
TMP_g_ucMemoryBlock = E_ucTMPFixMemory;
|
|
}
|
|
/**************************************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void TMP_fn_vFreeFixMemory(void)
|
|
{
|
|
Mmg_M_FreeBlock(TMP,E_ucTMPFixMemory);
|
|
Mmg_M_DeleteBlock(TMP,E_ucTMPFixMemory);
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
//XB 08/04/99
|
|
/**************************************************************************/
|
|
void TMP_fn_vCreateLevelMemory(unsigned long _ulSize)
|
|
{
|
|
Mmg_M_InitBlock(TMP,E_ucTMPLevelMemory,_ulSize);
|
|
TMP_g_ucMemoryBlock = E_ucTMPLevelMemory;
|
|
}
|
|
/**************************************************************************/
|
|
void TMP_fn_vFreeLevelMemory(void)
|
|
{
|
|
Mmg_M_FreeBlock(TMP,E_ucTMPLevelMemory);
|
|
Mmg_M_DeleteBlock(TMP,E_ucTMPLevelMemory);
|
|
}
|
|
//End XB 08/04/99
|
|
/**************************************************************************/
|
|
INLINE void *TMP_fnp_vRealMalloc(unsigned long ulSize)
|
|
{
|
|
void *p_vPointer = NULL;
|
|
static unsigned char ucDynamicAlloc = FALSE;
|
|
|
|
/**** Check parameters ****/
|
|
#ifndef FINAL_VERSION
|
|
if (ulSize==0)
|
|
{
|
|
M_TMPFatalError(E_uwTMPBadMallocSize);
|
|
}
|
|
#endif
|
|
|
|
/**** Choice the good mode and the good block ****/
|
|
Mmg_M_SetModeAlloc4Ch(TMP,(unsigned char)TMP_g_ucMemoryBlock,C_ucMmgDefaultChannel);
|
|
|
|
/**** Allocate memory ****/
|
|
#if defined(U64) && !defined(FINAL_VERSION)
|
|
g_ucModuleIdForDebug=4;
|
|
#endif
|
|
if (ucDynamicAlloc||(p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL)
|
|
{
|
|
#if defined(_DEBUG)
|
|
if (!ucDynamicAlloc)
|
|
{
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);
|
|
M_TMPWarningError(E_uwTMPDebugDynamicAllocation);
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);
|
|
ucDynamicAlloc = TRUE;
|
|
}
|
|
Mmg_M_SetModeAlloc4Ch(TMP,E_ucDynamic,C_ucMmgDefaultChannel);
|
|
if ((p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL)
|
|
{
|
|
M_TMPWarningError(E_uwTMPMallocFailed);
|
|
}
|
|
#else
|
|
M_TMPWarningError(E_uwTMPMallocFailed);
|
|
#ifdef U64
|
|
M_PrintfStopErrorN64(("TMP malloc failed !"));
|
|
return NULL;
|
|
#endif /*U64*/
|
|
#endif /* _DEBUG */
|
|
}
|
|
#if defined(U64) && !defined(FINAL_VERSION)
|
|
g_ucModuleIdForDebug=0xff;
|
|
#endif
|
|
|
|
/**** Fill all the memory with 0 ****/
|
|
memset(p_vPointer,0,ulSize);
|
|
|
|
return (p_vPointer);
|
|
}
|
|
/**************************************************************************/
|
|
#ifndef U64
|
|
void *TMP_fnp_vMalloc(unsigned long ulSize,char *szFile,unsigned long ulLine)
|
|
#else
|
|
void *TMP_fnp_vMalloc(unsigned long ulSize)
|
|
#endif
|
|
{
|
|
void *Var;
|
|
|
|
Var = TMP_fnp_vRealMalloc(ulSize);
|
|
|
|
#if defined(TMP_D_DebugMalloc)
|
|
TMP_fn_vMemoryLogFile(Var,ulSize,TMP_C_ActionMalloc,szFile,ulLine);
|
|
#endif /* TMP_D_DebugMalloc */
|
|
|
|
return(Var);
|
|
}
|
|
|
|
/**************************************************************************/
|
|
#ifndef U64
|
|
void TMP_fn_vFree(void **p_vPointer,char *szFile,unsigned long ulLine)
|
|
#else
|
|
void TMP_fn_vFree(void **p_vPointer)
|
|
#endif
|
|
{
|
|
#if defined(_DEBUG)
|
|
struct tdstBlockInfo_ stMyBlockInfo;
|
|
#endif /* _DEBUG */
|
|
|
|
if (*p_vPointer==NULL)
|
|
{
|
|
M_TMPInformationError(E_uwTMPFreeNullPointer);
|
|
}
|
|
|
|
Mmg_M_SetModeAlloc4Ch(TMP,(unsigned char)TMP_g_ucMemoryBlock,C_ucMmgDefaultChannel);
|
|
|
|
#if defined(_DEBUG)
|
|
Mmg_fn_vGiveInformationBlock(Erm_M_ucGiveModuleId(TMP),(unsigned char)TMP_g_ucMemoryBlock,&stMyBlockInfo);
|
|
if (*p_vPointer<(void*)stMyBlockInfo.p_cBeginBlock||*p_vPointer>(void*)stMyBlockInfo.p_cEndBlock)
|
|
Mmg_M_SetModeAlloc4Ch(TMP,E_ucDynamic,C_ucMmgDefaultChannel);
|
|
#endif /* _DEBUG */
|
|
|
|
#if defined(TMP_D_DebugMalloc)
|
|
TMP_fn_vMemoryLogFile(*p_vPointer,0,TMP_C_ActionFree,szFile,ulLine);
|
|
#endif /* TMP_D_DebugMalloc */
|
|
|
|
#if defined(_DEBUG)
|
|
/* Mmg_fn_vTestMallocIntegrityAt(*p_vPointer);*/
|
|
#endif /*_DEBUG*/
|
|
|
|
Mmg_fn_vFree4Ch(*p_vPointer,C_ucMmgDefaultChannel);
|
|
*p_vPointer = NULL;
|
|
}
|
|
|
|
/**************************************************************************/
|
|
#if !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS)
|
|
void TMP_PrintUsedStaticMemory(void)
|
|
{
|
|
Mmg_M_PrintUsedStaticMemoryInModule(TMP);
|
|
}
|
|
#endif /* !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) */
|
|
/*End XB*/
|
|
/**************************************************************************/
|
|
/*XB*/
|
|
#ifdef CHECK_MEMORY
|
|
void TMP_CheckMemory(void)
|
|
{
|
|
Mmg_M_CheckMemory(TMP);
|
|
}
|
|
#endif /* CHECK_MEMORY */
|
|
/*End XB*/
|
|
|
|
/**************************************************************************/
|
|
/* XB 02/06/99 */
|
|
#ifndef FINAL_VERSION
|
|
unsigned long TMP_fn_ulGetUsedStaticMemory(void)
|
|
{
|
|
return Mmg_M_GetUsedStaticMemory(TMP);
|
|
}
|
|
#endif /* FINAL_VERSION */
|
|
/* End XB 02/06/99 */
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
char *fn_p_szGetLevelName(void);
|
|
void TMP_fn_vMemoryLogFile(void *p_vPointer,unsigned long ulSize,unsigned char ucAction,char *szFile,unsigned long ulLine)
|
|
{
|
|
#if defined(_DEBUG)&& defined(TMP_D_DebugMalloc)
|
|
static unsigned long AI_s_ulNumberOfAllocation = 0;
|
|
FILE *p_stFile;
|
|
char szFileName[30];
|
|
unsigned short uwBlocId;
|
|
void *p_vBeginBloc;
|
|
|
|
|
|
Mmg_fn_vWhereIs((void*)p_vPointer,&uwBlocId,&p_vBeginBloc);
|
|
sprintf(szFileName,"Mem%04x.log",uwBlocId);
|
|
|
|
p_stFile = fopen(szFileName,"at");
|
|
if (p_stFile!=NULL)
|
|
{
|
|
if (ucAction==TMP_C_ActionMalloc)
|
|
{
|
|
AI_s_ulNumberOfAllocation++;
|
|
fprintf(p_stFile,"%s Malloc : Number=#%05d, Block=#%04x, Offset=%p Size=%06d (%20s,%10d)\n",fn_p_szGetLevelName(),AI_s_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,ulSize,szFile,ulLine);
|
|
}
|
|
else if (ucAction==TMP_C_ActionRealloc)
|
|
{
|
|
fprintf(p_stFile,"%s Realloc : Number=#%05d, Block=#%04x, Offset=%p (%20s,%10d)\n",fn_p_szGetLevelName(),AI_s_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine);
|
|
}
|
|
else if (ucAction==TMP_C_ActionFree)
|
|
{
|
|
AI_s_ulNumberOfAllocation--;
|
|
fprintf(p_stFile,"%s Free : Number=#%05d, Block=#%04x, Offset=%p (%20s,%10d)\n",fn_p_szGetLevelName(),AI_s_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine);
|
|
}
|
|
fclose(p_stFile);
|
|
}
|
|
else
|
|
AI_s_ulNumberOfAllocation = 0;
|
|
|
|
|
|
#endif /* _DEBUG && TMP_D_DebugMalloc */
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
/**************************************************************************/
|