reman3/Rayman_X/cpa/tempgrp/TMP/TmpMem.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 */
/**************************************************************************/