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.
|
|
//
// MODULE: LogString.cpp
//
// PURPOSE: implementation of the CLogString class.
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 [email protected]
//
// AUTHOR: Roman Mach, Joe Mabel
//
// ORIGINAL DATE: 7/24/1998
//
// NOTES:
// 1. For public "Add" methods of this class: unless otherwise noted, if called more than once,
// only last call is significant
//
// Version Date By Comments
//--------------------------------------------------------------------
// V3.0 7-24-98 JM Major revision, deprecate IDH.
//
#include "stdafx.h"
#include "LogString.h"
#include "SafeTime.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLogString::CLogString() { time( &m_timeStart ); m_bLoggedError = false; m_dwError = 0; m_dwSubError = 0; }
CLogString::~CLogString() { }
CString CLogString::GetStr() const { CString str; CString strDuration; GetDurationString(strDuration);
GetStartTimeString(str); str += _T(", "); str += m_strCookie; str += m_strTopic; str += strDuration; str += _T(", "); str += m_strStates; str += m_strCurNode; if (m_bLoggedError) { CString strError; strError.Format(_T(", Err=%ld(%ld)"), m_dwError, m_dwSubError); str +=strError; } str += _T("\n");
return str; }
void CLogString::AddCookie(LPCTSTR szCookie) { m_strCookie = szCookie; }
// INPUT szTopic: troubleshooter topic (a.k.a. troubleshooter symbolic name)
void CLogString::AddTopic(LPCTSTR szTopic) { m_strTopic.Format(_T(" %s,"), szTopic); }
// Must be called repeatedly for successive nodes.
// If you want to display nodes in a particular order, this must be called in that order.
void CLogString::AddNode(NID nid, IST ist) { CString str; str.Format(_T("[%d:%d], "), nid, ist);
m_strStates += str; }
// Add current node (no state because we are currently visiting it)
void CLogString::AddCurrentNode(NID nid) { m_strCurNode.Format(_T("Page=%d"), nid); }
// Only logs an error if dwError != 0
// Can call with dwError == 0 to clear previous error
void CLogString::AddError(DWORD dwError/* =0 */, DWORD dwSubError/* =0 */) { m_bLoggedError = dwError ? true :false; if (m_bLoggedError) { m_dwError = dwError; m_dwSubError = dwSubError; } }
// OUTPUT str contains start date/time in form used in log.
void CLogString::GetStartTimeString(CString& str) const { TCHAR buf[100]; // plenty big for date/time string
{ // minimize how long we use CSafeTime, because it means holding a mutex.
CSafeTime safe(m_timeStart); _tcscpy(buf, _tasctime(&(safe.LocalTime()))); } if (_tcslen(buf)) buf[_tcslen(buf)-1] = _T('\0');// remove cr
str = buf; }
// OUTPUT str contains form used in log of duration in seconds since m_timeStart.
void CLogString::GetDurationString(CString& str) const { time_t timeNow; time( &timeNow );
str.Format(_T(" Time=%02ds"), timeNow - m_timeStart); }
|