Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

513 lines
9.6 KiB

/*++
Copyright (c) 1998-1999 Microsoft Corporation
All rights reserved.
Module Name:
dbgstate.cxx
Abstract:
status support
Author:
Steve Kiraly (SteveKi) 2-Mar-1997
Revision History:
--*/
#include "precomp.hxx"
#pragma hdrstop
#include "dbgreslt.hxx"
#include "dbgstate.hxx"
#if DBG
/********************************************************************
Debugging TStatus base members
********************************************************************/
TStatusBase::
TStatusBase(
IN BOOL dwStatus,
IN UINT uDbgLevel
) : m_dwStatus(dwStatus),
m_uDbgLevel(uDbgLevel),
m_dwStatusSafe1(-1),
m_dwStatusSafe2(-1),
m_dwStatusSafe3(-1),
m_uLine(0),
m_pszFile(NULL)
{
}
TStatusBase::
~TStatusBase(
VOID
)
{
}
TStatusBase&
TStatusBase::
pNoChk(
VOID
)
{
m_pszFile = NULL;
m_uLine = 0;
return (TStatusBase&)*this;
}
TStatusBase&
TStatusBase::
pSetInfo(
UINT uLine,
LPCTSTR pszFile
)
{
m_uLine = uLine;
m_pszFile = pszFile;
return (TStatusBase&)*this;
}
VOID
TStatusBase::
pConfig(
IN UINT uDbgLevel,
IN DWORD dwStatusSafe1,
IN DWORD dwStatusSafe2,
IN DWORD dwStatusSafe3
)
{
m_uDbgLevel = uDbgLevel;
m_dwStatusSafe1 = dwStatusSafe1;
m_dwStatusSafe2 = dwStatusSafe2;
m_dwStatusSafe3 = dwStatusSafe3;
}
DWORD
TStatusBase::
dwGeTStatusBase(
VOID
) const
{
//
// Assert if we are reading an UnInitalized variable.
//
if (m_dwStatus == kUnInitializedValue)
{
DBG_MSG(kDbgAlways|kDbgNoFileInfo, (_T("***Read of UnInitialized TStatus variable!***\n")));
DBG_BREAK();
}
//
// Return the error value.
//
return m_dwStatus;
}
DWORD
TStatusBase::
operator=(
IN DWORD dwStatus
)
{
//
// Do nothing if the file and line number are cleared.
// This is the case when the NoChk method is used.
//
if (m_uLine && m_pszFile)
{
//
// Get the last error value.
//
DWORD LastError = GetLastError();
//
// Check if we have an error, and it's not one of the accepted "safe" errors.
//
if (dwStatus != ERROR_SUCCESS &&
dwStatus != m_dwStatusSafe1 &&
dwStatus != m_dwStatusSafe2 &&
dwStatus != m_dwStatusSafe3)
{
//
// Convert the last error value to a string.
//
TDebugResult Result(dwStatus);
DBG_MSG(m_uDbgLevel, (_T("TStatus failure, %d, %s\n%s %d\n"), dwStatus, Result.GetErrorString(), m_pszFile, m_uLine));
}
//
// Restore the last error, the message call may have destoyed the last
// error value, we don't want the caller to loose this value.
//
SetLastError(LastError);
}
return m_dwStatus = dwStatus;
}
TStatusBase::
operator DWORD(
VOID
) const
{
return dwGeTStatusBase();
}
/********************************************************************
Debugging TStatus members
********************************************************************/
TStatus::
TStatus(
IN DWORD dwStatus
) : TStatusBase(dwStatus, kDbgWarning)
{
}
TStatus::
~TStatus(
VOID
)
{
}
/********************************************************************
Debugging TStatusB base members
********************************************************************/
TStatusBBase::
TStatusBBase(
IN BOOL bStatus,
IN UINT uDbgLevel
) : m_bStatus(bStatus),
m_uDbgLevel(uDbgLevel),
m_dwStatusSafe1(-1),
m_dwStatusSafe2(-1),
m_dwStatusSafe3(-1),
m_uLine(0),
m_pszFile(NULL)
{
}
TStatusBBase::
~TStatusBBase(
VOID
)
{
}
TStatusBBase&
TStatusBBase::
pNoChk(
VOID
)
{
m_pszFile = NULL;
m_uLine = 0;
return (TStatusBBase&)*this;
}
TStatusBBase&
TStatusBBase::
pSetInfo(
IN UINT uLine,
IN LPCTSTR pszFile
)
{
m_uLine = uLine;
m_pszFile = pszFile;
return (TStatusBBase&)*this;
}
VOID
TStatusBBase::
pConfig(
IN UINT uDbgLevel,
IN DWORD dwStatusSafe1,
IN DWORD dwStatusSafe2,
IN DWORD dwStatusSafe3
)
{
m_uDbgLevel = uDbgLevel;
m_dwStatusSafe1 = dwStatusSafe1;
m_dwStatusSafe2 = dwStatusSafe2;
m_dwStatusSafe3 = dwStatusSafe3;
}
BOOL
TStatusBBase::
bGetStatus(
VOID
) const
{
//
// Assert if we are reading an UnInitalized variable.
//
if (m_bStatus == kUnInitializedValue)
{
DBG_MSG(kDbgAlways|kDbgNoFileInfo, (_T("***Read of UnInitialized TStatusB variable!***\n")));
DBG_BREAK();
}
//
// Return the error value.
//
return m_bStatus;
}
BOOL
TStatusBBase::
operator=(
IN BOOL bStatus
)
{
//
// Do nothing if the file and line number are cleared.
// This is the case when the NoChk method is used.
//
if (m_uLine && m_pszFile)
{
//
// Check if we have an error, and it's not one of the two
// accepted "safe" errors.
//
if (!bStatus)
{
//
// Get the last error value.
//
DWORD LastError = GetLastError();
//
// If the last error is not one of the safe values then display an error message
//
if (LastError != m_dwStatusSafe1 &&
LastError != m_dwStatusSafe2 &&
LastError != m_dwStatusSafe3)
{
//
// Convert the last error value to a string.
//
TDebugResult Result(LastError);
DBG_MSG(m_uDbgLevel, (_T("TStatusB failure, %d, %s\n%s %d\n"), LastError, Result.GetErrorString(), m_pszFile, m_uLine));
}
//
// Restore the last error, the message call may have destoyed the last
// error value, we don't want the caller to loose this value.
//
SetLastError(LastError);
}
}
return m_bStatus = bStatus;
}
TStatusBBase::
operator BOOL(
VOID
) const
{
return bGetStatus();
}
/********************************************************************
Debugging TStatusB members
********************************************************************/
TStatusB::
TStatusB(
IN BOOL bStatus
) : TStatusBBase(bStatus, kDbgWarning)
{
}
TStatusB::
~TStatusB(
VOID
)
{
}
/********************************************************************
Debugging TStatusH base members
********************************************************************/
TStatusHBase::
TStatusHBase(
IN HRESULT hrStatus,
IN UINT uDbgLevel
) : m_hrStatus(hrStatus),
m_uDbgLevel(uDbgLevel),
m_hrStatusSafe1(-1),
m_hrStatusSafe2(-1),
m_hrStatusSafe3(-1),
m_uLine(0),
m_pszFile(NULL)
{
}
TStatusHBase::
~TStatusHBase(
VOID
)
{
}
TStatusHBase&
TStatusHBase::
pNoChk(
VOID
)
{
m_pszFile = NULL;
m_uLine = 0;
return (TStatusHBase&)*this;
}
TStatusHBase&
TStatusHBase::
pSetInfo(
IN UINT uLine,
IN LPCTSTR pszFile
)
{
m_uLine = uLine;
m_pszFile = pszFile;
return (TStatusHBase&)*this;
}
VOID
TStatusHBase::
pConfig(
IN UINT uDbgLevel,
IN DWORD hrStatusSafe1,
IN DWORD hrStatusSafe2,
IN DWORD hrStatusSafe3
)
{
m_uDbgLevel = uDbgLevel;
m_hrStatusSafe1 = hrStatusSafe1;
m_hrStatusSafe2 = hrStatusSafe2;
m_hrStatusSafe3 = hrStatusSafe3;
}
HRESULT
TStatusHBase::
hrGetStatus(
VOID
) const
{
//
// Assert if we are reading an UnInitalized variable.
//
if (m_hrStatus == kUnInitializedValue)
{
DBG_MSG(kDbgAlways|kDbgNoFileInfo, (_T("***Read of UnInitialized TStatusH variable!***\n")));
DBG_BREAK();
}
//
// Return the error code.
//
return m_hrStatus;
}
HRESULT
TStatusHBase::
operator=(
IN HRESULT hrStatus
)
{
//
// Do nothing if the file and line number are cleared.
// This is the case when the NoChk method is used.
//
if (m_uLine && m_pszFile)
{
//
// Check if we have an error, and it's not one of the two
// accepted "safe" errors.
//
if (FAILED(hrStatus))
{
//
// Get the last error value.
//
DWORD LastError = GetLastError();
//
// If the last error is not one of the safe values then display an error message
//
if (hrStatus != m_hrStatusSafe1 &&
hrStatus != m_hrStatusSafe2 &&
hrStatus != m_hrStatusSafe3)
{
TDebugResult Result( HRESULT_FACILITY(hrStatus) == FACILITY_WIN32 ? HRESULT_CODE(hrStatus) : hrStatus);
DBG_MSG(m_uDbgLevel, (_T("TStatusH failure, %x, %s\n%s %d\n"), hrStatus, Result.GetErrorString(), m_pszFile, m_uLine));
}
//
// Restore the last error, the message call may have destoyed the last
// error value, we don't want the caller to loose this value.
//
SetLastError(LastError);
}
}
return m_hrStatus = hrStatus;
}
TStatusHBase::
operator HRESULT(
VOID
) const
{
return hrGetStatus();
}
/********************************************************************
Debugging TStatusH members
********************************************************************/
TStatusH::
TStatusH(
IN HRESULT hrStatus
) : TStatusHBase(hrStatus, kDbgWarning)
{
}
TStatusH::
~TStatusH(
VOID
)
{
}
#endif