--- /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 <ct/logger.h>
+#include <f32file.h>
+
+#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<TInt>(Dll::Tls());
+ }
+
+static void SetIndent(TInt aIndent)
+ {
+ Dll::SetTls(reinterpret_cast<TAny*>(aIndent));
+ }
+
+EXPORT_C void CTLogger::Log(TAny* aObject, TRefByValue<const TDesC16> aFmt, ...)
+ {
+ TBuf<MAX_LEN> 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<MAX_LEN> 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<const TDesC16> /*aFmt*/, ...)
+ {
+ User::Invariant();
+ }
+
+EXPORT_C void CTLogger::UpdateIndent(TInt /*aInc*/)
+ {
+ User::Invariant();
+ }
+
+#endif