libraries/iosrv/server/file.cpp
changeset 0 7f656887cf89
child 95 b3ffff030d5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/iosrv/server/file.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,122 @@
+// file.cpp
+// 
+// Copyright (c) 2006 - 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "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:
+// Accenture - Initial contribution
+//
+
+#include "file.h"
+#include "log.h"
+#include <fshell/ltkutils.h>
+
+CIoFile* CIoFile::NewLC(RFs& aFs, const TDesC& aName, RIoFile::TMode aMode)
+	{
+	CIoFile* self = new(ELeave) CIoFile();
+	CleanupClosePushL(*self);
+	self->ConstructL(aFs, aName, aMode);
+	return self;
+	}
+
+CIoFile::~CIoFile()
+	{
+	iFile.Close();
+	iTempReadBuf.Close();
+	}
+
+TBool CIoFile::IsType(RIoHandle::TType aType) const
+	{
+	return ((aType == RIoHandle::EEndPoint) || (aType == RIoHandle::EFile));
+	}
+
+void CIoFile::IorepReadL(MIoReader& aReader)
+	{
+	TInt fileSize;
+	User::LeaveIfError(iFile.Size(fileSize));
+	if (iPos < fileSize)
+		{
+		TDes& readBuf = aReader.IorReadBuf();
+		iTempReadBuf.Zero();
+		HBufC8* narrowBuf = HBufC8::NewLC(readBuf.MaxLength());
+		TPtr8 narrowBufPtr(narrowBuf->Des());
+		User::LeaveIfError(iFile.Read(narrowBufPtr, readBuf.MaxLength()));
+		iPos += narrowBuf->Length();
+		iTempReadBuf.AppendUtf8L(narrowBufPtr);
+		if (iPos >= fileSize)
+			{
+			iTempReadBuf.FinalizeUtf8();
+			}
+		readBuf.Copy(iTempReadBuf);
+		aReader.IorDataBuffered(readBuf.Length());
+		CleanupStack::PopAndDestroy(narrowBuf);
+		if (iPos >= fileSize)
+			{
+			aReader.IorReadComplete(KErrNone);
+			}
+		}
+	else
+		{
+		aReader.IorReadComplete(KErrEof);
+		}
+	}
+
+void CIoFile::IowepWriteL(MIoWriter& aWriter)
+	{
+	HBufC* buf = HBufC::NewLC(aWriter.IowWriteLength());
+	TPtr bufPtr(buf->Des());
+	aWriter.IowWrite(bufPtr);
+
+	// Convert to UTF-8
+	HBufC8* narrowBuf = LtkUtils::Utf8L(*buf);
+	TInt err = iFile.Write(*narrowBuf);
+	delete narrowBuf;
+	aWriter.IowComplete(err);
+	CleanupStack::PopAndDestroy(buf);
+	}
+
+void CIoFile::IowepWriteCancel(MIoWriter&)
+	{
+	}
+
+CIoFile::CIoFile()
+	{
+	}
+
+void CIoFile::ConstructL(RFs& aFs, const TDesC& aName, RIoFile::TMode aMode)
+	{
+	LOG(CIoLog::Printf(_L("Attempting to create file 0x%08x (\"%S\")"), this, &aName));
+	switch (aMode)
+		{
+		case RIoFile::ERead:
+			{
+			User::LeaveIfError(iFile.Open(aFs, aName, EFileRead));
+			break;
+			}
+		case RIoFile::EOverwrite:
+			{
+			User::LeaveIfError(iFile.Replace(aFs, aName, EFileWrite));
+			break;
+			}
+		case RIoFile::EAppend:
+			{
+			TInt err = iFile.Open(aFs, aName, EFileWrite);
+			if (err == KErrNotFound)
+				{
+				err = iFile.Create(aFs, aName, EFileWrite);
+				}
+			User::LeaveIfError(err);
+			TInt pos = 0;
+			User::LeaveIfError(iFile.Seek(ESeekEnd, pos));
+			break;
+			}
+		default:
+			{
+			User::Leave(KErrNotSupported);
+			}
+		}
+	}
+