/********************************************************************************/ /* */ /* MemCpa.c */ /* */ /* This file defines the dynamic memory allocation interface */ /* */ /********************************************************************************/ #include "warnings.h" #ifdef NET_MEMORY_DEBUG #ifdef VISUAL #include #endif /* VISUAL */ #ifdef WATCOM #include #endif /* WATCOM */ #endif /* NET_MEMORY_DEBUG */ #include #include #include #include #include #include #include "NetMemCo.h" #include #include #define __DeclareGlobalVariableErrNet_h__ #include "ErrNet.h" #undef __DeclareGlobalVariableErrNet_h__ #define __DeclareGlobalVariableMmgNet_h__ #include "MmgNet.h" #undef __DeclareGlobalVariableMmgNet_h__ /* function required by P. Crepy for mmg debugging*/ /* void Net_PrintUsedStaticMemory () { Mmg_M_PrintUsedStaticMemoryInModule(Net); } */ #ifdef NET_USE_DEBUG static long gs_lNbrUnFree=0; #endif #ifdef NET_MEMORY_DEBUG #ifdef VISUAL /***************************************************************************** * Description: pMallocDebug * Allocate a memory bloc. *****************************************************************************/ void *pMallocDebug(tduxBlockSize ulSize,int blockType,const char *filename,int linenumber) { if (ulSize) { #ifdef NET_USE_DEBUG gs_lNbrUnFree++; #endif return _malloc_dbg(ulSize,blockType,filename,linenumber); } else return NULL; } /***************************************************************************** * Description: vFreeDebug * Free a memory bloc. *****************************************************************************/ void vFreeDebug(void *p_vMemBlock, int blockType) { if (p_vMemBlock) { #ifdef NET_USE_DEBUG gs_lNbrUnFree--; #endif _free_dbg(p_vMemBlock,blockType); } } /***************************************************************************** * Description: pReallocDebug * Reallocate of a memory bloc with a new size. *****************************************************************************/ void *pReallocDebug(void *p_vMemBlock,tduxBlockSize ulSize,int blockType,const char *filename, int linenumber) { if (p_vMemBlock) { if (ulSize) return _realloc_dbg(p_vMemBlock,ulSize,blockType,filename,linenumber); else { _free_dbg(p_vMemBlock,blockType); return NULL; } } else { if (ulSize) return _malloc_dbg(ulSize,blockType,filename,linenumber); else return NULL; } } #endif /* VISUAL */ #else /* NET_MEMORY_DEBUG */ /***************************************************************************** * Description: pMalloc * Allocate a memory bloc. *****************************************************************************/ void *pMalloc(tduxBlockSize ulSize) { void * p_vPtr; #ifdef NET_USE_DEBUG vDebugFormat(Net_C_Debug_Memory, "pMalloc(%lu)", ulSize); #endif /* NET_USE_DEBUG */ if (ulSize) { #ifdef NET_USE_DEBUG gs_lNbrUnFree++; #endif Mmg_M_SetModeAlloc4Ch(Net,E_ucNetBlock1,C_ucMmgDefaultChannel); p_vPtr = (void *) Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel); if(Erm_M_uwCheckError(Mmg,0)) { Erm_M_ClearLastError(0); } #ifdef NET_USE_DEBUG vDebugFormat(Net_C_Debug_Memory, "-->%lx", p_vPtr); #endif /* NET_USE_DEBUG */ return p_vPtr; } else return NULL; } /***************************************************************************** * Description: vFree * Free a memory bloc. *****************************************************************************/ void vFree(void *p_vMemBlock) { #ifdef NET_USE_DEBUG vDebugFormat(Net_C_Debug_Memory, "vFree(%lx)", p_vMemBlock); #endif /* NET_USE_DEBUG */ if (p_vMemBlock) { #ifdef NET_USE_DEBUG gs_lNbrUnFree--; #endif Mmg_M_SetModeAlloc4Ch(Net,E_ucNetBlock1,C_ucMmgDefaultChannel); Mmg_fn_vFree4Ch(p_vMemBlock,C_ucMmgDefaultChannel); if(Erm_M_uwCheckError(Mmg,0)) { Erm_M_ClearLastError(0); } } } /***************************************************************************** * Description: pRealloc * Reallocate of a memory bloc with a new size. *****************************************************************************/ void *pRealloc(void *p_vMemBlock,tduxBlockSize ulSize) { void *p_vPtr; #ifdef NET_USE_DEBUG vDebugFormat(Net_C_Debug_Memory, "pRealloc(%lu)", ulSize); #endif /* NET_USE_DEBUG */ Mmg_M_SetModeAlloc4Ch(Net,E_ucNetBlock1,C_ucMmgDefaultChannel); if (p_vMemBlock) { if (ulSize) { p_vPtr=Mmg_fn_p_vRealloc4Ch(p_vMemBlock,ulSize,C_ucMmgDefaultChannel); if(Erm_M_uwCheckError(Mmg,0)) { Erm_M_ClearLastError(0); } #ifdef NET_USE_DEBUG vDebugFormat(Net_C_Debug_Memory, "-->%lx", p_vPtr); #endif /* NET_USE_DEBUG */ return p_vPtr; } else { vFree(p_vMemBlock); return NULL; } } else { if (ulSize) return pMalloc(ulSize); else return NULL; } } #endif /***************************************************************************** * Description: uxInitMalloc * Initialize memory unit. *****************************************************************************/ tduxBlockSize uxInitMalloc(tduxBlockSize uxPoolSize, void *pAddress) { #ifdef NET_USE_DEBUG gs_lNbrUnFree=0; #endif if (g_ucErmModuleId==C_ucModuleNotInitialized) Erm_M_InitErrMsg(Erm); if (g_ucMmgModuleId==C_ucModuleNotInitialized) Erm_M_InitErrMsg(Mmg); if (g_ucNetModuleId==C_ucModuleNotInitialized) Erm_M_InitErrMsg(Net); Mmg_M_InitMmg(Net); Mmg_M_InitBlock(Net,E_ucNetBlock1,uxPoolSize); return uxPoolSize; } /***************************************************************************** * Description: vDoneMalloc * Quit memory unit. *****************************************************************************/ void vDoneMalloc(void) { Mmg_M_DeleteBlock(Net,E_ucNetBlock1); #ifdef NET_USE_DEBUG /*if (gs_lNbrUnFree)*/ vDebugSI(Net_C_Debug_Memory,"Number malloc - Number free",gs_lNbrUnFree); #endif }