userlibandfileserver/fileserver/sfat32/inc/sl_std.h
branchRCL_3
changeset 42 a179b74831c9
parent 22 2f92ad2dc5db
child 43 c1f20ce4abcf
equal deleted inserted replaced
41:0ffb4e86fcc9 42:a179b74831c9
    90 
    90 
    91 public:
    91 public:
    92 
    92 
    93     //-- public interface to the local drive. Provides media driver's error handling (critical and non-critical user notifiers)
    93     //-- public interface to the local drive. Provides media driver's error handling (critical and non-critical user notifiers)
    94     //-- and thread-safety if required.
    94     //-- and thread-safety if required.
    95 	TInt ReadNonCritical(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset) const;
    95 	TInt ReadNonCritical(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset, TUint aFlag) const;
    96 	TInt ReadNonCritical(TInt64 aPos,TInt aLength,TDes8& aTrg) const;
    96 	TInt ReadNonCritical(TInt64 aPos,TInt aLength,TDes8& aTrg) const;
    97 	TInt ReadCritical(TInt64 aPos,TInt aLength,TDes8& aTrg) const;
    97 	TInt ReadCritical(TInt64 aPos,TInt aLength,TDes8& aTrg) const;
    98 	
    98 	
    99     TInt WriteCritical(TInt64 aPos,const TDesC8& aSrc);
    99     TInt WriteCritical(TInt64 aPos,const TDesC8& aSrc);
   100     TInt WriteNonCritical(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset);
   100     TInt WriteNonCritical(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset, TUint aFlag);
   101 	
   101 	
   102     TInt GetLastErrorInfo(TDes8& aErrorInfo) const;
   102     TInt GetLastErrorInfo(TDes8& aErrorInfo) const;
   103 
   103 
   104     //-- lock the mutex guarding CProxyDrive interface in order to be sure that no other thread can access it.
   104     //-- lock the mutex guarding CProxyDrive interface in order to be sure that no other thread can access it.
   105     //-- The thread that calls this method may be suspended until another signals the mutex, i.e. leaves the critical section.
   105     //-- The thread that calls this method may be suspended until another signals the mutex, i.e. leaves the critical section.
   146             
   146             
   147         inline void EnterCriticalSection() const {iLock.Wait();}
   147         inline void EnterCriticalSection() const {iLock.Wait();}
   148         inline void LeaveCriticalSection() const {iLock.Signal();}
   148         inline void LeaveCriticalSection() const {iLock.Signal();}
   149 
   149 
   150         //-- methods' wrappers that are used by TDriveInterface
   150         //-- methods' wrappers that are used by TDriveInterface
   151         TInt Read(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset) const;
   151         TInt Read(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset, TUint aFlag) const;
   152         TInt Read(TInt64 aPos,TInt aLength,TDes8& aTrg) const;
   152         TInt Read(TInt64 aPos,TInt aLength,TDes8& aTrg) const;
   153         TInt Write(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset);
   153         TInt Write(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset, TUint aFlag);
   154         TInt Write(TInt64 aPos, const TDesC8& aSrc);
   154         TInt Write(TInt64 aPos, const TDesC8& aSrc);
   155         TInt GetLastErrorInfo(TDes8& aErrorInfo) const;
   155         TInt GetLastErrorInfo(TDes8& aErrorInfo) const;
   156         TInt Caps(TDes8& anInfo) const;
   156         TInt Caps(TDes8& anInfo) const;
   157 
   157 
   158      private:
   158      private:
   190 
   190 
   191     //-----------------------------------------------------------------
   191     //-----------------------------------------------------------------
   192     //-- pure virtual interface
   192     //-- pure virtual interface
   193     virtual TUint32 ReadL(TUint32 aFatIndex) const = 0;
   193     virtual TUint32 ReadL(TUint32 aFatIndex) const = 0;
   194 	virtual void WriteL(TUint32 aFatIndex, TUint32 aValue) = 0;
   194 	virtual void WriteL(TUint32 aFatIndex, TUint32 aValue) = 0;
   195 	virtual TInt64 DataPositionInBytes(TUint32 aCluster) const = 0;
   195 	virtual TInt64 DataPositionInBytesL(TUint32 aCluster) const = 0;
   196     virtual void MountL(const TMountParams& aMountParam) = 0;
   196     virtual void MountL(const TMountParams& aMountParam) = 0;
   197     //-----------------------------------------------------------------
   197     //-----------------------------------------------------------------
   198     //-- just virtual interface
   198     //-- just virtual interface
   199     
   199     
   200     virtual void Dismount(TBool /*aDiscardDirtyData*/) {}
   200     virtual void Dismount(TBool /*aDiscardDirtyData*/) {}
   264     
   264     
   265 
   265 
   266     inline TBool ClusterNumberValid(TUint32 aClusterNo) const;
   266     inline TBool ClusterNumberValid(TUint32 aClusterNo) const;
   267 
   267 
   268     typedef RArray<TUint> RClusterArray;
   268     typedef RArray<TUint> RClusterArray;
   269     void DoFreedClustersNotify(RClusterArray &aFreedClusters);
   269     void DoFreedClustersNotifyL(RClusterArray &aFreedClusters);
   270 
   270 
   271 
   271 
   272 protected:
   272 protected:
   273 	
   273 	
   274     CFatMountCB* iOwner;            ///< Owning file system mount
   274     CFatMountCB* iOwner;            ///< Owning file system mount
   334 	@param aLength	Length in bytes of read
   334 	@param aLength	Length in bytes of read
   335 	@param aTrg		Pointer to the data descriptor, i.e. (const TAny*)(&TDes8)
   335 	@param aTrg		Pointer to the data descriptor, i.e. (const TAny*)(&TDes8)
   336 	@param aMessage	Refrence to server message from request
   336 	@param aMessage	Refrence to server message from request
   337 	@param anOffset	Offset into read data to write
   337 	@param anOffset	Offset into read data to write
   338 	*/
   338 	*/
   339 	virtual void ReadL(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset) const = 0;
   339 	virtual void ReadL(TInt64 aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2 &aMessage,TInt anOffset, TUint aFlag) const = 0;
   340 
   340 
   341 	/**
   341 	/**
   342 	Disk write function
   342 	Disk write function
   343 
   343 
   344 	@param aPos		Media position in bytes
   344 	@param aPos		Media position in bytes
   345 	@param aLength	Length in bytes of write
   345 	@param aLength	Length in bytes of write
   346 	@param aTrg		Pointer to the data descriptor, i.e. (const TAny*)(&TDes8)
   346 	@param aTrg		Pointer to the data descriptor, i.e. (const TAny*)(&TDes8)
   347 	@param aMessage	Refrence to server message from request, contains data
   347 	@param aMessage	Refrence to server message from request, contains data
   348 	@param anOffset	Offset into write data to use in write
   348 	@param anOffset	Offset into write data to use in write
   349 	*/
   349 	*/
   350 	virtual void WriteL(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset) = 0;
   350 	virtual void WriteL(TInt64 aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2 &aMessage,TInt anOffset, TUint aFlag) = 0;
   351 
   351 
   352     
   352     
   353     virtual inline MWTCacheInterface* DirCacheInterface();
   353     virtual inline MWTCacheInterface* DirCacheInterface();
   354 
   354 
   355 
   355 
   568 	void WriteDirEntryL(const TEntryPos& aPos,const TFatDirEntry& aDirEntry);
   568 	void WriteDirEntryL(const TEntryPos& aPos,const TFatDirEntry& aDirEntry);
   569 
   569 
   570     void DirReadL(const TEntryPos& aPos,TInt aLength,TDes8& aDes) const;
   570     void DirReadL(const TEntryPos& aPos,TInt aLength,TDes8& aDes) const;
   571     void DirWriteL(const TEntryPos& aPos,const TDesC8& aDes);
   571     void DirWriteL(const TEntryPos& aPos,const TDesC8& aDes);
   572 
   572 
   573 	void ReadFromClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2& aMessage,TInt anOffset) const;
   573 	void ReadFromClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2& aMessage,TInt anOffset, TUint aFlag) const;
   574     void WriteToClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2& aMessage,TInt anOffset, TUint& aBadcluster, TUint& aGoodcluster);
   574     void WriteToClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2& aMessage,TInt anOffset, TUint& aBadcluster, TUint& aGoodcluster, TUint aFlag);
   575 	
   575 	
   576 	void MoveToNextEntryL(TEntryPos& aPos) const;
   576 	void MoveToNextEntryL(TEntryPos& aPos) const;
   577 	void MoveToDosEntryL(TEntryPos& aPos,TFatDirEntry& anEntry) const;
   577 	void MoveToDosEntryL(TEntryPos& aPos,TFatDirEntry& anEntry) const;
   578 	void EnlargeL(TInt aSize);
   578 	void EnlargeL(TInt aSize);
   579 	void ReduceSizeL(TInt aPos,TInt aLength);
   579 	void ReduceSizeL(TInt aPos,TInt aLength);
   701 
   701 
   702 	void CheckFatForLoopsL(const TFatDirEntry& anEntry) const;
   702 	void CheckFatForLoopsL(const TFatDirEntry& anEntry) const;
   703 	void DoCheckFatForLoopsL(TUint32 aCluster, TUint32& aPreviousCluster, TUint32& aChangePreviousCluster, TUint32& aCount) const;
   703 	void DoCheckFatForLoopsL(TUint32 aCluster, TUint32& aPreviousCluster, TUint32& aChangePreviousCluster, TUint32& aCount) const;
   704     void InitializeL(const TLocalDriveCaps& aLocDrvCaps, TBool aIgnoreFSInfo=EFalse);
   704     void InitializeL(const TLocalDriveCaps& aLocDrvCaps, TBool aIgnoreFSInfo=EFalse);
   705 
   705 
   706 	void DoReadFromClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2& aMessage,TInt anOffset) const;
   706 	void DoReadFromClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aTrg,const RMessagePtr2& aMessage,TInt anOffset, TUint aFlag) const;
   707     void DoWriteToClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2& aMessage,TInt anOffset, TUint aLastcluster, TUint& aBadcluster, TUint& aGoodcluster);
   707     void DoWriteToClusterListL(TEntryPos& aPos,TInt aLength,const TAny* aSrc,const RMessagePtr2& aMessage,TInt anOffset, TUint aLastcluster, TUint& aBadcluster, TUint& aGoodcluster, TUint aFlag);
   708 
   708 
   709 	TBool IsUniqueNameL(const TShortName& aName, TUint32 aDirCluster);
   709 	TBool IsUniqueNameL(const TShortName& aName, TUint32 aDirCluster);
   710 	TBool FindShortNameL(const TShortName& aName,TEntryPos& anEntryPos);
   710 	TBool FindShortNameL(const TShortName& aName,TEntryPos& anEntryPos);
   711 	void ReplaceClashingNameL(const TShortName& aNewName,const TEntryPos& anEntryPos);
   711 	void ReplaceClashingNameL(const TShortName& aNewName,const TEntryPos& anEntryPos);
   712     TBool GenerateShortNameL(TUint32 aDirCluster,const TDesC& aLongName,TShortName& aShortName, TBool aForceRandomize=EFalse);
   712     TBool GenerateShortNameL(TUint32 aDirCluster,const TDesC& aLongName,TShortName& aShortName, TBool aForceRandomize=EFalse);
   860     void FlushStartClusterL();
   860     void FlushStartClusterL();
   861 	TInt SeekToPosition(TUint aNewCluster, TUint aClusterOffset);
   861 	TInt SeekToPosition(TUint aNewCluster, TUint aClusterOffset);
   862 	void SetSeekIndexValueL(TUint aFileCluster,TUint aStoredCluster);
   862 	void SetSeekIndexValueL(TUint aFileCluster,TUint aStoredCluster);
   863 	void ResizeIndex(TInt aNewMult,TUint aNewSize);
   863 	void ResizeIndex(TInt aNewMult,TUint aNewSize);
   864 	TInt CalcSeekIndexSize(TUint aSize);
   864 	TInt CalcSeekIndexSize(TUint aSize);
   865 	TBool IsSeekBackwards(TUint aPos);
       
   866 	void ClearIndex(TUint aNewSize);
   865 	void ClearIndex(TUint aNewSize);
   867 	void DoSetSizeL(TUint aSize, TBool aForceCachesFlush);
   866 	void DoSetSizeL(TUint aSize, TBool aForceCachesFlush);
   868 	void WriteFileSizeL(TUint aSize);
   867 	void WriteFileSizeL(TUint aSize);
   869 
   868 
   870     //----------------------------
   869     //----------------------------