You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
4.6 KiB
214 lines
4.6 KiB
/*++
|
|
|
|
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;
|
|
}
|
|
|