mirror of https://github.com/tongzx/nt5src
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.
111 lines
1.9 KiB
111 lines
1.9 KiB
/*++
|
|
|
|
Copyright (c) 1998 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
strlog.cxx
|
|
|
|
Abstract:
|
|
|
|
This module implements printing strings to a tracelog.
|
|
|
|
Author:
|
|
|
|
George V. Reilly (GeorgeRe) 22-Jun-1998
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "precomp.hxx"
|
|
#include <strlog.hxx>
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
CStringTraceLog::CStringTraceLog(
|
|
UINT cchEntrySize /* = 80 */,
|
|
UINT cLogSize /* = 100 */)
|
|
{
|
|
m_Signature = SIGNATURE;
|
|
m_cch = min(max(cchEntrySize, MIN_CCH), MAX_CCH);
|
|
m_cch = (m_cch + sizeof(DWORD) - 1) & ~sizeof(DWORD);
|
|
m_ptlog = CreateTraceLog(cLogSize, 0,
|
|
sizeof(CLogEntry) - MAX_CCH + m_cch);
|
|
}
|
|
|
|
|
|
|
|
CStringTraceLog::~CStringTraceLog()
|
|
{
|
|
DestroyTraceLog(m_ptlog);
|
|
m_Signature = SIGNATURE_X;
|
|
}
|
|
|
|
|
|
|
|
LONG __cdecl
|
|
CStringTraceLog::Printf(
|
|
LPCSTR pszFormat,
|
|
...)
|
|
{
|
|
DBG_ASSERT(this->m_Signature == SIGNATURE);
|
|
DBG_ASSERT(this->m_ptlog != NULL);
|
|
|
|
CLogEntry le;
|
|
va_list argsList;
|
|
|
|
va_start(argsList, pszFormat);
|
|
INT cchOutput = _vsnprintf(le.m_ach, m_cch, pszFormat, argsList);
|
|
va_end(argsList);
|
|
|
|
//
|
|
// The string length is long, we get back -1.
|
|
// so we get the string length for partial data.
|
|
//
|
|
|
|
if ( cchOutput == -1 ) {
|
|
|
|
//
|
|
// terminate the string properly,
|
|
// since _vsnprintf() does not terminate properly on failure.
|
|
//
|
|
cchOutput = m_cch - 1;
|
|
le.m_ach[cchOutput] = '\0';
|
|
}
|
|
|
|
return WriteTraceLog(m_ptlog, &le);
|
|
}
|
|
|
|
|
|
|
|
LONG
|
|
CStringTraceLog::Puts(
|
|
LPCSTR psz)
|
|
{
|
|
DBG_ASSERT(this->m_Signature == SIGNATURE);
|
|
DBG_ASSERT(this->m_ptlog != NULL);
|
|
|
|
CLogEntry le;
|
|
|
|
strncpy(le.m_ach, psz, m_cch);
|
|
le.m_ach[m_cch - 1] = '\0';
|
|
return WriteTraceLog(m_ptlog, &le);
|
|
}
|
|
|
|
|
|
|
|
void
|
|
CStringTraceLog::ResetLog()
|
|
{
|
|
DBG_ASSERT(this->m_Signature == SIGNATURE);
|
|
DBG_ASSERT(this->m_ptlog != NULL);
|
|
|
|
ResetTraceLog(m_ptlog);
|
|
}
|
|
|
|
|
|
|