diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgtest/testutils/base/src/msvtestconfig.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtest/testutils/base/src/msvtestconfig.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,164 @@ +// Copyright (c) 2000-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: +// + +#include "msvtestconfig.h" + +EXPORT_C TInt TMsvConfigEntry::Set(const TDesC& aLine) + { + TInt pos = Find(aLine, _L("\t= ")); + if (pos >= 0 && pos < aLine.Length() - 1) + { + iName.Copy(aLine.Left(pos)); + iName.Trim(); + + iValue.Copy(aLine.Mid(pos + 1)); + iValue.Trim(); + } + else + return KErrArgument; + + return KErrNone; + } + +TInt TMsvConfigEntry::Find(const TDesC& aString, const TDesC& aFind) + { + TInt result = -1; + for (TInt pos = 0; pos < aFind.Length(); pos++) + { + result = aString.Locate(aFind[pos]); + if (result >= 0) + break; + } + return result; + } + +EXPORT_C TInt TMsvConfigEntry::Int() const + { + return Int(iValue); + } + +TInt TMsvConfigEntry::Int(TPtrC aPtr) const + { + TRadix radix = EDecimal; + + if (aPtr.Length() > 2 && aPtr[0] == '0' && (aPtr[1] == 'x' || aPtr[1] == 'X')) + { + aPtr.Set(aPtr.Mid(2)); + radix = EHex; + } + + TLex lex(aPtr); + + TUint val = 0; + lex.Val(val, radix); + + return val; + } + +EXPORT_C TVersion TMsvConfigEntry::Version() const + { + TUint major = 0; + TUint minor = 0; + TUint build = 0; + + // Find first comma + TInt pos1 = iValue.Find(_L(",")); + if (pos1 > 0) + major = Int(iValue.Left(pos1)); + + // Get position of second comma + TInt pos2 = pos1 + 1; + while(pos2 < iValue.Length() && iValue[pos2] != ',') + pos2++; + + // Check there is any data to read + if (pos1 + 1 < iValue.Length() - 1) + minor = Int(iValue.Mid(pos1 + 1, pos2 - pos1)); + + // Check there is any data to read + if (pos2 < iValue.Length() - 1) + build = Int(iValue.Mid(pos2 + 1)); + + return TVersion(major, minor, build); + } + +CMsvConfigEntrySelection::CMsvConfigEntrySelection() + : CArrayFixFlat(KConfigSelectionGranularity) + { + } + +EXPORT_C CMsvConfigEntrySelection* CMsvConfigEntrySelection::NewL(RFs& aFs, const TDesC& aFileName) + { + // Create the configuration selection + CMsvConfigEntrySelection* self = new(ELeave)CMsvConfigEntrySelection; + CleanupStack::PushL(self); + + // Open the file + RFile file; + User::LeaveIfError(file.Open(aFs, aFileName, EFileShareReadersOnly | EFileRead)); + + // Treat it as a text file (unicode) + TFileText textFile; + textFile.Set(file); + + TInt error = KErrNone; + TBuf<256> buf; + + while(error == KErrNone) + { + // Read a line of text + error = textFile.Read(buf); + buf.TrimLeft(); + + if (!error) + { + // Skip comments + if (buf.Length() >= 2 && buf[0] == '/' && buf[1] == '/') + continue; + + // Create a configuration entry and add to selection + TMsvConfigEntry entry; + if (!entry.Set(buf)) + self->AppendL(entry); + } + } + + // Did an error occur? + if (error != KErrEof && !error) + User::Leave(error); + + CleanupStack::Pop(); // self + return self; + } + +EXPORT_C TInt CMsvConfigEntrySelection::FindPos(const TDesC& aName) const + { + TInt count = Count(); + while(count--) + { + if (At(count).Name().CompareF(aName) == 0) + return count; + } + return KErrNotFound; + } + +EXPORT_C const TMsvConfigEntry* CMsvConfigEntrySelection::Find(const TDesC& aName) const + { + TInt pos = FindPos(aName); + if (pos >= 0) + return &At(pos); + + return NULL; + }