/*#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 */ /**************************************************************************/