windows-nt/Source/XPSP1/NT/net/tcpip/services/lpd/trace.c

141 lines
3.6 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
// Name: Mohsin Ahmed
// Email: MohsinA@microsoft.com
// Date: Fri Jan 24 10:33:54 1997
// File: d:/nt/PRIVATE/net/sockets/tcpsvcs/lpd/trace.c
// Synopsis: Too many bugs, need to keep track in the field.
#include "lpd.h"
char LogFileName[1000];
FILE * LogFile = NULL;
// ========================================================================
void
LogTime( void )
{
time_t now;
time( &now );
LOGIT(( " Time %s", ctime( &now ) ));
}
// ========================================================================
// Opens filename in append mode.
// LogFileName is set to filename or debugger.
// On success: LogFile handle
// On failure: NULL
// ========================================================================
CRITICAL_SECTION csLogit;
FILE *
beginlogging( char * filename )
{
int ok;
if( ! filename ){
DbgPrint( "lpd No log file?\n");
return 0;
}
if( LogFile ){
DbgPrint( "lpd: Already logging.\n");
return 0;
}
assert( LogFile == NULL );
ok = ExpandEnvironmentStringsA( filename,
LogFileName,
sizeof( LogFileName ) );
if( !ok ){
DbgPrint("ExpandEnvironmentStrings(%s) failed, err=%d\n",
filename, GetLastError() );
strcpy( LogFileName, "<debugger>" );
}else{
LogFile = fopen( LogFileName, "a+" );
if( LogFile == NULL ){
DbgPrint( "lpd: Cannot open LogFileName=%s\n", LogFileName );
strcpy( LogFileName, "<debugger>" );
}
}
if( LogFile ){
InitializeCriticalSection( &csLogit );
LogTime();
fprintf( LogFile, "==========================================\n");
fprintf( LogFile, "lpd: LogFileName=%s\n", LogFileName );
fprintf( LogFile, "built %s %s\n", __DATE__, __TIME__ );
fprintf( LogFile, "from %s\n", __FILE__ );
fprintf( LogFile, "==========================================\n");
}else{
DbgPrint("lpd: started, built %s %s.\n", __DATE__, __TIME__ );
}
return LogFile;
}
// ========================================================================
// Like printf but send output to LogFile if open, else to Debugger.
// ========================================================================
static DWORD lasttickflush;
int
logit( char * format, ... )
{
va_list ap;
char message[LEN_DbgPrint];
int message_len;
DWORD thistick;
va_start( ap, format );
message_len = vsprintf( message, format, ap );
va_end( ap );
assert( message_len < LEN_DbgPrint );
if( LogFile ){
EnterCriticalSection( &csLogit );
fprintf( LogFile, message );
LeaveCriticalSection( &csLogit );
// Don't flush more than once a second.
thistick = GetTickCount();
if( abs( thistick - lasttickflush ) > 1000 ){
lasttickflush = thistick;
fflush( LogFile );
}
}else{
DbgPrint( message );
}
return message_len;
}
// ========================================================================
// Closes the log file if open.
// ========================================================================
FILE *
stoplogging( FILE * LogFile )
{
if( LogFile ){
LogTime();
LOGIT(( "lpd stoplogging\n"));
fclose( LogFile );
LogFile = NULL;
// DeleteCriticalSection( &csLogit );
}
DbgPrint( "lpd: stopped logging.\n" );
return LogFile;
}
// ========================================================================