|
|
//
// 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( )
|