Leaked source code of windows server 2003
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.
 
 
 
 
 
 

216 lines
4.0 KiB

/*++
Copyright (c) 2002-2002 Microsoft Corporation
Module Name:
CmnDbgU.c
Abstract:
Debug code for CmnUser.lib
Author:
George V. Reilly (GeorgeRe) 16-Jan-2002
Revision History:
--*/
#include "precomp.h"
BOOLEAN g_UlVerboseErrors = TRUE;
BOOLEAN g_UlBreakOnError = TRUE;
ULONGLONG g_UlDebug = 0;
ULONG g_BytesAllocated, g_BytesFreed;
ULONG g_NumAllocs, g_NumFrees;
PCSTR
HttpCmnpDbgFindFilePart(
IN PCSTR pPath
)
{
// Strip off the path from the path.
PCSTR pFilePart = strrchr( pPath, '\\' );
return (pFilePart == NULL) ? pPath : pFilePart + 1;
} // HttpCmnpDbgFindFilePart
VOID
__cdecl
HttpCmnDbgPrint(
IN PCH Format,
...
)
{
#define PRINTF_BUFFER_LEN 512
va_list arglist;
CHAR Buffer[PRINTF_BUFFER_LEN];
int cb;
va_start(arglist, Format);
cb = _vsnprintf((char*) Buffer, sizeof(Buffer), Format, arglist);
va_end(arglist);
if (cb < 0)
{
cb = sizeof(Buffer);
}
// _vsnprintf doesn't always NUL-terminate the buffer
Buffer[DIMENSION(Buffer)-1] = '\0';
OutputDebugStringA(Buffer);
} // HttpCmnDbgPrint
VOID
HttpCmnDbgAssert(
PCSTR pszAssert,
PCSTR pszFilename,
ULONG LineNumber
)
{
HttpCmnDbgPrint(
"Assertion failed: %s:%lu: %s\n",
HttpCmnpDbgFindFilePart( pszFilename ), LineNumber, pszAssert
);
DebugBreak();
} // HttpCmnDbgAssert
NTSTATUS
HttpCmnDbgStatus(
NTSTATUS Status,
PCSTR pszFilename,
ULONG LineNumber
)
{
if (!NT_SUCCESS(Status))
{
if (g_UlVerboseErrors)
{
HttpCmnDbgPrint(
"HttpCmnDbgStatus: %s:%lu returning 0x%08lx\n",
HttpCmnpDbgFindFilePart( pszFilename ),
LineNumber,
Status
);
}
if (g_UlBreakOnError)
{
DebugBreak();
}
}
return Status;
} // HttpCmnDbgStatus
VOID
HttpCmnDbgBreakOnError(
PCSTR pszFilename,
ULONG LineNumber
)
{
if (g_UlBreakOnError)
{
HttpCmnDbgPrint("HttpCmnDebugBreakOnError @ %s:%lu\n",
HttpCmnpDbgFindFilePart( pszFilename ),
LineNumber
);
DebugBreak();
}
}
VOID
HttpCmnInitAllocator(
VOID
)
{
g_BytesAllocated = g_BytesFreed = 0;
g_NumAllocs = g_NumFrees = 0;
}
VOID
HttpCmnTermAllocator(
VOID
)
{
// ASSERT(g_BytesAllocated == g_BytesFreed);
ASSERT(g_NumAllocs == g_NumFrees);
}
PVOID
HttpCmnAllocate(
IN POOL_TYPE PoolType,
IN SIZE_T NumBytes,
IN ULONG PoolTag,
IN PCSTR pFileName,
IN USHORT LineNumber)
{
PVOID pMem = HeapAlloc(GetProcessHeap(), 0, NumBytes);
// CODEWORK: steal the debug header/trailer stuff from ..\sys\debug.c
// or migrate it into ..\common
UNREFERENCED_PARAMETER(PoolType);
UNREFERENCED_PARAMETER(PoolTag);
UNREFERENCED_PARAMETER(pFileName);
UNREFERENCED_PARAMETER(LineNumber);
if (NULL != pMem)
{
InterlockedExchangeAdd((PLONG) &g_BytesAllocated, (LONG) NumBytes);
InterlockedIncrement((PLONG) &g_NumAllocs);
}
// UrlAclTrace("Allocated: %p\n", pMem);
return pMem;
} // HttpCmnAllocate
VOID
HttpCmnFree(
IN PVOID pMem,
IN ULONG PoolTag,
IN PCSTR pFileName,
IN USHORT LineNumber)
{
UNREFERENCED_PARAMETER(PoolTag);
UNREFERENCED_PARAMETER(pFileName);
UNREFERENCED_PARAMETER(LineNumber);
if (NULL != pMem)
{
SIZE_T NumBytes = 0; // BUGBUG
InterlockedExchangeAdd((PLONG) &g_BytesFreed, (LONG) NumBytes);
InterlockedIncrement((PLONG) &g_NumFrees);
}
// UrlAclTrace("Freed: %p\n", pMem);
HeapFree(GetProcessHeap(), 0, pMem);
} // HttpCmnFree