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.
 
 
 
 
 
 

379 lines
8.1 KiB

//
// Microsoft Corporation - Copyright 1997
//
//
// DEBUG.CPP - Debugging code
//
#include "pch.h"
// local globals
static const char s_szNewline[] = "\n";
// globals
const char g_szTrue[] = "True";
const char g_szFalse[] = "False";
// local structures
CODETOSTR HRtoStr = {
2,
{
{ S_OK, "S_OK or NOERROR" },
{ S_FALSE, "S_FALSE" }
}
};
CODETOSTR HSEtoStr = {
5,
{
{ HSE_STATUS_SUCCESS, "HSE_STATUS_SUCCESS" },
{ ERROR_INVALID_INDEX, "ERROR_INVALID_INDEX" },
{ ERROR_INSUFFICIENT_BUFFER, "ERROR_INSUFFICIENT_BUFFER" },
{ ERROR_MORE_DATA, "ERROR_MORE_DATA" },
{ ERROR_NO_DATA, "ERROR_NO_DATA" }
}
};
CODETOSTR ErrtoStr = {
4,
{
{ ERROR_INVALID_PARAMETER, "ERROR_INVALID_PARAMETER" },
{ HSE_STATUS_SUCCESS_AND_KEEP_CONN, "HSE_STATUS_SUCCESS_AND_KEEP_CONN" },
{ HSE_STATUS_PENDING, "HSE_STATUS_PENDING" },
{ HSE_STATUS_ERROR, "HSE_STATUS_ERROR" }
}
};
// local functions
const char *FindResult(
LPCODETOSTR lpCodeToStr,
DWORD dwResult );
#ifdef DEBUG /***********************************************************/
// globals
DWORD g_dwTraceFlag = // flag used to turn on/off certain debug msgs.
// 0x00000000;
TF_PARSE | TF_FUNC;
// TF_ALWAYS;
//
// What: IsTraceFlagSet
//
// Desc: Tests to see is any of the flags in dwFlag
// are set in g_dwTraceFlag.
//
// In: dwFlag are the flags to be tested.
//
// Return: TRUE if flag is set or if dwFlags == TF_ALWAYS.
// Otherwise, we return FALSE.
//
BOOL CDECL IsTraceFlagSet( DWORD dwFlag )
{
return (
( (dwFlag & g_dwTraceFlag) == dwFlag ) ?
TRUE :
( ( dwFlag == TF_ALWAYS ) ?
TRUE :
FALSE )
);
}
//
// What: AssertMsg
//
// Desc: Debugging output with stop condition.
//
BOOL CDECL AssertMsg(
BOOL fShouldBeTrue,
LPCSTR pszFile,
DWORD dwLine,
LPCSTR pszStatement )
{
if ( !fShouldBeTrue )
{
CHAR ach[ 1024 + 40 ]; // Largest path plus extra
wsprintf( ach, "Assert: %s (%u): %s",
pszFile, dwLine, pszStatement );
OutputDebugString( ach );
OutputDebugString( s_szNewline );
}
return !fShouldBeTrue;
} // AssertMsg( )
//
// What: TraceMsg
//
// Desc: Debugging output with conditional flags (see
// DEBUG.H for flags).
//
void CDECL TraceMsg(
DWORD dwFlag,
LPCSTR pszMsg,
... )
{
CHAR ach[ 1024 + 40 ]; // Largest path plus extra
va_list vArgs;
if ( IsTraceFlagSet( dwFlag ) )
{
int cch;
StrCpy( ach, "Trace: " );
cch = lstrlen( ach );
va_start( vArgs, pszMsg );
wvsprintf( &ach[ cch ], pszMsg, vArgs );
va_end( vArgs );
OutputDebugString( ach );
OutputDebugString( s_szNewline );
}
} // TraceMsg( )
//
// What: TraceMsgResult
//
// Desc: Debugging output with conditional flags and
// it displays the HRESULT in "English".
//
void CDECL TraceMsgResult(
DWORD dwFlag,
LPCODETOSTR lpCodeToStr,
DWORD dwResult,
LPCSTR pszMsg,
... )
{
CHAR ach[ 1024 + 40 ]; // Largest path plus extra
va_list vArgs;
if ( IsTraceFlagSet( dwFlag ) )
{
int cch;
StrCpy( ach, "Trace: " );
cch = lstrlen( ach );
va_start( vArgs, pszMsg );
wvsprintf( &ach[ cch ], pszMsg, vArgs );
va_end( vArgs );
cch = lstrlen( ach );
wsprintf( &ach[ cch ], " = %s", FindResult( lpCodeToStr, dwResult ) );
OutputDebugString( ach );
OutputDebugString( s_szNewline );
}
} // TraceMsgResult( )
#endif // DEBUG /********************************************************/
/*********************************************************
These are for debugging the GET/POST as well as
debugging the parser.
*********************************************************/
//
// What: DebugMsg
//
// Desc: Debugging output
//
void CDECL DebugMsg(
LPSTR lpszOut,
LPCSTR pszMsg,
... )
{
CHAR ach[ 1024 + 40 ]; // Largest path plus extra
va_list vArgs;
int cch;
va_start( vArgs, pszMsg );
wvsprintf( ach, pszMsg, vArgs );
va_end( vArgs );
#ifdef DEBUG
OutputDebugString( ach );
OutputDebugString( s_szNewline );
#endif // DEBUG
if ( lpszOut )
{
StrCat( lpszOut, ach );
}
} // DebugMsg( )
//
// What: DebugMsgResult
//
// Desc: Debugging output displaying the dwResult in "English".
//
void CDECL DebugMsgResult(
LPSTR lpszOut,
LPCODETOSTR lpCodeToStr,
DWORD dwResult,
LPCSTR pszMsg,
... )
{
CHAR ach[ 1024 + 40 ]; // Largest path plus extra
va_list vArgs;
int cch;
va_start( vArgs, pszMsg );
wvsprintf( ach, pszMsg, vArgs );
va_end( vArgs );
cch = lstrlen( ach );
wsprintf( &ach[ cch ], " = %s", FindResult( lpCodeToStr, dwResult ) );
#ifdef DEBUG
OutputDebugString( ach );
OutputDebugString( s_szNewline );
#endif // DEBUG
if ( lpszOut )
{
StrCat( lpszOut, ach );
}
} // DebugMsgResult( )
//
// What: LogMsg
//
// Desc: Append text to be written to server log.
//
void CDECL LogMsg(
LPSTR lpszLog,
LPSTR lpszOut,
LPCSTR pszMsg,
... )
{
va_list vArgs;
char szBuffer[ 1024 + 40 ];
va_start( vArgs, pszMsg );
wvsprintf( szBuffer, pszMsg, vArgs );
va_end( vArgs );
#ifdef DEBUG
if ( lstrlen( szBuffer ) >= HSE_LOG_BUFFER_LEN )
{
OutputDebugString( "Log overflow=" );
OutputDebugString( szBuffer );
OutputDebugString( s_szNewline );
}
else
{
StrCpy( lpszLog, szBuffer );
OutputDebugString( "Log Message= " );
OutputDebugString( lpszLog );
OutputDebugString( s_szNewline );
}
#endif // DEBUG
if ( lpszOut )
{
StrCat( lpszOut, szBuffer );
StrCat( lpszOut, s_szNewline );
}
} // LogMsg( )
//
// What: LogMsgResult
//
// Desc: Append text to be written to server log and appends an english
// translation to the dwResult code.
//
void CDECL LogMsgResult(
LPSTR lpszLog,
LPSTR lpszOut,
LPCODETOSTR lpCodeToStr,
DWORD dwResult,
LPCSTR pszMsg,
... )
{
va_list vArgs;
int cch;
char szBuffer[ 1024 + 40 ];
va_start( vArgs, pszMsg );
wvsprintf( szBuffer, pszMsg, vArgs );
va_end( vArgs );
cch = lstrlen( szBuffer );
wsprintf( &szBuffer[ cch ], " = %s", FindResult( lpCodeToStr, dwResult ) );
#ifdef DEBUG
if ( lstrlen( szBuffer ) >= HSE_LOG_BUFFER_LEN )
{
OutputDebugString( "Log overflow=" );
OutputDebugString( szBuffer );
OutputDebugString( s_szNewline );
}
else
{
StrCpy( lpszLog, szBuffer );
OutputDebugString( "Log Message= " );
OutputDebugString( lpszLog );
OutputDebugString( s_szNewline );
}
#endif // DEBUG
if ( lpszOut )
{
StrCat( lpszOut, szBuffer );
StrCat( lpszOut, s_szNewline );
}
} // LogMsgResult( )
//
// What: FindHResult
//
// Desc: Searches for a string for a HRESULT. If not found
// it will display the HEX value.
//
const char *FindResult(
LPCODETOSTR lpCodeToStr,
DWORD dwResult )
{
static char szResult[ 11 ]; // just enough for "0x00000000" + NULL
for( DWORD i = 0 ; i < lpCodeToStr->dwCount ; i++ )
{
if ( lpCodeToStr->ids[ i ].dwCode == dwResult )
{
return lpCodeToStr->ids[ i ].lpDesc;
}
} // for i
wsprintf( szResult, "%x", dwResult );
return szResult;
} // FindHResult( )