215 lines
4.3 KiB
C
215 lines
4.3 KiB
C
/*++
|
||
|
||
Copyright (c) 1992-1997 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
mem.c
|
||
|
||
Abstract:
|
||
|
||
Contains memory allocation routines.
|
||
|
||
SnmpUtilMemAlloc
|
||
SnmpUtilMemReAlloc
|
||
SnmpUtilMemFree
|
||
|
||
Environment:
|
||
|
||
User Mode - Win32
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Include files //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
#include <snmp.h>
|
||
#include <snmputil.h>
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Global Variables //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
UINT g_nBytesTotal = 0;
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
// //
|
||
// Public Procedures //
|
||
// //
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
|
||
VOID
|
||
SNMP_FUNC_TYPE
|
||
SnmpUtilMemFree(
|
||
LPVOID pMem
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Releases memory used by SNMP entities.
|
||
|
||
Arguments:
|
||
|
||
pMem - pointer to memory to release.
|
||
|
||
Return Values:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
// validate
|
||
if (pMem != NULL) {
|
||
|
||
#if defined(DBG) && defined(_SNMPDLL_)
|
||
|
||
// substract memory from global count
|
||
g_nBytesTotal -= (UINT)GlobalSize((HGLOBAL)pMem);
|
||
|
||
SNMPDBG((
|
||
SNMP_LOG_VERBOSE,
|
||
"SNMP: MEM: releasing 0x%08lx (%d bytes, %d total).\n",
|
||
pMem, GlobalSize((HGLOBAL)pMem), g_nBytesTotal
|
||
));
|
||
|
||
#endif
|
||
|
||
// release memory
|
||
GlobalFree((HGLOBAL)pMem);
|
||
}
|
||
}
|
||
|
||
|
||
LPVOID
|
||
SNMP_FUNC_TYPE
|
||
SnmpUtilMemAlloc(
|
||
UINT nBytes
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Allocates memory used by SNMP entities.
|
||
|
||
Arguments:
|
||
|
||
nBytes - number of bytes to allocate.
|
||
|
||
Return Values:
|
||
|
||
Returns pointer to memory.
|
||
|
||
--*/
|
||
|
||
{
|
||
LPVOID pMem;
|
||
|
||
// attempt to allocate memory from process heap
|
||
pMem = GlobalAlloc(GMEM_FIXED|GMEM_ZEROINIT, (DWORD)nBytes);
|
||
|
||
#if defined(DBG) && defined(_SNMPDLL_)
|
||
|
||
// add allocated memory to global count if successful
|
||
g_nBytesTotal += (UINT)((pMem != NULL) ? GlobalSize((HGLOBAL)pMem) : 0);
|
||
|
||
SNMPDBG((
|
||
SNMP_LOG_VERBOSE,
|
||
"SNMP: MEM: allocated 0x%08lx (%d bytes, %d total).\n",
|
||
pMem, (pMem != NULL) ? GlobalSize((HGLOBAL)pMem) : 0, g_nBytesTotal
|
||
));
|
||
|
||
#endif
|
||
|
||
return pMem;
|
||
}
|
||
|
||
|
||
LPVOID
|
||
SNMP_FUNC_TYPE
|
||
SnmpUtilMemReAlloc(
|
||
LPVOID pMem,
|
||
UINT nBytes
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Reallocates memory used by SNMP entities.
|
||
|
||
Arguments:
|
||
|
||
pMem - pointer to memory to reallocate.
|
||
|
||
nBytes - number of bytes to allocate.
|
||
|
||
Return Values:
|
||
|
||
Returns pointer to memory.
|
||
|
||
--*/
|
||
|
||
{
|
||
LPVOID pNew;
|
||
|
||
// validate
|
||
if (pMem == NULL) {
|
||
|
||
// forward to alloc routine
|
||
pNew = SnmpUtilMemAlloc(nBytes);
|
||
|
||
} else {
|
||
|
||
#if defined(DBG) && defined(_SNMPDLL_)
|
||
|
||
SNMPDBG((
|
||
SNMP_LOG_VERBOSE,
|
||
"SNMP: MEM: expanding 0x%08lx (%d bytes) to %d bytes.\n",
|
||
pMem, GlobalSize((HGLOBAL)pMem), nBytes
|
||
));
|
||
|
||
// substract current memory from total
|
||
g_nBytesTotal -= (UINT)GlobalSize((HGLOBAL)pMem);
|
||
|
||
#endif
|
||
|
||
// reallocate memory
|
||
pNew = GlobalReAlloc(
|
||
(HGLOBAL)pMem,
|
||
(DWORD)nBytes,
|
||
GMEM_MOVEABLE |
|
||
GMEM_ZEROINIT
|
||
);
|
||
|
||
#if defined(DBG) && defined(_SNMPDLL_)
|
||
|
||
// add new memory to total count
|
||
g_nBytesTotal += (UINT)((pNew != NULL) ? GlobalSize((HGLOBAL)pNew) : 0);
|
||
|
||
SNMPDBG((
|
||
SNMP_LOG_VERBOSE,
|
||
"SNMP: MEM: allocated 0x%08lx (%d bytes, %d total).\n",
|
||
pNew, (pNew != NULL) ? GlobalSize((HGLOBAL)pNew) : 0, g_nBytesTotal
|
||
));
|
||
|
||
#endif
|
||
|
||
}
|
||
|
||
return pNew;
|
||
}
|
||
|