61 Represents the position of a directory entery in terms of a cluster and off set into it |
61 Represents the position of a directory entery in terms of a cluster and off set into it |
62 */ |
62 */ |
63 class TEntryPos |
63 class TEntryPos |
64 { |
64 { |
65 public: |
65 public: |
66 TEntryPos() {} |
66 TEntryPos() : iCluster(EOF_32Bit), iPos(0) {} |
67 TEntryPos(TInt aCluster,TUint aPos) : iCluster(aCluster), iPos(aPos) {} |
67 TEntryPos(TInt aCluster,TUint aPos) : iCluster(aCluster), iPos(aPos) {} |
68 |
68 |
69 inline TUint32 Cluster() const; |
69 inline TUint32 Cluster() const; |
70 inline TUint32 Pos() const; |
70 inline TUint32 Pos() const; |
71 inline TBool operator==(const TEntryPos& aRhs) const; |
71 inline TBool operator==(const TEntryPos& aRhs) const; |
|
72 inline void SetEndOfDir(); |
72 |
73 |
73 public: |
74 public: |
74 TInt iCluster; |
75 TInt iCluster; |
75 TUint iPos; |
76 TUint iPos; |
76 }; |
77 }; |
108 inline void ReleaseLock() const {iProxyDrive.LeaveCriticalSection();} |
109 inline void ReleaseLock() const {iProxyDrive.LeaveCriticalSection();} |
109 |
110 |
110 |
111 |
111 protected: |
112 protected: |
112 TDriveInterface(); |
113 TDriveInterface(); |
|
114 ~TDriveInterface() {Close();} |
|
115 |
|
116 //-- outlawed |
113 TDriveInterface(const TDriveInterface&); |
117 TDriveInterface(const TDriveInterface&); |
114 TDriveInterface& operator=(const TDriveInterface&); |
118 TDriveInterface& operator=(const TDriveInterface&); |
|
119 void* operator new(TUint); //-- disable creating objets of this class on the heap. |
|
120 void* operator new(TUint, void*); |
115 |
121 |
116 TBool Init(CFatMountCB* aMount); |
122 TBool Init(CFatMountCB* aMount); |
117 void Close(); |
123 void Close(); |
118 |
124 |
119 inline TBool NotifyUser() const; |
125 inline TBool NotifyUser() const; |
489 TInt OpenMountForWrite(); |
495 TInt OpenMountForWrite(); |
490 TInt IsFinalised(TBool& aFinalised); |
496 TInt IsFinalised(TBool& aFinalised); |
491 |
497 |
492 /** |
498 /** |
493 A wrapper around TDriveInterface providing its instantination and destruction. |
499 A wrapper around TDriveInterface providing its instantination and destruction. |
494 You must not create objects of this class, use DriveInterface() instead. |
500 You must not create objects of this class, use DriveInterface() method for obtaining the reference to the driver interface. |
495 */ |
501 */ |
496 class XDriveInterface: public TDriveInterface |
502 class XDriveInterface: public TDriveInterface |
497 { |
503 { |
498 public: |
504 public: |
499 XDriveInterface() : TDriveInterface() {} |
505 using TDriveInterface::Init; |
500 ~XDriveInterface() {Close();} |
|
501 TBool Init(CFatMountCB* aMount) {return TDriveInterface::Init(aMount);} |
|
502 }; |
506 }; |
503 |
507 |
504 |
508 |
505 public: |
509 public: |
506 |
510 |
536 inline TInt NumberOfFats() const; |
540 inline TInt NumberOfFats() const; |
537 inline TInt FatSizeInBytes() const; |
541 inline TInt FatSizeInBytes() const; |
538 inline TInt ClusterRelativePos(TInt aPos) const; |
542 inline TInt ClusterRelativePos(TInt aPos) const; |
539 inline TUint StartOfRootDirInBytes() const; |
543 inline TUint StartOfRootDirInBytes() const; |
540 inline TUint32 UsableClusters() const; |
544 inline TUint32 UsableClusters() const; |
|
545 inline TBool ClusterNumberValid(TUint32 aClusterNo) const; |
541 inline TBool IsBadCluster(TInt aCluster) const; |
546 inline TBool IsBadCluster(TInt aCluster) const; |
|
547 |
542 inline TBool IsRuggedFSys() const; |
548 inline TBool IsRuggedFSys() const; |
543 inline void SetRuggedFSys(TBool aVal); |
549 inline void SetRuggedFSys(TBool aVal); |
|
550 inline TUint32 AtomicWriteGranularityLog2() const; |
|
551 |
544 |
552 |
545 inline TInt RootIndicator() const; |
553 inline TInt RootIndicator() const; |
546 |
554 |
547 inline TBool IsRootDir(const TEntryPos &aEntry) const; |
555 inline TBool IsRootDir(const TEntryPos &aEntry) const; |
548 inline CAsyncNotifier* Notifier() const; |
556 inline CAsyncNotifier* Notifier() const; |
660 an array that holds short name candidates, prepared on initialisation. |
668 an array that holds short name candidates, prepared on initialisation. |
661 */ |
669 */ |
662 RArray<TShortName> iShortNameCandidates; |
670 RArray<TShortName> iShortNameCandidates; |
663 }; |
671 }; |
664 |
672 |
|
673 |
|
674 /** a helper class that describes a continuous chunk of diectory entries*/ |
|
675 class TEntrySetChunkInfo |
|
676 { |
|
677 public: |
|
678 inline TEntrySetChunkInfo(); |
|
679 inline TBool operator==(const TEntrySetChunkInfo& aRhs); |
|
680 |
|
681 //-- FAT entryset can't span more than 3 clusters/sectors |
|
682 enum {KMaxChunks = 3}; |
|
683 |
|
684 public: |
|
685 TEntryPos iEntryPos; ///< entryset chunk dir. starting position |
|
686 TUint iNumEntries; ///< number of entries in the chunk |
|
687 }; |
|
688 |
|
689 |
|
690 void DoEraseEntrySetChunkL(const TEntrySetChunkInfo& aEntrySetChunk); |
665 |
691 |
666 |
692 |
667 TBool DoRummageDirCacheL(TUint anAtt,TEntryPos& aStartEntryPos,TFatDirEntry& aStartEntry,TEntryPos& aDosEntryPos,TFatDirEntry& aDosEntry,TDes& aFileName, const TFindHelper& aAuxParam, XFileCreationHelper* aFileCreationHelper, const TLeafDirData& aLeafDir) const; |
693 TBool DoRummageDirCacheL(TUint anAtt,TEntryPos& aStartEntryPos,TFatDirEntry& aStartEntry,TEntryPos& aDosEntryPos,TFatDirEntry& aDosEntry,TDes& aFileName, const TFindHelper& aAuxParam, XFileCreationHelper* aFileCreationHelper, const TLeafDirData& aLeafDir) const; |
668 TBool DoFindL(const TDesC& aName,TUint anAtt,TEntryPos& aStartEntryPos,TFatDirEntry& aStartEntry,TEntryPos& aDosEntryPos,TFatDirEntry& aDosEntry,TDes& aFileName,TInt anError, XFileCreationHelper* aFileCreationHelper, const TLeafDirData& aLeafDirData) const; |
694 TBool DoFindL(const TDesC& aName,TUint anAtt,TEntryPos& aStartEntryPos,TFatDirEntry& aStartEntry,TEntryPos& aDosEntryPos,TFatDirEntry& aDosEntry,TDes& aFileName,TInt anError, XFileCreationHelper* aFileCreationHelper, const TLeafDirData& aLeafDirData) const; |
669 void FindEntryStartL(const TDesC& aName,TUint anAtt,TFatDirEntry& anEntry,TEntryPos& aPos, XFileCreationHelper* aFileCreationHelper) const; |
695 void FindEntryStartL(const TDesC& aName,TUint anAtt,TFatDirEntry& anEntry,TEntryPos& aPos, XFileCreationHelper* aFileCreationHelper) const; |