diff -r 2fb8b9db1c86 -r d55eb581a87c baseport/syborg/svphostfs/fs/svphostfsy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/svphostfs/fs/svphostfsy.h Tue Aug 04 10:28:23 2009 +0100 @@ -0,0 +1,202 @@ +/* +* Copyright (c) 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: Based on the test code under f32test\fsstress +* +*/ + +#if !defined(__SVPHOSTFSY_H__) +#define __SVPHOSTFSY_H__ + +#include +#include +#include +#include +#include +#include + +#include + +// +// Common constants used by both EFSRV and the filesystems +// + +const TUint KEntryAttIllegal=(KEntryAttVolume|KEntryAttDir); +const TUint KEntryAttModified=0x20000000; +const TUint KEntryAttMustBeFile=0x80000000; +const TInt KCurrentPosition=KMinTInt; + + +GLDEF_D const TInt KMaxParses=7; +GLDEF_D const TInt KHeapSize=0x2000; +GLREF_C void TurnAllocFailureOff(); +GLREF_C void TurnAllocFailureOn(); +GLREF_C void ReportCheckDiskFailure(TInt aRet); +GLREF_D RTest test; +GLREF_D TFileName gSessionPath; +GLREF_D TInt gAllocFailOff; +GLREF_D TInt gAllocFailOn; + +#if defined(_DEBUG) +#define SetAllocFailure(a) SetAllocFailure(a) +#else +#define SetAllocFailure(a) IsRomAddress(NULL) +#define KAllocFailureOn 0 +#define KAllocFailureOff 0 +#endif + +// Debug virtual host file service - uncomment define below +//#define SVPDBG +#ifdef SVPDBG +IMPORT_C TUint32 DebugRegister(); +#define DP(format...) { if (DebugRegister()&KFSYS) RDebug::Print(format);} +#else +#define DP(format...) +#endif + +#define SVP_HOST_FS_DEVICE() (((CSVPHostMountCB&)Mount()).Device()) +#define SVP_HOST_FS_DEVICE_ID 0xc51d0008 + +enum TPanic + { + EFileTimeToSystemTime, + EFileClose, + EFileCloseSetAttributes, + EDirClose, + EMapCouldNotConnect + }; + +// utility to convert file system times to TTime format +void fileTimeToTime(TUint32 t,TTime& aTime, TFileTimeType aType); + +// utility to produce a canonicalized pathname (i.e. with a drive letter) suitable to pass to the FS device. + +void CanonicalizePathname(const TDesC& aName, TInt aDrive, THostFileName& aHostName); + +class CSessionFs; + +class CSVPHostMountCB : public CMountCB + { +public: + CSVPHostMountCB(); + ~CSVPHostMountCB(); + void MountL(TBool aForceMount); + TInt ReMount(); + void Dismounted(); + void VolumeL(TVolumeInfo& aVolume) const; + void SetVolumeL(TDes& aName); + void MkDirL(const TDesC& aName); + void RmDirL(const TDesC& aName); + void DeleteL(const TDesC& aName); + void RenameL(const TDesC& anOldName,const TDesC& anNewName); + void ReplaceL(const TDesC& anOldName,const TDesC& anNewName); + void EntryL(const TDesC& aName,TEntry& anEntry) const; + void SetEntryL(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask); + void FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile); + void DirOpenL(const TDesC& aName,CDirCB* aDir); + void RawReadL(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt anOffset,const RMessagePtr2& aMessage) const; + void RawWriteL(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt anOffset,const RMessagePtr2& aMessage); + void ReadUidL(const TDesC& aName,TEntry& anEntry) const; + void GetShortNameL(const TDesC& aLongName,TDes& aShortName); + void GetLongNameL(const TDesC& aShortName,TDes& aLongName); + void IsFileInRom(const TDesC& aFileName,TUint8*& aFileStart); + void ReadSectionL(const TDesC& aName,TInt aPos,TAny* aTrg,TInt aLength,const RMessagePtr2& aMessage); + + inline const CSVPHostMountCB& Mount() const { return *this; } + inline RSVPHostFsDriver& Device() { return iDevice; } + + +private: + TBool IsRomDrive() const; + RSVPHostFsDriver iDevice; + }; + + +class RConsole; +class CSVPHostFileCB : public CFileCB + { +public: + CSVPHostFileCB(); + ~CSVPHostFileCB(); + void RenameL(const TDesC& aNewName); + void ReadL(TInt aPos,TInt& aLength,const TAny* aDes,const RMessagePtr2& aMessage); + void WriteL(TInt aPos,TInt& aLength,const TAny* aDes,const RMessagePtr2& aMessage); + TInt Address(TInt& aPos) const; + void SetSizeL(TInt aSize); + void SetEntryL(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask); + void FlushDataL(); + void FlushAllL(); + void CheckPos(TInt aPos); + void SetHandle(TUint aHandle) { iHandle = aHandle; } + TUint Handle() const { return iHandle; } +private: + TBool IsRomDrive() const; +private: + TInt iCurrentPos; + // TUint8* iFilePtr; + TUint iHandle; + }; + +class CSVPHostDirCB : public CDirCB + { +public: + CSVPHostDirCB(/*CSessionFs* aSession*/); + ~CSVPHostDirCB(); + void ReadL(TEntry& anEntry); + inline void SetFullName(const TDesC& aName) {iFullName.Set(aName,NULL,NULL);} + inline void SetHandle(TUint32 aHandle) { iHandle = aHandle; } + +private: + TBool MatchUid(); +public: + TEntry iEntry; +private: + TUint32 iHandle; + TParse iFullName; + }; + +class CSVPHostFormatCB : public CFormatCB + { +public: + CSVPHostFormatCB(/*CSessionFs* aSession*/); + ~CSVPHostFormatCB(); +public: + virtual void DoFormatStepL(); + }; + +class CSVPHostFileSystem : public CFileSystem + { +public: + CSVPHostFileSystem(); + ~CSVPHostFileSystem(); + TInt Install(); + TInt DefaultPath(TDes& aPath) const; + void DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const; +private: + CMountCB* NewMountL() const; + CFileCB* NewFileL() const; + CDirCB* NewDirL() const; + CFormatCB* NewFormatL() const; +public: + static CFileSystem* NewL(); + +public: + inline RSVPHostFsDriver& Device() { return iDevice; }; +private: + RSVPHostFsDriver iDevice; + TUint32 iDriveMap[DRIVE_MAP_SIZE]; + }; + +#endif + +