diff -r 000000000000 -r 7f656887cf89 commands/chkdeps/chkdeps.h --- /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 +#include +#include "sf_deflate.h" +#include +#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 iDllName; + TUid iUid; + TResultCheck iResult; + TCapabilitySet iDllCaps; + TInt iNumExports; + TInt16 iMajorVersion; + TInt16 iMinorVersion; + }; + + RPointerArray 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; + };