crypto/weakcryptospi/test/tcryptospi/src/filereader.cpp
changeset 8 35751d3474b7
--- /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 <e32std.h>
+#include <e32def.h>
+#include <f32file.h>
+
+// 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;
+	}
+