diff -r 820b22e13ff1 -r 39c28ec933dd imgtools/imglib/filesystem/include/dirregion.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/imglib/filesystem/include/dirregion.h Mon May 10 19:54:49 2010 +0100 @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2006-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 "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: +* CDIRREGION.H +* Directory Region Operations for FileSystem component +* @internalComponent +* @released +* +*/ + + +#ifndef DIRREGION_H +#define DIRREGION_H + +#include "filesystemclass.h" +#include "longname.h" + +#include +#include +#include + +class CFileSystem; + +typedef std::ofstream OfStream; +typedef std::ifstream IfStream; +typedef std::ios Ios; +typedef std::map StringMap; + +/** +This class describes the member functions and data members required to create directory/data +region of FAT image. + +@internalComponent +@released +*/ + +class CDirRegion + { + private: + void FormatName(String& aString,char aAttrValue); + unsigned int Get32BitClusterNumber(unsigned int aHighWord, unsigned int aLowWord); + void CheckEntry(EntryList aNodeList); + void CreateDirEntry(CDirectory* aEntry,unsigned int aParentDirClusterNumber); + void CreateAndWriteCurrentDirEntry(unsigned int aCurClusterNumber,String& aString); + void CreateAndWriteParentDirEntry(unsigned int aParDirClusterNumber,String& aString); + void WriteEntryToString(CDirectory* aEntry,String& aString); + bool IsLongEntry(CDirectory* aEntry) const; + void CreateLongEntries(CDirectory* aEntry,String& aDirString); + void WriteFileDataInToCluster(CDirectory* aEntry); + void PushStringIntoClusterMap(unsigned int aNumber, + String& aDirString, + unsigned long int aClusterSize, + char aAttribute); + void PushDirectoryEntryString(unsigned int aNumber,String& aString,int aClustersRequired); + + public: + CDirRegion( EntryList iNodeList, + CFileSystem *aFileSystemPtr); + ~CDirRegion(); + void Execute(); + void WriteClustersIntoFile(OfStream& aOutPutStream); + TClustersPerEntryMap* GetClustersPerEntryMap() const; + + private: + IfStream iInputStream; //Input stream, used to read file contents + CCluster* iClusterPtr; //pointer to class CCluster + bool iCurrentDirEntry; //Is current entry(.) is created? + bool iParentDirEntry;//Is parent entry (..) is created? + bool iFirstCluster; //Is this the first cluster for the current FAT image? + + unsigned int iCurEntryClusterNumber; //Holds current entries cluster number + unsigned int iClusterKey; //Number used to map cluster with cluster contents + /* To avoid calling CCluster::GetClusterSize() function multiple times, this + *variable introduced. + */ + unsigned long int iClusterSize; + + StringMap iClusterMap; //The map between cluster number and cluster + unsigned int iRootDirSizeInBytes;//Reserved sectors for root directory entry + EntryList iNodeList;//To hold root directory entry + }; + +#endif //DIRREGION_H