os/kernelhwsrv/userlibandfileserver/fileserver/sfat32/fat_dir_entry.h
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/kernelhwsrv/userlibandfileserver/fileserver/sfat32/fat_dir_entry.h	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,129 @@
     1.4 +// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// under the terms of the License "Eclipse Public License v1.0"
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +// f32\sfat\inc\fat_dir_entry.h
    1.18 +// FAT directory entry related stuff definitions.
    1.19 +// 
    1.20 +//
    1.21 +
    1.22 +/**
    1.23 + @file
    1.24 + @internalTechnology
    1.25 +*/
    1.26 +
    1.27 +#if !defined(FAT_DIR_ENTRY_H)
    1.28 +#define FAT_DIR_ENTRY_H
    1.29 +
    1.30 +
    1.31 +//-------------------------------------------------------------------------------------------------------------------
    1.32 +
    1.33 +
    1.34 +const TInt      KFatDirNameSize         = 11;   ///< Dos directory/File name length
    1.35 +const TInt      KVFatEntryAttribute     = 0x0F;  ///< VFat entry attribute setting
    1.36 +const TUint8    KDotEntryByte           = 0x2e;  ///< Dot value for self and parent pointer directory entries
    1.37 +const TUint8    KBlankSpace             = 0x20;  ///< Blank space in a directory entry
    1.38 +const TInt      KSizeOfFatDirEntryLog2  = 5;     ///< Log2 of size in bytes of a Fat directry entry 
    1.39 +const TUint     KSizeOfFatDirEntry      = 1 << KSizeOfFatDirEntryLog2;    ///< Size in bytes of a Fat directry entry 
    1.40 +
    1.41 +const TUint16 KReservedIdOldEntry = 1;	///< Rugged FAT "OldEntry" id
    1.42 +const TUint16 KReservedIdNewEntry = 0;  ///< Rugged FAT "ReservedIdNewEntry" id
    1.43 +
    1.44 +
    1.45 +typedef TBuf8<KFatDirNameSize> TShortName;  ///< Buffer type fot short names in dos entries
    1.46 +
    1.47 +//-------------------------------------------------------------------------------------------------------------------
    1.48 +
    1.49 +/**
    1.50 +    Fat DOS directory entry structure
    1.51 +*/
    1.52 +struct SFatDirEntry
    1.53 +    {
    1.54 +    TUint8  iName[KFatDirNameSize]; ///< :0  File/Directory name
    1.55 +    TUint8  iAttributes;            ///< :11 File/Directory attributes
    1.56 +    TUint8  iReserved1[2];          ///< :12 2 reserved bytes(in our implementation), some versions of Windows may use them
    1.57 +    TUint16 iTimeC;                 ///< :14 Creation time
    1.58 +    TUint16 iDateC;                 ///< :16 Creation date
    1.59 +    TUint16 iReserved2;             ///< :18 2 reserved bytes(in our implementation), FAT specs say that this is "last access date". Rugged FAT uses them as a special entry ID
    1.60 +    TUint16 iStartClusterHi;        ///< :20 High 16 bits of the File/Directory cluster number (Fat32 only)
    1.61 +    TUint16 iTime;                  ///< :22 last write access time 
    1.62 +    TUint16 iDate;                  ///< :24 last write access date 
    1.63 +    TUint16 iStartClusterLo;        ///< :26 Low 16 bits of the File/Directory cluster number 
    1.64 +    TUint32 iSize;                  ///< :28 File/Directory size in bytes
    1.65 +    };
    1.66 +
    1.67 +
    1.68 +//-------------------------------------------------------------------------------------------------------------------
    1.69 +
    1.70 +/**
    1.71 +Provides access to the Fat directory entry parameters
    1.72 +*/
    1.73 +class TFatDirEntry
    1.74 +    {
    1.75 +public:
    1.76 +    inline TFatDirEntry();
    1.77 +    inline void InitZ();
    1.78 +
    1.79 +    inline const TPtrC8 Name() const;
    1.80 +    inline TInt Attributes() const;
    1.81 +    inline TTime Time(TTimeIntervalSeconds aOffset) const;
    1.82 +    inline TInt StartCluster() const;
    1.83 +    inline TUint32 Size() const;
    1.84 +    inline TBool IsErased() const;
    1.85 +    inline TBool IsCurrentDirectory() const;
    1.86 +    inline TBool IsParentDirectory() const;
    1.87 +    inline TBool IsEndOfDirectory() const;
    1.88 +    inline TBool IsGarbage() const;
    1.89 +    inline void SetName(const TDesC8& aDes);
    1.90 +    inline void SetAttributes(TInt anAtt);
    1.91 +    inline void SetTime(TTime aTime, TTimeIntervalSeconds aOffset);
    1.92 +    inline void SetCreateTime(TTime aTime, TTimeIntervalSeconds aOffset);
    1.93 +    inline void SetStartCluster(TInt aStartCluster);
    1.94 +    inline void SetSize(TUint32 aFilesize);
    1.95 +    inline void SetErased();
    1.96 +    inline void SetCurrentDirectory();
    1.97 +    inline void SetParentDirectory();
    1.98 +    inline void SetEndOfDirectory();
    1.99 +    inline TUint RuggedFatEntryId() const;
   1.100 +    inline void  SetRuggedFatEntryId(TUint16 aId);
   1.101 +
   1.102 +public:
   1.103 +    void InitializeAsVFat(TUint8 aCheckSum);
   1.104 +    void SetVFatEntry(const TDesC& aName,TInt aRemainderLen);
   1.105 +    void ReadVFatEntry(TDes16& aVBuf) const;
   1.106 +    inline TBool IsLongNameStart() const;
   1.107 +    inline TBool IsVFatEntry() const;
   1.108 +    inline TInt NumFollowing() const;
   1.109 +    inline TUint8 CheckSum() const;
   1.110 +
   1.111 +
   1.112 +public:
   1.113 +    TUint8 iData[KSizeOfFatDirEntry]; ///< The directory entry data
   1.114 +    };
   1.115 +
   1.116 +
   1.117 +
   1.118 +#endif //FAT_DIR_ENTRY_H
   1.119 +
   1.120 +
   1.121 +
   1.122 +
   1.123 +
   1.124 +
   1.125 +
   1.126 +
   1.127 +
   1.128 +
   1.129 +
   1.130 +
   1.131 +
   1.132 +