diff -r 000000000000 -r 8e480a14352b messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsConfigFileParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsConfigFileParser.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,194 @@ +// Copyright (c) 2003-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: +// + +/** + @file +*/ + + +#include "CMtfTestActionUtilsConfigFileParser.h" + +#include + +const TInt KFileBufferSize = 1024; +_LIT8(KComment,"*#*"); + + +CMtfTestActionUtilsConfigFileParser* CMtfTestActionUtilsConfigFileParser::NewL(const TDesC& aFileName) + { + CMtfTestActionUtilsConfigFileParser* self = new (ELeave) CMtfTestActionUtilsConfigFileParser(); + CleanupStack::PushL(self); + self->ConstructL(aFileName); + CleanupStack::Pop(); + return self; + } + + +CMtfTestActionUtilsConfigFileParser::CMtfTestActionUtilsConfigFileParser() + { + } + + +CMtfTestActionUtilsConfigFileParser::~CMtfTestActionUtilsConfigFileParser() + { + iName.ResetAndDestroy(); + iContent.ResetAndDestroy(); + iContent8.ResetAndDestroy(); + } + + +void CMtfTestActionUtilsConfigFileParser::ConstructL(const TDesC& aFileName) + { + RFs fs; + fs.Connect(); + + RFile file; + User::LeaveIfError(file.Open(fs,aFileName,EFileRead)); + + TInt eof = EFalse; + TInt fileOffset = 0; + TBuf8 fileBuffer; + + while (!eof) + { + fileBuffer.SetLength(0); + User::LeaveIfError(file.Read(fileOffset,fileBuffer,KFileBufferSize)); + TInt read = fileBuffer.Length(); + + if (read < KFileBufferSize) + { + fileBuffer.Append('\n'); + eof = ETrue; + } + + TInt lineOverflow = fileBuffer.Locate('\n'); + if ((lineOverflow == KErrNotFound) && (read == KFileBufferSize)) + User::Leave(KErrOverflow); + + TInt eol = EFalse; + while (!eol) + { + TInt lineFeedLocation = fileBuffer.Locate('\n'); + if (lineFeedLocation == KErrNotFound) + eol = ETrue; + else + { + fileOffset += lineFeedLocation + 1; + TInt lineLength; + if ((lineFeedLocation != 0) && (fileBuffer[lineFeedLocation-1] == '\r')) + lineLength = lineFeedLocation-1; + else + lineLength = lineFeedLocation; + TPtrC8 line = fileBuffer.Left(lineLength); + TInt commentLocation = line.Match(KComment); + if (commentLocation != KErrNotFound) + { + TPtrC8 skipComment = line.Left(commentLocation); + line.Set(skipComment); + } + TInt seperatorLocation = line.Locate('='); + if (seperatorLocation != KErrNotFound) + if ((seperatorLocation == 0) || (seperatorLocation == line.Length()-1)) + seperatorLocation = KErrNotFound; + if (seperatorLocation != KErrNotFound) + { + TPtrC8 namePtr = line.Left(seperatorLocation); + HBufC8* nameBuf8 = HBufC8::NewL(namePtr.Length()); + CleanupStack::PushL(nameBuf8); + TPtr8 name8 = nameBuf8->Des(); + name8.Copy(namePtr); + name8.Trim(); + HBufC* nameBuf16 = HBufC::NewL(namePtr.Length()); + TPtr name16 = nameBuf16->Des(); + name16.Copy(name8); + iName.Append(nameBuf16); + CleanupStack::PopAndDestroy(nameBuf8); + + TPtrC8 contentPtr = line.Mid(seperatorLocation+1); + HBufC8* contentBuf8 = HBufC8::NewL(contentPtr.Length()); + CleanupStack::PushL(contentBuf8); + TPtr8 content8 = contentBuf8->Des(); + content8.Copy(contentPtr); + content8.Trim(); + HBufC* contentBuf16 = HBufC::NewL(contentPtr.Length()); + TPtr content16 = contentBuf16->Des(); + content16.Copy(content8); + iContent.Append(contentBuf16); + iContent8.Append(contentBuf8); + CleanupStack::Pop(contentBuf8); + } + TPtrC8 theRest = fileBuffer.Mid(lineFeedLocation+1); + fileBuffer.Copy(theRest); + } + } + } + + fs.Close(); + } + + +TInt CMtfTestActionUtilsConfigFileParser::GetFieldAsInteger(const TDesC& aFieldName,TInt& aValue) + { + TInt count = iName.Count(); + + for (TInt i=0; iCompare(aFieldName) == 0) + { + TPtrC content = iContent[i]->Des(); + TLex lex(content); + lex.Val(aValue); + return (KErrNone); + } + } + + return (KErrNotFound); + } + + +TInt CMtfTestActionUtilsConfigFileParser::GetFieldAsString(const TDesC& aFieldName,TPtrC& aString) + { + TInt count = iName.Count(); + + for (TInt i=0; iCompare(aFieldName) == 0) + { + aString.Set(*iContent[i]); + return (KErrNone); + } + } + + return (KErrNotFound); + } + + +TInt CMtfTestActionUtilsConfigFileParser::GetFieldAsString8(const TDesC& aFieldName,TPtrC8& aString) + { + TInt count = iName.Count(); + + for (TInt i=0; iCompare(aFieldName) == 0) + { + aString.Set(*iContent8[i]); + return (KErrNone); + } + } + + return (KErrNotFound); + } + +