diff -r 000000000000 -r 2c201484c85f cryptomgmtlibs/cryptotokenfw/source/ctframework/CTLogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptomgmtlibs/cryptotokenfw/source/ctframework/CTLogger.cpp Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,114 @@ +/* +* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + +#include +#include + +#if defined(_DEBUG) && defined(__CT_LOGGING__) + +_LIT(KLogFilename, "\\logs\\security\\cryptotokens.txt"); +_LIT(KIndent, " "); +_LIT8(KNewLine, "\r\n"); + +#define MAX_LEN 128 + +static TInt Indent() + { + return reinterpret_cast(Dll::Tls()); + } + +static void SetIndent(TInt aIndent) + { + Dll::SetTls(reinterpret_cast(aIndent)); + } + +EXPORT_C void CTLogger::Log(TAny* aObject, TRefByValue aFmt, ...) + { + TBuf data; + + data.AppendFormat(_L("%08x: "), aObject); + + for (TInt i = 0 ; i < Indent() ; ++i) + { + data.Append(KIndent); + } + + VA_LIST args; + VA_START(args, aFmt); + data.AppendFormatList(aFmt, args); + VA_END(args); + + TRAPD(err, LogL(data)); + ASSERT(err == KErrNone); + } + +EXPORT_C void CTLogger::UpdateIndent(TInt aInc) + { + TInt newIndent = Indent() + aInc; + ASSERT(newIndent >= 0); + SetIndent(newIndent); + } + +void CTLogger::LogL(const TDesC& aString) + { + // Open the file server and file + RFs fs; + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + + // Open the file or create it if doesn't exist, create it + RFile file; + TDriveUnit sysDrive (fs.GetSystemDrive()); + TBuf<128> logFile (sysDrive.Name()); + logFile.Append(KLogFilename); + + TInt error = file.Open(fs, logFile, EFileWrite|EFileShareAny); + if (error == KErrNotFound) + { + error = file.Create(fs, logFile, EFileWrite|EFileShareAny); + } + User::LeaveIfError(error); + CleanupClosePushL(file); + + // Seek to the end of the file + TInt tmp = 0; + file.Seek(ESeekEnd, tmp); + + // And do some logging + TBuf8 buf; + buf.Copy(aString); + file.Write(buf); + file.Write(KNewLine); + + // Close and tidy up + CleanupStack::PopAndDestroy(2, &fs); + } + +#else + +EXPORT_C void CTLogger::Log(TAny* /*aObject*/, TRefByValue /*aFmt*/, ...) + { + User::Invariant(); + } + +EXPORT_C void CTLogger::UpdateIndent(TInt /*aInc*/) + { + User::Invariant(); + } + +#endif