/*
* Copyright (c) 2010 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:
*
*/
#ifndef __FILE_SYSTEM_ITEM_HEADER__
#define __FILE_SYSTEM_ITEM_HEADER__
#include "fatdefines.h"
#include <time.h>
class UTF16String;
class TFSNode {
public :
TFSNode(TFSNode* aParent = 0 ,const char* aFileName = 0, TUint8 aAttrs = 0, const char* aPCSideName = 0);
~TFSNode() ;
#ifdef _DEBUG
void PrintTree(int nTab = 0);
#endif
inline TUint8 GetAttrs() const { return iAttrs ;}
inline const char* GetFileName() const { return (iFileName != 0) ? iFileName : "" ;}
inline const char* GetPCSideName() const { return (iPCSideName != 0) ? iPCSideName : "" ;}
inline TFSNode* GetParent() const { return iParent;}
inline TFSNode* GetFirstChild() const {return iFirstChild;}
inline TFSNode* GetSibling() const { return iSibling ;}
// return the size of memory needed to store this entry in a FAT system
// for a file entry, it's size of file
// for a directory entry, it's sumup of memory for subdir and files entry storage
TUint GetSize() const ;
bool IsDirectory() const ;
//Except for "." and "..", every direcoty/file entry in FAT filesystem are treated as with
//"long name", for the purpose of reserving case sensitive file name.
// This function is for GetLongEntries() to know length of long name .
int GetWideNameLength() const ;
// To init the entry,
// For a file entry, aSize is the known file size,
// For a directory entry, aSize is not cared.
void Init(time_t aCreateTime, time_t aAccessTime, time_t aWriteTime, TUint aSize );
//This function is used by TFatImgGenerator::PrepareClusters, to prepare the clusters
// aClusterData should points to a buffer which is at least the size returns by
// GetSize()
void WriteDirEntries(TUint aStartIndex, TUint8* aClusterData );
static TFSNode* CreateFromFolder(const char* aPath,TFSNode* aParent = NULL);
protected:
void GenerateBasicName();
void MakeUniqueShortName(char rShortName[12],TUint baseNameLength) const;
void GetShortEntry(TShortDirEntry* aEntry);
int GetLongEntries(TLongDirEntry* aEntries) ;
TFSNode* iParent ;
TFSNode* iFirstChild ;
TFSNode* iSibling ;
TUint8 iAttrs ;
char* iPCSideName;
char* iFileName;
char iShortName[12];
UTF16String* iWideName ;
TTimeInteger iCrtTime ;
TDateInteger iCrtDate ;
TUint8 iCrtTimeTenth ;
TDateInteger iLstAccDate ;
TTimeInteger iWrtTime ;
TDateInteger iWrtDate ;
TUint iFileSize ;
TShortDirEntry* iFATEntry ;
};
#endif