--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/taskscheduler/SCHSVR/SSCH_UTL.CPP Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,195 @@
+// Copyright (c) 2004-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:
+//
+
+// User includes
+#include "SchLogger.h"
+
+#ifdef __SCHLOGGING__
+
+
+
+
+//
+// ------> CSheduleServerLog (source)
+//
+
+CSheduleServerLog::CSheduleServerLog()
+ {
+ }
+
+CSheduleServerLog::~CSheduleServerLog()
+ {
+ iFile.Close();
+ iFs.Close();
+ }
+
+void CSheduleServerLog::ConstructL(const TDesC& aLogFileName)
+ {
+ // Literal constants
+ _LIT(KScheduleServerLoggingDirectoryE, "E:\\Logs\\SchSvr\\");
+ _LIT(KScheduleServerLoggingDirectoryD, "D:\\Logs\\SchSvr\\");
+ _LIT(KScheduleServerLoggingDirectory, "_:\\Logs\\SchSvr\\");
+
+ User::LeaveIfError(iFs.Connect());
+ TFileName logFile;
+
+ // Log to drive D if possible
+ TInt error = iFs.MkDirAll(KScheduleServerLoggingDirectoryE);
+ if (error == KErrAlreadyExists || error == KErrNone)
+ {
+ logFile.Append(KScheduleServerLoggingDirectoryE);
+ }
+ else
+ {
+ error = iFs.MkDirAll(KScheduleServerLoggingDirectoryD);
+ if (error == KErrAlreadyExists || error == KErrNone)
+ {
+ logFile.Append(KScheduleServerLoggingDirectoryD);
+ }
+ else
+ {
+ // system drive directory
+ TBuf<15> loggingDirOnSysDrive(KScheduleServerLoggingDirectory);
+ loggingDirOnSysDrive[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());
+
+ error = iFs.MkDirAll(loggingDirOnSysDrive);
+ if (error != KErrAlreadyExists && error < KErrNone)
+ User::Leave(error);
+ logFile.Append(loggingDirOnSysDrive);
+ }
+ }
+
+ // Open log file
+ TParsePtrC parser(aLogFileName);
+ logFile.Append(parser.Name());
+
+#ifdef __WINS__
+ logFile.Append(_L(".WINS"));
+#elif __MARM__
+ logFile.Append(_L(".MARM"));
+#endif
+#ifdef _DEBUG
+ logFile.Append(_L(".UDEB"));
+#else
+ logFile.Append(_L(".UREL"));
+#endif
+ logFile.Append(parser.Ext());
+ logFile.Append(_L(".TXT"));
+
+ User::LeaveIfError(iFile.Replace(iFs, logFile, EFileStreamText | EFileShareAny));
+ SeekEnd();
+
+ NewLine();
+ NewLine();
+ _LIT(KNewLogEntry, "=== NEW LOG ===");
+ Write(KNewLogEntry);
+ NewLine();
+ }
+
+CSheduleServerLog* CSheduleServerLog::NewL(const TDesC& aLogFileName)
+ {
+ CSheduleServerLog* self = new(ELeave) CSheduleServerLog();
+ CleanupStack::PushL(self);
+ self->ConstructL(aLogFileName);
+ CleanupStack::Pop();
+ return self;
+ }
+
+//
+//
+//
+
+void CSheduleServerLog::Log(TRefByValue<const TDesC> aFmt,...)
+ {
+ VA_LIST list;
+ VA_START(list, aFmt);
+
+ TBuf<1024> buf;
+ buf.AppendFormatList(aFmt, list);
+ WriteWithTimeStamp(buf);
+ NewLine();
+ }
+
+void CSheduleServerLog::LogList(TRefByValue<const TDesC> aFmt, VA_LIST aList)
+ {
+ TBuf<1024> buf;
+ buf.AppendFormatList(aFmt, aList);
+ WriteWithTimeStamp(buf);
+ NewLine();
+ }
+
+void CSheduleServerLog::SeekEnd()
+ {
+ TInt pos;
+ iFile.Seek(ESeekEnd, pos);
+ }
+
+//
+//
+//
+
+void CSheduleServerLog::Write(const TDesC& aText)
+ {
+ HBufC8* buf = HBufC8::New(aText.Length());
+ if (!buf)
+ return;
+
+ TPtr8 pBuf(buf->Des());
+
+ const TInt KTextLength = aText.Length();
+ for(TInt i=0; i<KTextLength; i++)
+ {
+ if (aText[i] < 256)
+ pBuf.Append(aText[i]);
+ }
+
+ // Ignore errors
+ TInt error = iFile.Write(pBuf);
+ delete buf;
+ error = iFile.Flush();
+ }
+
+void CSheduleServerLog::Write(const TDesC& aFmt, VA_LIST& aList)
+ {
+ TDes* buf = new TBuf<1000>;
+ if (!buf)
+ return;
+ buf->AppendFormatList(aFmt, aList);
+ Write(*buf);
+ delete buf;
+ }
+
+void CSheduleServerLog::WriteWithTimeStamp(const TDesC& aText)
+ {
+ TBuf<200> buf;
+ TTime now;
+ now.HomeTime();
+ TDateTime dateTime;
+ dateTime = now.DateTime();
+ buf.Format(_L("%02d.%02d:%02d:%06d "), dateTime.Hour(), dateTime.Minute(), dateTime.Second(), dateTime.MicroSecond());
+ Write(buf);
+ Write(aText);
+ }
+
+void CSheduleServerLog::NewLine()
+ {
+ TBuf<2> buf;
+ buf.Append(0x0D);
+ buf.Append(0x0A);
+ Write(buf);
+ }
+
+
+#endif