--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imgcheck/libimgutils/src/e32reader.cpp Mon May 10 19:54:49 2010 +0100
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2007-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:
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#include "e32reader.h"
+#include <f32image.h>
+
+/**
+Constructor.
+
+@internalComponent
+@released
+*/
+E32Image::E32Image()
+:E32ImageFile()
+{
+}
+
+/**
+Destructor.
+
+@internalComponent
+@released
+*/
+E32Image::~E32Image()
+{
+}
+
+/**
+Function responsible to read the import section of an e32 image and return the dependency names.
+
+@internalComponent
+@released
+
+@param aCount - Number of imports found
+
+@return - returns the two dimensional
+*/
+char** E32Image::GetImportExecutableNames(int& aCount)
+{
+ const E32ImportSection* isection = (const E32ImportSection*)(iData + iOrigHdr->iImportOffset);
+ const E32ImportBlock* impBlock = (const E32ImportBlock*)(isection + 1);
+
+ char** nameList = (char**)malloc(iOrigHdr->iDllRefTableCount * sizeof(char*));
+
+ aCount = iOrigHdr->iDllRefTableCount;
+
+ for (int d = 0; d < iOrigHdr->iDllRefTableCount; ++d)
+ {
+ char* dllname = iData + iOrigHdr->iImportOffset + impBlock->iOffsetOfDllName;
+ char* curlyStart = strchr(dllname, '{');
+ char* dotStart = strrchr(dllname, '.');
+
+ dllname[curlyStart - dllname] = '\0';
+ strcat(dllname,dotStart);
+
+ nameList[d] = dllname;
+ TUint impfmt = iOrigHdr->ImportFormat();
+ impBlock = impBlock->NextBlock(impfmt); //Get next import block
+ }
+ return nameList;
+}
+
+/**
+Constructor intializes the class pointer members.
+
+@internalComponent
+@released
+
+@param aImageName - image file name
+*/
+E32Reader::E32Reader(char* aImageName)
+:ImageReader(aImageName)
+{
+ iInputStream.open(iImgFileName.c_str(), Ios::binary | Ios::in);
+ int fwdSlashOff = iImgFileName.find_last_of('/');
+ int bwdSlashOff = iImgFileName.find_last_of('\\');
+ int exeNameOff = (fwdSlashOff > bwdSlashOff) ? fwdSlashOff : bwdSlashOff;
+ iExeName = iImgFileName.substr(exeNameOff + 1);
+}
+
+/**
+Destructor deletes the class pointer members.
+
+@internalComponent
+@released
+*/
+E32Reader::~E32Reader()
+{
+ iInputStream.close();
+ DELETE(iE32Image);
+}
+
+/**
+Function responsible to say whether it is an e32 image or not.
+
+@internalComponent
+@released
+
+@param aImage - e32 image
+*/
+bool E32Reader::IsE32Image(char* aFile)
+{
+ if(E32Image::IsE32ImageFile(aFile))
+ return true;
+ return false;
+}
+
+/**
+Funtion to read the whole e32 image file and write the contents into iData memeber
+
+@internalComponent
+@released
+*/
+void E32Reader::ReadImage()
+{
+ if( !iInputStream.is_open() )
+ {
+ cerr << "Error: " << "Can not open file" << iImgFileName.c_str() << endl;
+ exit(EXIT_FAILURE);
+ }
+ iE32Image = new E32Image();
+ iInputStream.seekg(0, Ios::end);
+ TUint32 aSz = iInputStream.tellg();
+ iInputStream.seekg(0, Ios::beg);
+ iE32Image->Adjust(aSz);
+ iE32Image->iFileSize = aSz;
+}
+
+/**
+Function responsible to read the E32 image and put the data into E32ImageFile object.
+It is achieved using the operator >> overloaded function.
+
+@internalComponent
+@released
+*/
+void E32Reader::ProcessImage()
+{
+ iInputStream >> *iE32Image;
+ iExeAvailable = true;
+}
+
+/**
+Function responsible to gather dependencies for one e32 image.
+
+@internalComponent
+@released
+
+@return iExeNamesVsDepListMap - returns all executable's dependencies
+*/
+ExeNamesVsDepListMap& E32Reader::GatherDependencies()
+{
+ int count=0;
+ char** nameList = iE32Image->GetImportExecutableNames(count);
+ int i = 0;
+ for(; i < count; ++i)
+ {
+ iDependencyList.push_back(String(nameList[i]));
+ }
+ iImageVsDepList.insert(std::make_pair(iExeName, iDependencyList));
+ return iImageVsDepList;
+}
+
+/**
+Function responsible to return the dependency list of an e32 image.
+
+@internalComponent
+@released
+
+@return iDependencyList - returns all executable's dependencies
+*/
+const StringList& E32Reader::GetDependencyList()
+{
+ return iDependencyList;
+}
+
+/**
+Function responsible prepare the ExeVsId map.
+
+@internalComponent
+@released
+*/
+void E32Reader::PrepareExeVsIdMap()
+{
+ IdData* id;
+ if(iExeVsIdData.size() == 0) //Is not already prepared
+ {
+ id = new IdData;
+ id->iUid = iE32Image->iOrigHdr->iUid1;
+ id->iDbgFlag = (iE32Image->iOrigHdr->iFlags & KImageDebuggable)? true : false;
+ TUint aHeaderFmt = E32ImageHeader::HdrFmtFromFlags(iE32Image->iOrigHdr->iFlags);
+ if (aHeaderFmt >= KImageHdrFmt_V)
+ {
+ E32ImageHeaderV* v = iE32Image->iHdr;
+ id->iSid = v->iS.iSecureId;
+ id->iVid = v->iS.iVendorId;
+ }
+ id->iFileOffset = 0;
+ iExeVsIdData[iExeName] = id;
+ }
+ id = KNull;
+}
+
+/**
+Function responsible to return the Executable versus IdData container.
+
+@internalComponent
+@released
+
+@return - returns iExeVsIdData
+*/
+const ExeVsIdDataMap& E32Reader::GetExeVsIdMap() const
+{
+ return iExeVsIdData;
+}