diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/test/tcryptospi/src/filereader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/test/tcryptospi/src/filereader.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2007-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: +* +*/ + + +/** + @file + @internalTechnology +*/ +#include "filereader.h" + +#include "cryptospi/cryptospidef.h" +#include +#include +#include + +// a simple utility class to read from a text file given the path in its +// NewLC / NewL + +CFileReader* CFileReader::NewL(TPtrC aFilePath) + { + CFileReader* self=CFileReader::NewLC(aFilePath); + CleanupStack::Pop(self); + return self; + } + +CFileReader* CFileReader::NewLC(TPtrC aFilePath) + { + CFileReader* self=new(ELeave) CFileReader(); + CleanupStack::PushL(self); + self->ConstructL(aFilePath); + return self; + } + + +CFileReader* CFileReader::NewL(TPtrC aFilePath, TInt aBlockSize) + { + CFileReader* self=CFileReader::NewLC(aFilePath, aBlockSize); + CleanupStack::Pop(self); + return self; + } + +CFileReader* CFileReader::NewLC(TPtrC aFilePath, TInt aBlockSize) + { + CFileReader* self=new(ELeave) CFileReader(); + CleanupStack::PushL(self); + self->ConstructL(aFilePath, aBlockSize); + return self; + } + + +CFileReader::~CFileReader() + { + // nulled in constructor so safe to call + delete iFileContents; + + delete iFilePath; + + iFile.Close(); + iRfs.Close(); + } + +CFileReader::CFileReader() : iFileContents(0), iFilePath(0) + { + } + +TBool CFileReader::ReadBlockL() + { + TInt moreData = EFalse; + + if(iBlockSize) + { + delete iFileContents; + iFileContents = HBufC8::NewL(iBlockSize); + } + else + { + TInt length; + iFile.Size(length); + delete iFileContents; + iFileContents = HBufC8::NewL(length); + } + + + TPtr8 ptr = iFileContents->Des(); + + // use appropriate read method depending on whether + // we are block reading or reading the whole file; + if(iBlockSize) + { + iFile.Read(iFileOffset, ptr, iBlockSize); + + TInt size; + iFile.Size(size); + + if(iFileOffset < size) + moreData = ETrue; + + iFileOffset+=iBlockSize; + } + else + { + iFile.Read(ptr); + } + + + return moreData; + + } + +void CFileReader::ConstructL(TPtrC aFilePath) + { + iFilePath = HBufC::NewL(aFilePath.Length()); + + iFilePath->Des().Copy(aFilePath); + + iFileOffset = 0; + + iBlockSize = 0; + + User::LeaveIfError(iRfs.Connect()); + User::LeaveIfError(iFile.Open(iRfs, iFilePath->Des(), EFileRead)); + + ReadBlockL(); + } + +void CFileReader::ConstructL(TPtrC aFilePath, TInt aBlockSize) + { + iFilePath = HBufC::NewL(aFilePath.Length()); + + iFilePath->Des().Copy(aFilePath); + + iFileOffset = 0; + + iBlockSize = aBlockSize; + + User::LeaveIfError(iRfs.Connect()); + User::LeaveIfError(iFile.Open(iRfs, iFilePath->Des(), EFileRead)); + } + +CFileReader::operator const TPtrC8() + { + return iFileContents->Des(); + } + +TInt CFileReader::NumBlocks() + { + TInt numBlocks; + TInt fileSize; + TInt mod; + + iFile.Size(fileSize); + + numBlocks = fileSize / iBlockSize; + + mod = fileSize % iBlockSize; + + if(mod) + { + numBlocks++; + } + + return numBlocks; + } + +RInteger CFileReader::ParseIntegerL() + { + HBufC8* buf = ParseBinaryL(iFileContents->Des()); + CleanupStack::PushL(buf); + RInteger result = RInteger::NewL(*buf); + CleanupStack::PopAndDestroy(buf); + + return result; + } + +HBufC8* CFileReader::ParseBinaryL(const TDesC8& aDes) + { + __ASSERT_ALWAYS(aDes.Length() % 2 == 0, User::Panic(_L("ParseBinaryL"), KErrArgument)); + TInt length = aDes.Length() / 2; + HBufC8* buf = HBufC8::NewL(length); + TPtr8 ptr = buf->Des(); + ptr.SetLength(length); + + for (TInt i = 0 ; i < aDes.Length() ; i += 2) + { + TUint8 tmp; + tmp=(TUint8)(aDes[i]-(aDes[i]>'9'?('A'-10):'0')); + tmp*=16; + tmp|=(TUint8)(aDes[i+1]-(aDes[i+1]>'9'?('A'-10):'0')); + ptr[i / 2] = tmp; + } + + return buf; + } +