|
|
// REVIEW: This file has been "leveraged" off of \nt\private\shell\lib\debug.c and \nt\private\shell\inc\debug.h.
// By no means it's complete but it gives an idea of the right direction. Ideally, we would share with shell
// debugging closer.
#include "precomp.h"
#include "debug.h"
#ifdef _DEBUG
#undef ASSERT
#ifndef __WATCOMC__
#define ASSERT(f) DEBUG_BREAK
#else
#define ASSERT(f) void(f)
#endif
const CHAR FAR c_szAssertFailed[] = "Assert %s, line %d: (%s)\r\n"; const WCHAR FAR c_wszAssertFailed[] = L"Assert %s, line %d: (%s)\r\n";
BOOL AssertFailedA(LPCSTR pszFile, int line, LPCSTR pszEval, BOOL fBreakInside) { CHAR ach[256]; LPCSTR psz; BOOL fRet = FALSE;
for (psz = pszFile + StrLenA(pszFile); psz != pszFile; psz = CharPrevA(pszFile, psz)) if ((CharPrevA(pszFile, psz) != (psz-2)) && *(psz - 1) == '\\') break; wnsprintfA(ach, countof(ach), c_szAssertFailed, psz, line, pszEval); OutputDebugStringA(ach);
if (fBreakInside) ASSERT(0); else fRet = TRUE;
return fRet; }
BOOL AssertFailedW(LPCWSTR pszFile, int line, LPCWSTR pszEval, BOOL fBreakInside) { WCHAR ach[256]; LPCWSTR psz; BOOL fRet = FALSE;
for (psz = pszFile + StrLenW(pszFile); psz && (psz != pszFile); psz = CharPrevW(pszFile, psz)) if ((CharPrevW(pszFile, psz) != (psz-2)) && *(psz - 1) == TEXT('\\')) break;
if (psz == NULL) { char szFile[MAX_PATH]; char szEval[256];
W2Abuf(pszFile, szFile, countof(szFile)); W2Abuf(pszEval, szEval, countof(szEval)); return AssertFailedA(szFile, line, szEval, fBreakInside); }
wnsprintfW(ach, countof(ach), c_wszAssertFailed, psz, line, pszEval); OutputDebugStringW(ach);
if (fBreakInside) ASSERT(0); else fRet = TRUE;
return fRet; }
#endif
|