commands/chkdeps/chkdeps.h
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/chkdeps/chkdeps.h	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,137 @@
+// chkdeps.h
+// 
+// Copyright (c) 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "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:
+// Accenture - Initial contribution
+//
+
+#define __INCLUDE_CAPABILITY_NAMES__
+#include <fshell/ioutils.h>
+#include <f32image.h>
+#include "sf_deflate.h"
+#include <e32rom.h>
+#include "sf_pgcompr.h"
+
+using namespace IoUtils;
+
+class CDllChecker : public CCommandBase
+	{
+public:
+	static CCommandBase* NewLC();
+private: // From CCommandBase.
+	virtual const TDesC& Name() const;
+	virtual void DoRunL();
+	virtual void ArgumentsL(RCommandArgumentList& aArguments);
+	virtual void OptionsL(RCommandOptionList& aOptions);
+
+	// From ts_std.h
+private:
+	enum TResultCheck {EPending,EAlreadyOpen,ECouldNotOpenFile,ENotFound,EUidNotSupported,ENoImportData,EUidDifference,EFileFoundAndUidSupported, /*BEGIN TOMSCI added*/ ERequiredCapabilitiesMissing, EOrdinalMissing, EVersionMismatch };
+	class CDllInfo : public CBase
+		{
+	public:
+		TBuf<KMaxFileName> iDllName;
+		TUid iUid;
+		TResultCheck iResult;
+		TCapabilitySet iDllCaps;
+		TInt iNumExports;
+		TInt16 iMajorVersion;
+		TInt16 iMinorVersion;
+		};
+	
+	RPointerArray<CDllInfo> iDllArray;	//	Array of Imports already checked
+	TInt iCalls;	//	Number of recursive calls of GetImportDataL()
+	
+	RFile iFile;//file object for reading data from phisical file
+	TUint32  iConversionOffset;
+	TAny* iStackBase; // Used in debug only to check stack depth
+private:
+	void GetFileNameAndUid(CDllInfo &aDllInfo, const TDesC8 &aExportName);
+	TInt FindDll(TDes& aDllName,TFileName& aFileName, const TDesC& aPath);
+	TUint8* NextBlock(TUint8* aBlock);
+	
+	void LoadFileInflateL(const E32ImageHeaderComp* aHeader, RBuf8& aCode, RBuf8& aRestOfFile);
+	void LoadFileNoCompressL(const E32ImageHeaderComp* aHeader, RBuf8& aCode, RBuf8& aRestOfFile);
+	void LoadFileBytePairL(const E32ImageHeaderComp* aHeader, RBuf8& aCode, RBuf8& aRestOfFile);
+
+	TInt CheckUid3(TInt32 aUid3,TUid aUid);
+	void LoadFileL(const E32ImageHeaderComp* aHeader, RBuf8& aCode, RBuf8& aRestOfFile);
+	//void GetDllTableL(TUint8* aImportData,TInt aDllRefTableCount,TUint aFlags);
+	//void GetDllTableL(const TDesC& aFileName, E32ImageHeader* aImageHeader, TUint8* aRestOfFile);
+	void GetDllTableL(const TDesC& aFileName, const E32ImageHeader* aImageHeader, const TUint8* aCode, const TUint8* aImportData);
+public:	
+	CDllChecker();
+	~CDllChecker();
+	void ConstructL();	
+	void GetImportDataL(const TDesC& aFileName, CDllInfo& aInfo);	
+	void ListArray();
+	static TInt CompareDllInfo(const CDllInfo& aDllInfo1, const CDllInfo& aDllInfo2);
+private:
+	TBool iVerbose, iDebug;
+	TFileName2 iFilename;
+	CDllInfo* iExeInfo; // Argh I've painted myself into an API corner here... cue quick-and-dirty hack. iRequiredCaps has to point into a CDllInfo::iDllCaps because of refactoring I made without thinking it through. Therefore jump through a few hoops to ensure this is so, to save redoing the code that assumes it. V lazy!
+	TCapabilitySet* iRequiredCaps; // Only relevant if we're checking an exe
+	};
+
+
+
+// Nicked from sf_image.h
+
+class TFileNameInfo
+	{
+public:
+	enum	{
+			EIncludeDrive=1,
+			EIncludePath=2,
+			EIncludeBase=4,
+			EIncludeVer=8,
+			EForceVer=16,
+			EIncludeUid=32,
+			EForceUid=64,
+			EIncludeExt=128,
+			EIncludeDrivePath=EIncludeDrive|EIncludePath,
+			EIncludeBaseExt=EIncludeBase|EIncludeExt,
+			EIncludeDrivePathBaseExt=EIncludeDrive|EIncludePath|EIncludeBase|EIncludeExt,
+			};
+	enum	{
+			EAllowUid=1,
+			EAllowPlaceholder=2,
+			EAllowDecimalVersion=4,
+			};
+public:
+	TFileNameInfo();
+	TInt Set(const TDesC8& aFileName, TUint aFlags);
+	void Dump() const;
+public:
+	inline TInt DriveLen() const {return iPathPos;}
+	inline TInt PathLen() const {return iBasePos-iPathPos;}
+	inline TInt BaseLen() const {return iVerPos-iBasePos;}
+	inline TInt VerLen() const {return iUidPos-iVerPos;}
+	inline TInt UidLen() const {return iExtPos-iUidPos;}
+	inline TInt ExtLen() const {return iLen-iExtPos;}
+	inline TPtrC8 Drive() const {return TPtrC8(iName, iPathPos);}
+	inline TPtrC8 Path() const {return TPtrC8(iName+iPathPos, iBasePos-iPathPos);}
+	inline TPtrC8 DriveAndPath() const {return TPtrC8(iName, iBasePos);}
+	inline TPtrC8 Base() const {return TPtrC8(iName+iBasePos, iVerPos-iBasePos);}
+	inline TPtrC8 VerStr() const {return TPtrC8(iName+iVerPos, iUidPos-iVerPos);}
+	inline TPtrC8 UidStr() const {return TPtrC8(iName+iUidPos, iExtPos-iUidPos);}
+	inline TPtrC8 Ext() const {return TPtrC8(iName+iExtPos, iLen-iExtPos);}
+	inline TUint32 Version() const {return iVersion;}
+	inline TUint32 Uid() const {return iUid;}
+	void GetName(TDes8& aName, TUint aFlags) const;
+public:
+	const TText8* iName;
+	TInt iPathPos;
+	TInt iBasePos;
+	TInt iVerPos;
+	TInt iUidPos;
+	TInt iExtPos;
+	TInt iLen;
+	TUint32 iVersion;
+	TUint32 iUid;
+	};