diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/f32file.h --- a/epoc32/include/f32file.h Wed Mar 31 12:27:01 2010 +0100 +++ b/epoc32/include/f32file.h Wed Mar 31 12:33:34 2010 +0100 @@ -1,9 +1,9 @@ // Copyright (c) 1995-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 "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +// under the terms of the License "Eclipse Public License v1.0" // which accompanies this distribution, and is available -// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +// at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. @@ -13,8 +13,6 @@ // Description: // - - /** @file @publishedAll @@ -28,11 +26,21 @@ #include <e32base.h> #endif +#ifndef SYMBIAN_ENABLE_PUBLIC_PLATFORM_HEADER_SPLIT +// Old implementation including platform e32svr.h (which includes the several other platform headers)... #if !defined(__E32SVR_H__) #include <e32svr.h> #endif - #include <e32ldr.h> +#else +// New implementation including only the public headers needed for f32file.h... +#include <e32ldr.h> +// And the public headers previously included via e32svr.h but otherwise not needed for f32file.h... +#include <e32def.h> +#include <e32event.h> +#include <e32debug.h> +#include <e32keys.h> +#endif /** @@ -132,6 +140,15 @@ @publishedAll @released +The maximum number of available proxy drives. +*/ +const TInt KMaxProxyDrives=KMaxDrives-KMaxLocalDrives; + + +/** +@publishedAll +@released + Defines a modifiable buffer descriptor to contain a drive list. The descriptor has maximum length KMaxDrives, sufficient to contain @@ -347,7 +364,7 @@ 22 - File System Specific 23 - File System Specific - 24 - Reserved + 24 - KEntryAttPacked 25 - Reserved 26 - Reserved 27 - KEntryAttMatchExclude @@ -479,40 +496,27 @@ /** -@publishedPartner +@publishedAll @released -Bit mask used when evaluating whether or not a session gets notified of a -debug event. - -@see DebugNotifySessions +Indicates that a TEntry (that is generally returned from a TEntryArray) is +stored in packed format where the iSizeHigh and iReserved fields follow the +valid characters of the name string. Before accessing the aforementioned +members, the entry must be unpacked. + */ -const TUint KDebugNotifyMask=0xFF000000; // Reserved for debug notification +const TUint KEntryAttPacked = 0x01000000; + /** - +@publishedAll +@released */ const TUint KMaxMapsPerCall = 0x8; -/** -@publishedPartner -@released - -The default blocksize value. - -This value is returned when you query the blocksize for a media type that does not -support the concept of 'block' (e.g. NOR flash media). - -@see TVolumeIOParamInfo -*/ -const TUint KDefaultVolumeBlockSize = 512; - - - - enum TNotifyType /** @publishedAll @@ -577,39 +581,35 @@ ENotifyDisk=0x40 }; +/** + @publishedAll + @released + + Notification modes for safe media removal notification API + + @see RFs::NotifyDismount +*/ enum TNotifyDismountMode + { + /** Used by a client to register for notification of pending dismount. This is the default behaviour for RFs::NotifyDismount*/ + EFsDismountRegisterClient=0x01, + + /** + Used for graceful file system dismounting with notifying clients of a pending dismount. + If all clients have responded by RFs::AllowDismount(), the file system will be dismounted. + */ + EFsDismountNotifyClients=0x02, + + /** Used to forcibly dismount the file system without notifying clients. */ + EFsDismountForceDismount=0x03, + }; + + +enum TFileCacheFlags /** @publishedAll @released -Notification modes for safe media removal notification API - -@see RFs::NotifyDismount -*/ - { - /** - Used by a client to register for notification of pending dismount. - - This is the default behaviour for RFs::NotifyDismount - */ - EFsDismountRegisterClient=0x01, - - /** - Used to notify clients of a pending dismount. - */ - EFsDismountNotifyClients=0x02, - - /** - Used to forcibly dismount the file system without notifying clients. - */ - EFsDismountForceDismount=0x03, - }; - - -enum TFileCacheFlags -/** -@publishedPartner -@released - Flags used to enable file server drive-specific caching */ { @@ -644,34 +644,8 @@ EFileCacheWriteOn = 0x20, }; - -enum TStartupConfigurationCmd /** -@publishedPartner -@released - -Command used to set file server configuration at startup. - -@see RFs::SetStartupConfiguration() -*/ - { - /** - Set loader thread priority - */ - ELoaderPriority, - - /** - Set TDrive flags. Value should be ETrue or EFalse - */ - ESetRugged, - /** - Command upper boundary - */ - EMaxStartupConfigurationCmd - }; - -/** -@publishedPartner +@publishedAll @released Commands to query specific volume information. @@ -777,11 +751,19 @@ */ TInt iRecWriteBufSize; + + /** + The maximum file size that is supported by the file system mounted on this volume. + Not all file system may provide this parameter; The value KMaxTUint64 (0xffffffffffffffff) means that this particular file system hasn't + provided this information. + */ + TUint64 iMaxSupportedFileSize; + private: /* Reserved space for future use */ - TInt iReserved[4]; + TInt iReserved[2]; }; enum TDriveNumber @@ -1145,7 +1127,21 @@ /** Disables read ahead. */ - EFileReadAheadOff =0x00010000 + EFileReadAheadOff =0x00010000, + + /** + Enable delete on close + */ + EDeleteOnClose =0x00020000, + + /** + Enables operations on large files. + + @internalTechnology + + */ + EFileBigFile =0x00040000 + }; @@ -1174,43 +1170,67 @@ { /** Indicates a high density floppy disk to be formatted. + + Obsolete. + + Can be ORed with EFullFormat or EQuickFormat, but does not + have any effect. */ EHighDensity, /** - Indicates a standard floppy disk to be formatted. + Indicates a low density floppy disk to be formatted. + + Obsolete. + + Can be ORed with EFullFormat or EQuickFormat, but does not + have any effect. */ ELowDensity, /** - Performs a full format, erasing existing content and resetting the FAT - and root directory. + Performs a full format, erasing whole media content and creating + new file system layout. - This is the default, and can be ORed with bit EHighDensity or ELowDensity. + This is the default mode. */ EFullFormat=0, /** - Does the minimum required to format the device, only resetting the FAT - and root directory. - - This is the default, and can be ORed with bit EHighDensity or ELowDensity. + Performs a quick media format, erasing only required minimum media content. + For example, for FAT file system it resets FAT and root directory content. + Also preserves bad sectors if there are some on the volume. */ EQuickFormat=0x100, /** - Indicates a custom formatting mode. + Indicates a custom formatting mode. In this mode some optional file system + specific parameters may be passed to RFormat::Open(). + + @see TLDFormatInfo + @see TInt RFormat::Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount, const TDesC8 &anInfo); */ ESpecialFormat=0x200, /** Forced erase of locked media */ - EForceErase=0x400 + EForceErase=0x400, + + /** + This flag enables formatting the volume even if it has files or directories opened on it. + If this flag is specified, the volume will be forcedly dismounted before performing media formatting. + + Even with this flag the RFormat::Open() can fail with KErrInUse in following cases: + 1. if there are clamped files on the volume. + 2. there are opened "disk access" objects, like RFormat or RRawDisk on the volume. + */ + EForceFormat = 0x800, + }; @@ -1256,6 +1276,8 @@ }; /** +@publishedAll +@released */ class TBlockMapEntry : public TBlockMapEntryBase @@ -1267,7 +1289,9 @@ }; /** - +@publishedAll +@released + */ typedef TBuf8<KMaxMapsPerCall*sizeof(TBlockMapEntry)> TBlockArrayDes; @@ -1277,7 +1301,8 @@ }; /** - +@publishedAll +@released */ enum TBlockMapUsage { @@ -1327,6 +1352,13 @@ inline TBool IsUidPresent(TUid aUid) const; inline TBool IsTypeValid() const; inline TUid MostDerivedUid() const; + IMPORT_C TInt64 FileSize() const; + inline void SetFileSize(TInt64 aFileSize); + +private: + inline void Copy(const TEntry& aEntry); + inline void Unpack(); + public: /** The individual bits within this byte indicate which attributes @@ -1368,10 +1400,11 @@ TBufC<KMaxFileName> iName; private: + TUint32 iSizeHigh; /** Reserved for future expansion */ - TUint32 iReserved[2]; + TUint32 iReserved; }; @@ -1404,6 +1437,7 @@ TBuf8<KEntryArraySize> iBuf; friend class RDir; friend class RFs; + friend class TRawEntryArray; }; @@ -1424,14 +1458,14 @@ The type of media mounted on the drive. */ TMediaType iType; - - + + /** Indicates whether the drive supports a battery, and if so, its state. */ TBatteryState iBattery; - - + + /** The drive attributes. @@ -1440,7 +1474,8 @@ @see KDriveAttRedirected @see KDriveAttSubsted @see KDriveAttInternal - @see KDriveAttRemovable + @see KDriveAttRemovable + @see KDriveAttExternal */ TUint iDriveAtt; @@ -1456,11 +1491,12 @@ @see KMediaAttLocked */ TUint iMediaAtt; -private: + + /** - Reserved for future expansion + The type of interface used to connect to the media. */ - TUint32 iReserved; + TConnectionBusType iConnectionBusType; }; @@ -1531,7 +1567,7 @@ @see TFileCacheFlags */ TFileCacheFlags iFileCacheFlags; - + /** @prototype @internalTechnology @@ -1786,7 +1822,16 @@ }; +#if defined SYMBIAN_PRIVATE_EFSRV + #define EFSRV_EXPORT_C + #define EFSRV_IMPORT_C +#else + #define EFSRV_EXPORT_C EXPORT_C + #define EFSRV_IMPORT_C IMPORT_C +#endif +// forward declarations from e32ldr_private.h +class RFileClamp; class RFs : public RSessionBase /** @@ -1860,103 +1905,106 @@ */ { public: - IMPORT_C TInt Connect(TInt aMessageSlots=KFileServerDefaultMessageSlots); - IMPORT_C TVersion Version() const; - IMPORT_C TInt AddFileSystem(const TDesC& aFileName) const; - IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const; - IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive, TBool aIsSync) const; - IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,TInt aDrive,TBool& aIsMountSuccess) const; - IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive); - IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive, TBool aIsSync); - IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive,TBool& aIsMountSuccess) const; - IMPORT_C TInt DismountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const; - IMPORT_C TInt RemoveFileSystem(const TDesC& aFileSystemName) const; - IMPORT_C TInt FileSystemName(TDes& aName,TInt aDrive) const; - IMPORT_C TInt AddExtension(const TDesC& aFileName); - IMPORT_C TInt MountExtension(const TDesC& aExtensionName,TInt aDrive); - IMPORT_C TInt DismountExtension(const TDesC& aExtensionName,TInt aDrive); - IMPORT_C TInt RemoveExtension(const TDesC& aExtensionName); - IMPORT_C TInt ExtensionName(TDes& aExtensionName,TInt aDrive,TInt aPos); - IMPORT_C TInt RemountDrive(TInt aDrive,const TDesC8* aMountInfo=NULL,TUint aFlags=0); - IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat); - IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat,const TDesC& aPathName); - IMPORT_C void NotifyChangeCancel(); - IMPORT_C void NotifyChangeCancel(TRequestStatus& aStat); - IMPORT_C void NotifyDiskSpace(TInt64 aThreshold,TInt aDrive,TRequestStatus& aStat); - IMPORT_C void NotifyDiskSpaceCancel(TRequestStatus& aStat); - IMPORT_C void NotifyDiskSpaceCancel(); - IMPORT_C TInt DriveList(TDriveList& aList) const; - IMPORT_C TInt DriveList(TDriveList& aList, TUint aFlags) const; - IMPORT_C TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const; - IMPORT_C TInt Volume(TVolumeInfo& aVol,TInt aDrive=KDefaultDrive) const; - IMPORT_C void Volume(TVolumeInfo& aVol,TInt aDrive, TRequestStatus& aStat) const; - IMPORT_C TInt SetVolumeLabel(const TDesC& aName,TInt aDrive=KDefaultDrive); - IMPORT_C TInt Subst(TDes& aPath,TInt aDrive=KDefaultDrive) const; - IMPORT_C TInt SetSubst(const TDesC& aPath,TInt aDrive=KDefaultDrive); - IMPORT_C TInt RealName(const TDesC& aName,TDes& aResult) const; - IMPORT_C TInt GetMediaSerialNumber(TMediaSerialNumber& aSerialNum, TInt aDrive); - IMPORT_C TInt SessionPath(TDes& aPath) const; - IMPORT_C TInt SetSessionPath(const TDesC& aPath); - IMPORT_C TInt Parse(const TDesC& aName,TParse& aParse) const; - IMPORT_C TInt Parse(const TDesC& aName,const TDesC& aRelated,TParse& aParse) const; - IMPORT_C TInt MkDir(const TDesC& aPath); - IMPORT_C TInt MkDirAll(const TDesC& aPath); - IMPORT_C TInt RmDir(const TDesC& aPath); - IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const; - IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) const; - IMPORT_C TInt GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) const; - IMPORT_C TInt Delete(const TDesC& aName); - IMPORT_C TInt Rename(const TDesC& anOldName,const TDesC& aNewName); - IMPORT_C TInt Replace(const TDesC& anOldName,const TDesC& aNewName); - IMPORT_C TInt Att(const TDesC& aName,TUint& aAttValue) const; - IMPORT_C TInt SetAtt(const TDesC& aName,TUint aSetAttMask,TUint aClearAttMask); - IMPORT_C TInt Modified(const TDesC& aName,TTime& aTime) const; - IMPORT_C TInt SetModified(const TDesC& aName,const TTime& aTime); - IMPORT_C TInt Entry(const TDesC& aName,TEntry& anEntry) const; - IMPORT_C TInt SetEntry(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask); - IMPORT_C TInt ReadFileSection(const TDesC& aName,TInt aPos,TDes8& aDes,TInt aLength) const; - IMPORT_C static TBool IsValidDrive(TInt aDrive); - IMPORT_C static TInt CharToDrive(TChar aChar,TInt& aDrive); - IMPORT_C static TInt DriveToChar(TInt aDrive,TChar& aChar); - IMPORT_C static TBool IsRomAddress(TAny* aAny); - IMPORT_C static TDriveNumber GetSystemDrive(); - IMPORT_C static TChar GetSystemDriveChar(); - IMPORT_C TInt SetSystemDrive(TDriveNumber aSystemDrive); - IMPORT_C void ResourceCountMarkStart() const; - IMPORT_C void ResourceCountMarkEnd() const; - IMPORT_C TInt ResourceCount() const; - IMPORT_C TInt IsFileOpen(const TDesC& aFile,TBool& anAnswer) const; - IMPORT_C TInt CheckDisk(const TDesC& aDrive) const; - IMPORT_C TInt ScanDrive(const TDesC& aDrive) const; - IMPORT_C TInt GetShortName(const TDesC& aLongName,TDes& aShortName) const; - IMPORT_C TInt GetLongName(const TDesC& aShortName,TDes& aLongName) const; - IMPORT_C TBool GetNotifyUser(); - IMPORT_C void SetNotifyUser(TBool aValue); - IMPORT_C TUint8* IsFileInRom(const TDesC& aFileName) const; - IMPORT_C TBool IsValidName(const TDesC& anEntryName) const; - IMPORT_C TBool IsValidName(const TDesC& aFileName,TText& aBadChar) const; - IMPORT_C TInt GetDriveName(TInt aDrive,TDes& aDriveName) const; - IMPORT_C TInt SetDriveName(TInt aDrive,const TDesC& aDriveName); - IMPORT_C TInt LoaderHeapFunction(TInt aFunction, TAny *aArg1=NULL, TAny *aArg2=NULL); + EFSRV_IMPORT_C TInt Connect(TInt aMessageSlots=KFileServerDefaultMessageSlots); + EFSRV_IMPORT_C void Close(); + EFSRV_IMPORT_C TVersion Version() const; + EFSRV_IMPORT_C TInt AddFileSystem(const TDesC& aFileName) const; + EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const; + EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive, TBool aIsSync) const; + EFSRV_IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,TInt aDrive,TBool& aIsMountSuccess) const; + EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive); + EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive, TBool aIsSync); + EFSRV_IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive,TBool& aIsMountSuccess) const; + EFSRV_IMPORT_C TInt DismountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const; + EFSRV_IMPORT_C TInt RemoveFileSystem(const TDesC& aFileSystemName) const; + EFSRV_IMPORT_C TInt FileSystemName(TDes& aName,TInt aDrive) const; + EFSRV_IMPORT_C TInt AddExtension(const TDesC& aFileName); + EFSRV_IMPORT_C TInt MountExtension(const TDesC& aExtensionName,TInt aDrive); + EFSRV_IMPORT_C TInt DismountExtension(const TDesC& aExtensionName,TInt aDrive); + EFSRV_IMPORT_C TInt RemoveExtension(const TDesC& aExtensionName); + EFSRV_IMPORT_C TInt ExtensionName(TDes& aExtensionName,TInt aDrive,TInt aPos); + EFSRV_IMPORT_C TInt RemountDrive(TInt aDrive,const TDesC8* aMountInfo=NULL,TUint aFlags=0); + EFSRV_IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat); + EFSRV_IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat,const TDesC& aPathName); + EFSRV_IMPORT_C void NotifyChangeCancel(); + EFSRV_IMPORT_C void NotifyChangeCancel(TRequestStatus& aStat); + EFSRV_IMPORT_C void NotifyDiskSpace(TInt64 aThreshold,TInt aDrive,TRequestStatus& aStat); + EFSRV_IMPORT_C void NotifyDiskSpaceCancel(TRequestStatus& aStat); + EFSRV_IMPORT_C void NotifyDiskSpaceCancel(); + EFSRV_IMPORT_C TInt DriveList(TDriveList& aList) const; + EFSRV_IMPORT_C TInt DriveList(TDriveList& aList, TUint aFlags) const; + EFSRV_IMPORT_C TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const; + EFSRV_IMPORT_C TInt Volume(TVolumeInfo& aVol,TInt aDrive=KDefaultDrive) const; + EFSRV_IMPORT_C void Volume(TVolumeInfo& aVol,TInt aDrive, TRequestStatus& aStat) const; + EFSRV_IMPORT_C TInt SetVolumeLabel(const TDesC& aName,TInt aDrive=KDefaultDrive); + EFSRV_IMPORT_C TInt Subst(TDes& aPath,TInt aDrive=KDefaultDrive) const; + EFSRV_IMPORT_C TInt SetSubst(const TDesC& aPath,TInt aDrive=KDefaultDrive); + EFSRV_IMPORT_C TInt RealName(const TDesC& aName,TDes& aResult) const; + EFSRV_IMPORT_C TInt GetMediaSerialNumber(TMediaSerialNumber& aSerialNum, TInt aDrive); + EFSRV_IMPORT_C TInt SessionPath(TDes& aPath) const; + EFSRV_IMPORT_C TInt SetSessionPath(const TDesC& aPath); + EFSRV_IMPORT_C TInt Parse(const TDesC& aName,TParse& aParse) const; + EFSRV_IMPORT_C TInt Parse(const TDesC& aName,const TDesC& aRelated,TParse& aParse) const; + EFSRV_IMPORT_C TInt MkDir(const TDesC& aPath); + EFSRV_IMPORT_C TInt MkDirAll(const TDesC& aPath); + EFSRV_IMPORT_C TInt RmDir(const TDesC& aPath); + EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const; + EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) const; + EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) const; + EFSRV_IMPORT_C TInt Delete(const TDesC& aName); + EFSRV_IMPORT_C TInt Rename(const TDesC& anOldName,const TDesC& aNewName); + EFSRV_IMPORT_C TInt Replace(const TDesC& anOldName,const TDesC& aNewName); + EFSRV_IMPORT_C TInt Att(const TDesC& aName,TUint& aAttValue) const; + EFSRV_IMPORT_C TInt SetAtt(const TDesC& aName,TUint aSetAttMask,TUint aClearAttMask); + EFSRV_IMPORT_C TInt Modified(const TDesC& aName,TTime& aTime) const; + EFSRV_IMPORT_C TInt SetModified(const TDesC& aName,const TTime& aTime); + EFSRV_IMPORT_C TInt Entry(const TDesC& aName,TEntry& anEntry) const; + EFSRV_IMPORT_C TInt SetEntry(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask); +private: + EFSRV_IMPORT_C TInt ReadFileSection_RESERVED(const TDesC& aName,TInt aPos,TDes8& aDes,TInt aLength) const; +public: + EFSRV_IMPORT_C static TBool IsValidDrive(TInt aDrive); + EFSRV_IMPORT_C static TInt CharToDrive(TChar aChar,TInt& aDrive); + EFSRV_IMPORT_C static TInt DriveToChar(TInt aDrive,TChar& aChar); + EFSRV_IMPORT_C static TBool IsRomAddress(TAny* aAny); + EFSRV_IMPORT_C static TDriveNumber GetSystemDrive(); + EFSRV_IMPORT_C static TChar GetSystemDriveChar(); + EFSRV_IMPORT_C TInt SetSystemDrive(TDriveNumber aSystemDrive); + EFSRV_IMPORT_C void ResourceCountMarkStart() const; + EFSRV_IMPORT_C void ResourceCountMarkEnd() const; + EFSRV_IMPORT_C TInt ResourceCount() const; + EFSRV_IMPORT_C TInt IsFileOpen(const TDesC& aFile,TBool& anAnswer) const; + EFSRV_IMPORT_C TInt CheckDisk(const TDesC& aDrive) const; + EFSRV_IMPORT_C TInt ScanDrive(const TDesC& aDrive) const; + EFSRV_IMPORT_C TInt GetShortName(const TDesC& aLongName,TDes& aShortName) const; + EFSRV_IMPORT_C TInt GetLongName(const TDesC& aShortName,TDes& aLongName) const; + EFSRV_IMPORT_C TBool GetNotifyUser(); + EFSRV_IMPORT_C void SetNotifyUser(TBool aValue); + EFSRV_IMPORT_C TUint8* IsFileInRom(const TDesC& aFileName) const; + EFSRV_IMPORT_C TBool IsValidName(const TDesC& anEntryName) const; + EFSRV_IMPORT_C TBool IsValidName(const TDesC& aFileName,TText& aBadChar) const; + EFSRV_IMPORT_C TInt GetDriveName(TInt aDrive,TDes& aDriveName) const; + EFSRV_IMPORT_C TInt SetDriveName(TInt aDrive,const TDesC& aDriveName); + EFSRV_IMPORT_C TInt LoaderHeapFunction(TInt aFunction, TAny *aArg1=NULL, TAny *aArg2=NULL); IMPORT_C TInt SetErrorCondition(TInt anError,TInt aCount=0); - IMPORT_C TInt SetDebugRegister(TInt aVal); - IMPORT_C TInt SetAllocFailure(TInt aAllocNum); - IMPORT_C void DebugNotify(TInt aDrive,TUint aNotifyType,TRequestStatus& aStat); - IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand); - IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1); - IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1,TDes8& aParam2); - IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TAny* aParam1,TAny* aParam2); - IMPORT_C TInt LockDrive(TInt aDrv, const TMediaPassword &aOld, const TMediaPassword &aNew, TBool aStr); - IMPORT_C TInt UnlockDrive(TInt aDrv, const TMediaPassword &Pswd, TBool aStr); - IMPORT_C TInt ClearPassword(TInt aDrv, const TMediaPassword &aPswd); - IMPORT_C TInt ErasePassword(TInt aDrv); - IMPORT_C TInt SetSessionToPrivate(TInt aDrive); - IMPORT_C TInt PrivatePath(TDes& aPath); - IMPORT_C TInt CreatePrivatePath(TInt aDrive); - IMPORT_C void StartupInitComplete(TRequestStatus& aStat); - IMPORT_C TInt SetLocalDriveMapping(const TDesC8& aMapping); - - IMPORT_C TInt FinaliseDrives(); + EFSRV_IMPORT_C TInt SetDebugRegister(TInt aVal); + EFSRV_IMPORT_C TInt SetAllocFailure(TInt aAllocNum); + EFSRV_IMPORT_C void DebugNotify(TInt aDrive,TUint aNotifyType,TRequestStatus& aStat); + EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand); + EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1); + EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1,TDes8& aParam2); + EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TAny* aParam1,TAny* aParam2); + EFSRV_IMPORT_C TInt LockDrive(TInt aDrv, const TMediaPassword &aOld, const TMediaPassword &aNew, TBool aStr); + EFSRV_IMPORT_C TInt UnlockDrive(TInt aDrv, const TMediaPassword &Pswd, TBool aStr); + EFSRV_IMPORT_C TInt ClearPassword(TInt aDrv, const TMediaPassword &aPswd); + EFSRV_IMPORT_C TInt ErasePassword(TInt aDrv); + EFSRV_IMPORT_C TInt SetSessionToPrivate(TInt aDrive); + EFSRV_IMPORT_C TInt PrivatePath(TDes& aPath); + EFSRV_IMPORT_C TInt CreatePrivatePath(TInt aDrive); + EFSRV_IMPORT_C void StartupInitComplete(TRequestStatus& aStat); + EFSRV_IMPORT_C TInt SetLocalDriveMapping(const TDesC8& aMapping); + + EFSRV_IMPORT_C TInt FinaliseDrives(); /** specifies drive finalisation modes */ enum TFinaliseDrvMode @@ -1966,38 +2014,89 @@ EForceUnfinalise///< @internalComponent mark the drive as "not finalised" can result in KErrAbort if the dive is in inconsistent state. }; - IMPORT_C TInt FinaliseDrive(TInt aDriveNo, TFinaliseDrvMode aMode) const; - - IMPORT_C TInt SwapFileSystem(const TDesC& aOldFileSystemName,const TDesC& aNewFileSystemName,TInt aDrive) const; - IMPORT_C TInt ReserveDriveSpace(TInt aDriveNo, TInt aSpace); - IMPORT_C TInt GetReserveAccess(TInt aDriveNo); - IMPORT_C TInt ReleaseReserveAccess(TInt aDriveNo); - - IMPORT_C TInt AddPlugin(const TDesC& aFileName) const; - IMPORT_C TInt RemovePlugin(const TDesC& aPluginName) const; - IMPORT_C TInt PluginName(TDes& aPluginName,TInt aDrive,TInt aPos); - - IMPORT_C TInt MountPlugin(const TDesC& aPluginName) const; - IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive) const; - IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive, TInt aPos) const; + EFSRV_IMPORT_C TInt FinaliseDrive(TInt aDriveNo, TFinaliseDrvMode aMode) const; + + EFSRV_IMPORT_C TInt SwapFileSystem(const TDesC& aOldFileSystemName,const TDesC& aNewFileSystemName,TInt aDrive) const; + EFSRV_IMPORT_C TInt ReserveDriveSpace(TInt aDriveNo, TInt aSpace); + EFSRV_IMPORT_C TInt GetReserveAccess(TInt aDriveNo); + EFSRV_IMPORT_C TInt ReleaseReserveAccess(TInt aDriveNo); + + EFSRV_IMPORT_C TInt AddPlugin(const TDesC& aFileName) const; + EFSRV_IMPORT_C TInt RemovePlugin(const TDesC& aPluginName) const; + EFSRV_IMPORT_C TInt PluginName(TDes& aPluginName,TInt aDrive,TInt aPos); + + EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName) const; + EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive) const; + EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive, TInt aPos) const; - IMPORT_C TInt DismountPlugin(const TDesC& aPluginName) const; - IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive) const; - IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive,TInt aPos) const; - - IMPORT_C void NotifyDismount(TInt aDrive, TRequestStatus& aStat, TNotifyDismountMode aMode=EFsDismountRegisterClient) const; - IMPORT_C void NotifyDismountCancel(TRequestStatus& aStat) const; - IMPORT_C void NotifyDismountCancel() const; - IMPORT_C TInt AllowDismount(TInt aDrive) const; - IMPORT_C TInt SetStartupConfiguration(TInt aCommand,TAny* aParam1,TAny* aParam2) const; - IMPORT_C TInt AddCompositeMount(const TDesC& aFileSystemName,TInt aLocalDriveToMount,TInt aCompositeDrive, TBool aSync) const; - IMPORT_C TInt SetNotifyChange(TBool aNotifyChange); - IMPORT_C TInt QueryVolumeInfoExt(TInt aDrive, TQueryVolumeInfoExtCmd aCommand, TDes8& aInfo) const; - IMPORT_C TInt VolumeIOParam(TInt aDriveNo, TVolumeIOParamInfo& aParamInfo) const; - IMPORT_C TInt FileSystemSubType(TInt aDriveNo, TDes& aName) const; - IMPORT_C TInt InitialisePropertiesFile(const TPtrC8& aPtr) const; - + EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName) const; + EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive) const; + EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive,TInt aPos) const; + + EFSRV_IMPORT_C void NotifyDismount(TInt aDrive, TRequestStatus& aStat, TNotifyDismountMode aMode=EFsDismountRegisterClient) const; + EFSRV_IMPORT_C void NotifyDismountCancel(TRequestStatus& aStat) const; + EFSRV_IMPORT_C void NotifyDismountCancel() const; + EFSRV_IMPORT_C TInt AllowDismount(TInt aDrive) const; + EFSRV_IMPORT_C TInt SetStartupConfiguration(TInt aCommand,TAny* aParam1,TAny* aParam2) const; + EFSRV_IMPORT_C TInt AddCompositeMount(const TDesC& aFileSystemName,TInt aLocalDriveToMount,TInt aCompositeDrive, TBool aSync) const; + EFSRV_IMPORT_C TInt SetNotifyChange(TBool aNotifyChange); + EFSRV_IMPORT_C TInt QueryVolumeInfoExt(TInt aDrive, TQueryVolumeInfoExtCmd aCommand, TDes8& aInfo) const; + EFSRV_IMPORT_C TInt VolumeIOParam(TInt aDriveNo, TVolumeIOParamInfo& aParamInfo) const; + EFSRV_IMPORT_C TInt FileSystemSubType(TInt aDriveNo, TDes& aName) const; + EFSRV_IMPORT_C TInt InitialisePropertiesFile(const TPtrC8& aPtr) const; + + IMPORT_C TInt AddProxyDrive(const TDesC& aFileName); + IMPORT_C TInt RemoveProxyDrive(const TDesC& aDriveName); + + template <class T0,class T1> inline TInt MountProxyDrive(const TUint aDrive, const TDesC& aName, T0 a0, T1 a1) + { return(DoMountProxyDrive(TIpcArgs(aDrive, &aName, a0, a1))); }; + IMPORT_C TInt DismountProxyDrive(const TUint aDrive); + TInt Unclamp(const RFileClamp& aHandle); + + EFSRV_IMPORT_C TInt ReadFileSection(const TDesC& aName,TInt64 aPos,TDes8& aDes,TInt aLength) const; + + /** + This class is used to for returning meaningful error code values to users of RFs::IsValidName(const TDesC& ,TNameValidParam& ) + @see TError + */ + class TNameValidParam + { + public: + /** Initialises the members of the class. By default iUseSessionPath is set to EFalse, however one could set it to ETrue.*/ + inline TNameValidParam(TBool aUseSessionPath = EFalse); + + /** possible error codes */ + enum TError + { + ErrNone, ///< no error. + ErrBadCharacter, ///< aName contains a bad character; and its position is in iInvalidCharPos. + ErrBadName, ///< aName isn't a valid file or directory name. + ErrNameTooLong ///< aName length or aName + session path length (see iUseSessionPath) is longer than 256 characters. + }; + + inline TError ErrorCode() const; + inline void UseSessionPath(TBool aUseSessionPath); + inline TUint InvalidCharPos() const; + friend class TFsIsValidName; + private: + TError iError; ///< the reason why aName is invalid, see TError + TBool iUseSessionPath; ///< if ETrue, and if aName isn't fully specified, missing parts will be taken from the session path + TUint iInvalidCharPos; ///< may contain invalid character position if error is ErrBadCharacter,else 0. + }; + EFSRV_IMPORT_C TBool IsValidName(const TDesC& aName, TNameValidParam& aParam ); + + /** Special enumerator values for the SupportedFileSystemName() API */ + enum + { + KRootFileSystem = 0x00800000, ///< specifies "root" file system. The result will be the same as for FileSystemName() API call + KFirstChildFileSystem = 0 ///< specifies the first child file system number, the second will be KFirstChildFileSystem+1 etc. + }; + + EFSRV_IMPORT_C TInt SupportedFileSystemName(TDes& aName, TInt aDrive, TInt aFsEnumerator) const; + +protected: + TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const; private: void GetDirL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList,RDir& aDir) const; @@ -2005,15 +2104,80 @@ void GetDirL(const TDesC& aMatchName,const TUidType& aUidType,TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const; void DoGetDirL(TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const; TInt GetOpenFileList(TInt& aSessionNum,TInt& aLocalPos,TThreadId& aThreadId,TEntryArray& anArray) const; + + IMPORT_C TInt DoMountProxyDrive(const TIpcArgs& ipcArgs); + friend class TOpenFileScan; + friend class RFsPlugin; }; - - - - - +//------------------------------------------------------------------------------------------------------------------- + +/** + + Base class for volume formatting parameters. This class package buffer, TVolFormatParamBuf or + packaged buffer of the derived class can be passed to the RFormat::Open() in order to provide + file system-specific formatting parameters. + Each file system that supports such formatting parameters shall have this class specialisation (e.g. TVolFormatParam_FAT) + All classes, derived from this one must have the same size as the base class. + In order to use formatting parameters the format mode shall have ESpecialFormat bit flag set. + + + @see RFormat::Open(RFs&,const TDesC&,TUint,TInt& ,const TDesC8& anInfo); + @see TVolFormatParamBuf + + @publishedAll + @released +*/ +class TVolFormatParam + { +public: + inline TVolFormatParam(); + inline void Init(); + + inline void SetFileSystemName(const TDesC& aFsName); + + static inline TUint32 CalcFSNameHash(const TDesC& aFsName); + inline TUint32 FSNameHash() const; + + inline TBool SomeParamsSet() const; + + +protected: + + + enum {KMaxDataSlots = 64}; ///< the size of data array iData + + inline void SetVal(TUint aIndex, TUint32 aVal); + inline TUint32 GetVal(TUint aIndex) const; + + +public: + enum {KUId = 0x820116A2}; ///< this value shell be in iUid field to identify this class object + + /** + This class tree UID. Used to distinguish the object of this class from TLDFormatInfo and other possible data structures. + For this and derived classes this field must be KUId. This field offset in the class must be 0 + */ + const TUint32 iUId; + +private: + TUint32 iFSysNameHash; ///< Up-cased file system name hash (crc32) used to designate the file system. 0 means "not set" + TBool iParamsSet : 1; ///< ETrue if any parameter was set (SetVal() called). Gets reset to EFalse by Init() + TUint32 iData[KMaxDataSlots]; ///< used as a pool for various data. The derived classes are free to use it by SetVal()/GetVal() + }; + +__ASSERT_COMPILE(_FOFF(TVolFormatParam, iUId) == 0); + + +/** package buffer for the objects of class TVolFormatParamBuf */ +typedef TPckgBuf<TVolFormatParam> TVolFormatParamBuf; + + + + +#ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API /** @publishedAll @released @@ -2069,66 +2233,154 @@ @see TDes8 @see TDesC8 */ +#else +/** +@publishedAll +@released + +Creates and opens a file, and performs all operations on a single open file. + +These include: + +- reading from and writing to the file + +- seeking to a position within the file + +- locking and unlocking within the file + +- setting file attributes + +Before using any of these services, a connection to a file server session must +have been made, and the file must be open. + +Opening Files: + +- use Open() to open an existing file for reading or writing; an error is + returned if it does not already exist. + To open an existing file for reading only, use Open() with an access mode of + EFileRead, and a share mode of EFileShareReadersOnly. + +- use Create() to create and open a new file for writing; an error is returned + if it already exists. + +- use Replace() to open a file for writing, replacing any existing file of + the same name if one exists, or creating a new file if one does not exist. + Note that if a file exists, its length is reset to zero. + +- use Temp() to create and open a temporary file with a unique name, + for writing and reading. + +When opening a file, you must specify the file server session to use for +operations with that file. If you do not close the file explicitly, it is +closed when the server session associated with it is closed. + +Reading and Writing: + +There are several variants of both Read() and Write(). +The basic Read(TDes8& aDes) and Write(const TDesC8& aDes) are supplemented +by variants allowing the descriptor length to be overridden, or the seek +position of the first byte to be specified, or asynchronous completion, +or any combination. + +Reading transfers data from a file to a descriptor, and writing transfers +data from a descriptor to a file. In all cases, the file data is treated +as binary and byte descriptors are used (TDes8, TDesC8). + +RFile class supports operations on files of size less than or equal to 2GB - 1. +If the file size is greater than 2GB - 1 (large file), use of class RFile64 is +recommended for following operations: + 1. Opening a large file + 2. Creating a file which can grow beyond 2GB - 1 by size + 3. Creating a temporary file which can grow beyond 2GB - 1 by size + 4. Replacing an existing file after which it can grow beyond 2GB - 1 by size + 5. Adopting a large file handle from client + 6. Adopting a large file handle from server + 7. Adopting a large file handle from another process + 8. Read from a position greater than 2GB - 1 + 9. Writing to a file by which the size can grow beyond 2GB - 1 + 10. Seek to a position greater than 2GB - 1 + 11. Setting a size greater than 2GB - 1 + 12. Querying the file size (greater than 2GB - 1) + 13. Locking and unlocking a position and length that is beyond 2GB - 1 + +@see TDes8 +@see TDesC8 + +@see RFile64 + +*/ + +#endif + + class RFile : public RSubSessionBase { public: - IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFileMode); - IMPORT_C void Close(); - IMPORT_C TInt Create(RFs& aFs,const TDesC& aName,TUint aFileMode); - IMPORT_C TInt Replace(RFs& aFs,const TDesC& aName,TUint aFileMode); - IMPORT_C TInt Temp(RFs& aFs,const TDesC& aPath,TFileName& aName,TUint aFileMode); - IMPORT_C TInt Read(TDes8& aDes) const; - IMPORT_C void Read(TDes8& aDes,TRequestStatus& aStatus) const; - IMPORT_C TInt Read(TDes8& aDes,TInt aLength) const; - IMPORT_C void Read(TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; - IMPORT_C TInt Read(TInt aPos,TDes8& aDes) const; - IMPORT_C void Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus) const; - IMPORT_C TInt Read(TInt aPos,TDes8& aDes,TInt aLength) const; - IMPORT_C void Read(TInt aPos,TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; - IMPORT_C void ReadCancel(TRequestStatus& aStatus) const; - IMPORT_C void ReadCancel() const; - IMPORT_C TInt Write(const TDesC8& aDes); - IMPORT_C void Write(const TDesC8& aDes,TRequestStatus& aStatus); - IMPORT_C TInt Write(const TDesC8& aDes,TInt aLength); - IMPORT_C void Write(const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); - IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes); - IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TRequestStatus& aStatus); - IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes,TInt aLength); - IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); - IMPORT_C TInt Lock(TInt aPos,TInt aLength) const; - IMPORT_C TInt UnLock(TInt aPos,TInt aLength) const; - IMPORT_C TInt Seek(TSeek aMode,TInt& aPos) const; - IMPORT_C TInt Flush(); - IMPORT_C void Flush(TRequestStatus& aStatus); - IMPORT_C TInt Size(TInt& aSize) const; - IMPORT_C TInt SetSize(TInt aSize); - IMPORT_C TInt Att(TUint& aAttValue) const; - IMPORT_C TInt SetAtt(TUint aSetAttMask,TUint aClearAttMask); - IMPORT_C TInt Modified(TTime& aTime) const; - IMPORT_C TInt SetModified(const TTime& aTime); - IMPORT_C TInt Set(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask); - IMPORT_C TInt ChangeMode(TFileMode aNewMode); - IMPORT_C TInt Rename(const TDesC& aNewName); - IMPORT_C TInt Drive(TInt &aDriveNumber, TDriveInfo &aDriveInfo) const; - IMPORT_C TInt Adopt(RFs& aFs, TInt aHandle); - IMPORT_C TInt AdoptFromClient(const RMessage2& aMsg, TInt aFsHandleIndex, TInt aFileHandleIndex); - IMPORT_C TInt AdoptFromServer(TInt aFsHandle, TInt aFileHandle); - IMPORT_C TInt AdoptFromCreator(TInt aFsIndex, TInt aFileHandleIndex); - IMPORT_C TInt Name(TDes& aName) const; - IMPORT_C TInt TransferToServer(TIpcArgs& aIpcArgs, TInt aFsHandleIndex, TInt aFileHandleIndex) const; - IMPORT_C TInt TransferToClient(const RMessage2& aMsg, TInt aFileHandleIndex) const; - IMPORT_C TInt TransferToProcess(RProcess& aProcess, TInt aFsHandleIndex, TInt aFileHandleIndex) const; - IMPORT_C TInt Duplicate(const RFile& aFile, TOwnerType aType=EOwnerProcess); - IMPORT_C TInt FullName(TDes& aName) const; - IMPORT_C TInt BlockMap(SBlockMapInfo& aInfo, TInt64& aStartPos, TInt64 aEndPos=-1, TInt aBlockMapusage=EBlockMapUsagePaging) const; -// IMPORT_C TInt Clamp(RFileClamp& aHandle); + EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFileMode); + EFSRV_IMPORT_C void Close(); + EFSRV_IMPORT_C TInt Create(RFs& aFs,const TDesC& aName,TUint aFileMode); + EFSRV_IMPORT_C TInt Replace(RFs& aFs,const TDesC& aName,TUint aFileMode); + EFSRV_IMPORT_C TInt Temp(RFs& aFs,const TDesC& aPath,TFileName& aName,TUint aFileMode); + EFSRV_IMPORT_C TInt Read(TDes8& aDes) const; + EFSRV_IMPORT_C void Read(TDes8& aDes,TRequestStatus& aStatus) const; + EFSRV_IMPORT_C TInt Read(TDes8& aDes,TInt aLength) const; + EFSRV_IMPORT_C void Read(TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; + EFSRV_IMPORT_C TInt Read(TInt aPos,TDes8& aDes) const; + EFSRV_IMPORT_C void Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus) const; + EFSRV_IMPORT_C TInt Read(TInt aPos,TDes8& aDes,TInt aLength) const; + EFSRV_IMPORT_C void Read(TInt aPos,TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; + EFSRV_IMPORT_C void ReadCancel(TRequestStatus& aStatus) const; + EFSRV_IMPORT_C void ReadCancel() const; + EFSRV_IMPORT_C TInt Write(const TDesC8& aDes); + EFSRV_IMPORT_C void Write(const TDesC8& aDes,TRequestStatus& aStatus); + EFSRV_IMPORT_C TInt Write(const TDesC8& aDes,TInt aLength); + EFSRV_IMPORT_C void Write(const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); + EFSRV_IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes); + EFSRV_IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TRequestStatus& aStatus); + EFSRV_IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes,TInt aLength); + EFSRV_IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); + EFSRV_IMPORT_C TInt Lock(TInt aPos,TInt aLength) const; + EFSRV_IMPORT_C TInt UnLock(TInt aPos,TInt aLength) const; + EFSRV_IMPORT_C TInt Seek(TSeek aMode,TInt& aPos) const; + EFSRV_IMPORT_C TInt Flush(); + EFSRV_IMPORT_C void Flush(TRequestStatus& aStatus); + EFSRV_IMPORT_C TInt Size(TInt& aSize) const; + EFSRV_IMPORT_C TInt SetSize(TInt aSize); + EFSRV_IMPORT_C TInt Att(TUint& aAttValue) const; + EFSRV_IMPORT_C TInt SetAtt(TUint aSetAttMask,TUint aClearAttMask); + EFSRV_IMPORT_C TInt Modified(TTime& aTime) const; + EFSRV_IMPORT_C TInt SetModified(const TTime& aTime); + EFSRV_IMPORT_C TInt Set(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask); + EFSRV_IMPORT_C TInt ChangeMode(TFileMode aNewMode); + EFSRV_IMPORT_C TInt Rename(const TDesC& aNewName); + EFSRV_IMPORT_C TInt Drive(TInt &aDriveNumber, TDriveInfo &aDriveInfo) const; + EFSRV_IMPORT_C TInt Adopt(RFs& aFs, TInt aHandle); + EFSRV_IMPORT_C TInt AdoptFromClient(const RMessage2& aMsg, TInt aFsHandleIndex, TInt aFileHandleIndex); + EFSRV_IMPORT_C TInt AdoptFromServer(TInt aFsHandle, TInt aFileHandle); + EFSRV_IMPORT_C TInt AdoptFromCreator(TInt aFsIndex, TInt aFileHandleIndex); + EFSRV_IMPORT_C TInt Name(TDes& aName) const; + EFSRV_IMPORT_C TInt TransferToServer(TIpcArgs& aIpcArgs, TInt aFsHandleIndex, TInt aFileHandleIndex) const; + EFSRV_IMPORT_C TInt TransferToClient(const RMessage2& aMsg, TInt aFileHandleIndex) const; + EFSRV_IMPORT_C TInt TransferToProcess(RProcess& aProcess, TInt aFsHandleIndex, TInt aFileHandleIndex) const; + EFSRV_IMPORT_C TInt Duplicate(const RFile& aFile, TOwnerType aType=EOwnerProcess); + EFSRV_IMPORT_C TInt FullName(TDes& aName) const; + EFSRV_IMPORT_C TInt BlockMap(SBlockMapInfo& aInfo, TInt64& aStartPos, TInt64 aEndPos=-1, TInt aBlockMapusage=EBlockMapUsagePaging) const; TInt Clamp(RFileClamp& aHandle); -private: +protected: + // RSubSessionBase overrides + TInt CreateSubSession(const RSessionBase& aSession,TInt aFunction,const TIpcArgs& aArgs); + void CloseSubSession(TInt aFunction); + TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const; + TInt DuplicateHandle(TInt& aSubSessionHandle) const; + + friend class RFilePlugin; }; - +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API +#include <f32file64.h> +#endif class RDir : public RSubSessionBase /** @@ -2162,13 +2414,19 @@ */ { public: - IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,const TUidType& aUidType); - IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,TUint anAttMask); - IMPORT_C void Close(); - IMPORT_C TInt Read(TEntryArray& anArray) const; - IMPORT_C void Read(TEntryArray& anArray,TRequestStatus& aStatus) const; - IMPORT_C TInt Read(TEntry& anEntry) const; - IMPORT_C void Read(TPckg<TEntry>& anEntry,TRequestStatus& aStatus) const; + EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,const TUidType& aUidType); + EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,TUint anAttMask); + EFSRV_IMPORT_C void Close(); + EFSRV_IMPORT_C TInt Read(TEntryArray& anArray) const; + EFSRV_IMPORT_C void Read(TEntryArray& anArray,TRequestStatus& aStatus) const; + EFSRV_IMPORT_C TInt Read(TEntry& anEntry) const; + EFSRV_IMPORT_C void Read(TPckg<TEntry>& anEntry,TRequestStatus& aStatus) const; + +private: + // RSubSessionBase overrides + TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const; + + friend class RDirPlugin; }; @@ -2524,6 +2782,18 @@ This class is not intended for user derivation. +Note: + +To support wildcard, CFileMan needs to store the entire directory entry +information. Therefore, in a extreme condition, if a directory contains +a huge number of files (e.g. more than 15000 files with 10 characters' long file +names), user may encounter KErrNoMemory errors. Developers who have a need to handle +this rare case should increase the heap size limitation of their applications. + +For more information about heap size configuration, please refer following +section in Symbian Developer Library: +Symbian OS build guide >> Build Tools Reference >> MMP file syntax >> epocheapsize + @see MFileManObserver */ { @@ -2722,7 +2992,7 @@ TInt SetupMoveAcrossDrives(TUint aSwitches); TInt SetupTargetDirectory(TBool aOverWrite, TBool& aComplete); TBool SrcTrgDrivesIdentical(); - TBool SetupDirectoryForMove(); + TInt SetupDirectoryForMove(TBool& aSrcIsDir); private: void DoAttribsL(); void DoCopyOrMoveL(); @@ -2730,7 +3000,11 @@ void DoRenameL(); void DoRmDirL(); void DoCopyFromHandleL(); +#ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API TInt DoCopy(const RFile& aSrcFile, RFile& aDstFile, TInt& aRet); +#else + TInt DoCopy(const RFile64& aSrcFile, RFile64& aDstFile, TInt& aRet); +#endif private: TParse iTrgFile; TInternalAction iAction; @@ -2738,7 +3012,11 @@ TUint iClearMask; TTime iTime; TInt iBytesTransferred; +#ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API RFile iSrcFileHandle; +#else + RFile64 iSrcFileHandle; +#endif TBool iMovingContents; TEntry iTmpEntry; TParse iTmpParse; @@ -2861,10 +3139,7 @@ Reads and writes single lines of text to or from a Unicode file. */ { -public: - /** - @internalComponent - */ +private: enum TFileState { EStartOfFile, @@ -2885,7 +3160,11 @@ const TText* iNext; const TText* iEnd; TFileState iState; +#ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API RFile iFile; +#else + RFile64 iFile; +#endif TBuf8<0x100> iReadBuf; }; @@ -2898,67 +3177,6 @@ */ IMPORT_C TBool FileNamesIdentical(const TDesC& aFileName1,const TDesC& aFileName2); - - -/** -Local drive mapping list - passed as argument to RFs::SetLocalDriveMapping(). - -@publishedPartner -@released -*/ -class TLocalDriveMappingInfo - { -public: - enum TDrvMapOperation {EWriteMappingsAndSet=0,EWriteMappingsNoSet=1,ESwapIntMappingAndSet=2}; -public: - TInt iDriveMapping[KMaxLocalDrives]; - TDrvMapOperation iOperation; - }; -typedef TPckgBuf<TLocalDriveMappingInfo> TLocalDriveMappingInfoBuf; - -/** -Client side plugin API. - -@publishedPartner -@released -*/ -class RPlugin : public RSubSessionBase - { -public: - IMPORT_C TInt Open(RFs& aFs, TInt aPos); - IMPORT_C void Close(); -protected: - IMPORT_C void DoRequest(TInt aReqNo,TRequestStatus& aStatus) const; - IMPORT_C void DoRequest(TInt aReqNo,TRequestStatus& aStatus,TDes8& a1) const; - IMPORT_C void DoRequest(TInt aReqNo,TRequestStatus& aStatus,TDes8& a1,TDes8& a2) const; - IMPORT_C TInt DoControl(TInt aFunction) const; - IMPORT_C TInt DoControl(TInt aFunction,TDes8& a1) const; - IMPORT_C TInt DoControl(TInt aFunction,TDes8& a1,TDes8& a2) const; - IMPORT_C void DoCancel(TUint aReqMask) const; - }; - -/** -@publishedPartner -@released - -Specifies that a plugin should determine for itself which drives it attaches to. - -@see RFs::MountPlugin -@see RFs::DismountPlugin -*/ -const TInt KPluginAutoAttach = 0x19; - -/** -@publishedPartner -@released - -Specifies that a plugin should determine its own position in the plugin stack. - -@see RFs::MountPlugin -@see RFs::DismountPlugin -*/ -const TInt KPluginAutoLocate = 0xC8; - /** @publishedAll @released @@ -2967,51 +3185,18 @@ */ const TInt KFileServerUidValue = 0x100039e3; -enum TSessionFlags -/** -@internalTechnology - -A set of session specific configuration flags. -*/ - { - /** - Notify the user or write failures - */ - EFsSessionNotifyUser = KBit0, - - /** - Notify clients registered for change notification - */ - EFsSessionNotifyChange = KBit1, - - /** - Enables all session flags - */ - EFsSessionFlagsAll = KSet32, - }; - -/** -@internalTechnology -*/ -struct SBlockMapArgs - { - TInt64 iStartPos; - TInt64 iEndPos; - }; - - -/** -@internalTechnology - -Validates the mask used to match drive attributes. - -@see RFs::DriveList -@see TFindFile::SetFindMask -*/ -TInt ValidateMatchMask( TUint aMask); - - - - -#include "f32file.inl" + +#include <f32file.inl> +#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API +#include <f32file64.inl> #endif + +#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION +#include <f32notification.h> +#endif + +#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS +#include <f32file_private.h> +#endif + +#endif