contentmgmt/referencedrmagent/RefTestAgent/RTAVirtualFile/virtualFile.cpp
changeset 8 35751d3474b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAVirtualFile/virtualFile.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -0,0 +1,104 @@
+/*
+* 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 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: 
+*
+*/
+
+
+#include "virtualFile.h"
+#include <caf/caferr.h>
+
+using namespace ReferenceTestAgent;
+
+CVirtualFile::CVirtualFile()
+	{
+	}
+
+TInt CVirtualFile::Read(TDes8& aBuffer)
+	{
+	return Read(aBuffer, aBuffer.MaxLength());
+	}
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+EXPORT_C 
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+TInt CVirtualFile::Write(const TDesC8& aBuffer)
+	{
+	return Write(aBuffer, aBuffer.Length());
+	}
+
+HBufC8* CVirtualFile::ReadDescriptor8L(RFile& aFile)
+	{
+	// Find the length of the descriptor
+	TInt length;
+	TPckg<TInt> lengthPckg(length);
+	User::LeaveIfError(aFile.Read(lengthPckg,lengthPckg.Length()));
+	//length = -30;
+	//If the length of the descriptor is greater than the maximum permissible length or if it is a negative value then the contents of the file are corrupt.
+	if(length >= (KMaxTInt/2) || length <= 0)
+	{
+	User::Leave(KErrCorrupt);
+	}
+			
+	// read the data
+	HBufC8* buffer = HBufC8::NewLC(length);
+	TPtr8 bufferPtr = buffer->Des();
+	User::LeaveIfError(aFile.Read(bufferPtr, length));
+	CleanupStack::Pop(buffer);
+	return buffer;
+	}
+
+void CVirtualFile::WriteDescriptor8L(RFile& aFile, const TDesC8& aBuffer)
+	{
+	// Write the length of the descriptor
+	TInt length = aBuffer.Length();
+	TPckg<TInt> lengthPckg(length);
+	User::LeaveIfError(aFile.Write(lengthPckg,lengthPckg.Length()));
+		
+	// write the data
+	User::LeaveIfError(aFile.Write(aBuffer, length));
+	}
+
+
+EXPORT_C TInt CVirtualFile::ReadIntL()
+	{
+	TInt value;
+	TPckg<TInt> valuePckg(value);
+	User::LeaveIfError(Read(valuePckg,valuePckg.Length()));
+	return value;
+	}
+
+EXPORT_C void CVirtualFile::WriteIntL(TInt aValue)
+	{
+	TPckg<TInt> valuePckg(aValue);
+	User::LeaveIfError(Write(valuePckg,valuePckg.Length()));
+	}
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+EXPORT_C TInt64 CVirtualFile::ReadInt64L()
+	{
+	TInt64 value;
+	TPckg<TInt64> valuePckg(value);
+	User::LeaveIfError(Read(valuePckg,valuePckg.Length()));
+	return value;
+	}
+
+EXPORT_C void CVirtualFile::WriteInt64L(const TInt64& aValue)
+	{
+	TPckg<TInt64> valuePckg(aValue);
+	User::LeaveIfError(Write(valuePckg,valuePckg.Length()));
+	}
+#endif //SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+