--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/r_rofs.h Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,125 @@
+/*
+* 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 "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 __R_ROFS_H__
+#define __R_ROFS_H__
+
+#include <e32rom.h>
+
+#if defined(__MSVCDOTNET__) || defined(__TOOLS2__)
+#include <fstream>
+#else //!__MSVCDOTNET__
+#include <fstream.h>
+#endif //__MSVCDOTNET__
+
+#include "h_utl.h"
+#include "r_coreimage.h"
+#include <boost/thread/thread.hpp>
+#include <boost/thread/condition.hpp>
+#include <queue>
+
+#define DEFAULT_LOG_LEVEL 0x0
+#define LOG_LEVEL_FILE_DETAILS 0x00000001 // Destination file name (loglevel1)
+#define LOG_LEVEL_FILE_ATTRIBUTES 0x00000002 // File attributes (loglevel2)
+
+
+class CObeyFile;
+class MRofsImage;
+class Memmap;
+
+struct TPlacingSection {
+ TUint8* buf;
+ TInt len;
+ TRomNode* node;
+ TPlacingSection(TRomNode* anode){
+ node = anode;
+ buf = NULL;
+ len = 0;
+ }
+};
+class E32Rofs : public MRofsImage
+ {
+public:
+ E32Rofs(CObeyFile *aObey);
+ virtual ~E32Rofs();
+ TInt Create();
+
+ TInt CreateExtension(MRofsImage* info);
+ TInt WriteImage( TInt aHeaderType );
+
+ TRomNode* CopyDirectory(TRomNode*& aLastExecutable);
+ TRomNode* RootDirectory();
+ void SetRootDirectory(TRomNode* aDir);
+ TText* RomFileName();
+ TInt Size();
+ void MakeAutomaticSize(TUint32 aSize);
+
+ //Get a node to handle, if there is no more, NULL returns.
+ //For alias node, it will be deferred to later phase to handle.
+ TPlacingSection* GetFileNode(bool &aDeferred);
+ TPlacingSection* GetDeferredJob();
+ void ArriveDeferPoint();
+ void DisplaySizes(TPrintType aWhere);
+private:
+ TInt PlaceFiles( TRomNode* aRootDir, TUint8* aDestBase, TUint aBaseOffset, TInt aCoreSize = 0 );
+ TInt LayoutDirectory( TRomNode* aRootDir, TUint aBaseOffset );
+ TInt PlaceDirectory( TRomNode* aRootDir, TUint8* aDest );
+ void LogExecutableAttributes(E32ImageHeaderV *aHdr);
+
+
+ void Write(ofstream &of, TInt aHeaderType); // main ROM image
+ Memmap* iImageMap;
+
+public:
+ char *iData;
+ TInt iSize;
+
+ TRofsHeader *iHeader;
+ TExtensionRofsHeader *iExtensionRofsHeader;
+ //
+ CObeyFile *iObey;
+
+ //
+ TInt iSizeUsed;
+ TInt iOverhead;
+ TInt iDirectorySize;
+
+ TInt iTotalDirectoryBlockSize;
+ TInt iTotalFileBlockSize;
+ //
+
+private:
+ TRomNode *iLastNode;
+ int iWorkerArrived;
+ boost::mutex iMuxTree;
+ std::vector<TPlacingSection*> iVPS;
+ std::queue<TPlacingSection*> iQueueAliasNode;
+};
+
+
+class TRofsDirStructure
+ {
+ public:
+ TRofsDirStructure( TRomEntry* aRootDirectory );
+
+ TInt CalculateDirectorySize();
+
+ private:
+ TRomEntry* iRootDirectory;
+ };
+#endif