diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/MobileTermination/CLog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/Source/MobileTermination/CLog.cpp Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* System Includes +* +*/ + + + +#include +#include + + +/******************************************************************************* + * + * Local Includes + * + ******************************************************************************/ +#include "CLog.h" + + +/******************************************************************************* + * + * Definitions + * + ******************************************************************************/ +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#define PRINT_ENTRY_PREFIX_LEN 16 +#define PRINT_ENTRY_SEPARATOR (" - ") +#define PRINT_ENTRY_SEPARATOR_LEN 3 +#define MAXLINESIZE (PRINT_ENTRY_PREFIX_LEN + PRINT_ENTRY_SEPARATOR_LEN + MAXWHOSIZE + MAXMSGSIZE) +#ifndef WIN32 +#define _snprintf snprintf +#endif + +/******************************************************************************* + * + * Statics + * + ******************************************************************************/ + + +/******************************************************************************* + * + * Implementation + * + ******************************************************************************/ +CLog::CLog( int aFileBacked ) +{ + assert( aFileBacked == 0 ); + iLogVector = 0xFFFFFFFF; +} + + +void CLog::WriteLogEntry( TSeverity aSeverity, char *aWho, char *aMsg ) +{ + TLogEntry entry; + int slen; + + // copy message into struct + memset( &entry, 0, sizeof(entry) ); + entry.iSeverity = aSeverity; + slen = strlen(aWho); + slen = MIN( slen, (MAXWHOSIZE-1) ); + memcpy( entry.iWho, aWho, slen ); + slen = strlen(aMsg); + slen = MIN( slen, (MAXMSGSIZE-1) ); + memcpy( entry.iMsg, aMsg, slen ); + + // now add it to the vector + iLogEntries.push_back( entry ); +} + + +void CLog::WriteLogEntry( TSeverity aSeverity, char *aWho, char *aErrorLocation, int aErrorA, int aErrorB ) +{ + char buff[MAXMSGSIZE]; + _snprintf( buff, MAXMSGSIZE, "%s (%d, %d)", aErrorLocation, aErrorA, aErrorB ); + WriteLogEntry( aSeverity, aWho, buff ); +} + + +void CLog::SetLogLevel( int aLogVector ) +{ + iLogVector = aLogVector; +} + + +char *CLog::GetSeverityString( TSeverity aSeverity ) +{ + switch( aSeverity ) { + + case SV_INFO: + return "Info: "; + + case SV_WARNING: + return "Warning: "; + + case SV_ERROR: + return "Error: "; + + case SV_RESOURCE: + return "Resource: "; + + case SV_STATE: + return "State: "; + + default: + return "Unknown: "; + } + + // should never get here + assert( !"INVALID CODE PATH" ); + return NULL; +} + + +int CLog::CalculateLogSize() +{ + char *severity_string; + char cline[MAXLINESIZE]; + int log_size = 0; + + vector::iterator iter; + for( iter = iLogEntries.begin(); iter != iLogEntries.end(); iter++ ) { + severity_string = GetSeverityString( iter->iSeverity ); + sprintf( cline, "%s%s%s%s\n", severity_string, iter->iWho, PRINT_ENTRY_SEPARATOR, iter->iMsg ); + log_size += strlen(cline); + } + log_size++; + return log_size; +} + + +void CLog::PrintLogToBuffer( int aBufferSize, char *aBuffer ) +{ + char cline[MAXLINESIZE]; + vector::iterator iter; + int slen, remaining_space; + char *severity_string; + + // init params + assert( aBufferSize > 0 ); + assert( aBuffer != NULL ); + + // init + aBuffer[0] = 0; + remaining_space = aBufferSize; + + // process each entry + for( iter = iLogEntries.begin(); iter != iLogEntries.end(); iter++ ) { + + // print the line to the temp buffer + severity_string = GetSeverityString( iter->iSeverity ); + sprintf( cline, "%s%s%s%s\n", severity_string, iter->iWho, PRINT_ENTRY_SEPARATOR, iter->iMsg ); + + // check there is room left in the passed buffer + slen = strlen(cline); + if( remaining_space <= slen ) { + break; + } + + // otherwise + strcat( aBuffer, cline ); + remaining_space -= slen; + } + + // done + return; +} +