|
|
/*++
Copyright (c) 1994 Microsoft Corporation All rights reserved.
Module Name:
Debug.h
Abstract:
New debug services for spooler.
Author:
Albert Ting (AlbertT) 15-Jan-1995
Revision History:
--*/
#ifndef _DBGLOG_H
#define _DBGLOG_H
#ifdef __cplusplus
extern "C" { #endif
typedef DWORD GENERROR, *PGENERROR;
/********************************************************************
DBGCHK
Wraps any function that returns an unsigned 4 byte quantity with debug logging.
Arguments:
expr - function/expression that needs to be tested
uDbgLevel - print/break error level
exprSuccess - expression that indicates function success (GenError may be used as the expr return value)
cgeFail - Count of items in pgeFails array
pgeFails - Array of error return values (GenError) used when simulating failures (must be an array, not a pointer).
pdwLastErrors - Array of error returned from GetLastError used when simulating failures, zero terminated.
argsPrint - Arguments to print/log in printf format.
Return Value:
Result of the wrapped function or a simulated failure code.
Usage:
lReturn = RegCreateKey( hKey, L"SubKey", &hKeyResult );
should be re-written as:
lReturn = DBGCHK( RegCreateKey( hKey, L"SubKey", &hKeyResult ), DBG_ERROR, GenError == ERROR_SUCCESS, 2, { ERROR_ACCESS_DENIED, ERROR_INVALID_PARAMETER }, NULL, ( "CreateError 0x%x", hKey ));
dwReturn = DBGCHK( GetProfileString( pszSection, pszKey, pszDefault, szReturnBuffer, COUNTOF( szReturnBuffer )), DBG_WARN, GenError != 0, 1, { 0 }, { ERROR_CODE_1, ERROR_CODE_2, 0 }, ( "GetProfileString: %s, %s, %s", pszSection, pszKey, pszDefault ));
********************************************************************/
#define DBGCHK( expr, \
uDbgLevel, \ exprSuccess, \ cgeFail, \ pgeFails, \ pdwLastErrors, \ argsPrint ) \ { \ GENERROR GenError; \ LPSTR pszFileA = __FILE__; \ \ if( !bDbgGenFail( pszFileA, \ __LINE__, \ cgeFail, \ pgeFails, \ pdwLastErrors, \ &GenError )){ \ \ GenError = (GENERROR)(expr); \ \ if( !( exprSuccess )){ \ \ vDbgLogError( MODULE_DEBUG, \ uDbgLevel, \ __LINE__, \ pszFileA, \ MODULE, \ pszDbgAllocMsgA argsPrint ); \ } \ } \ GenError; \ }
LPSTR pszDbgAllocMsgA( LPCSTR pszMsgFormatA, ... );
BOOL bDbgGenFail( LPCSTR pszFileA, UINT uLine, UINT cgeFails, PGENERROR pgeFails, PDWORD pdwLastErrors );
#ifdef __cplusplus
} #endif
#endif // _DBGLOG_H
|