diff -r c7c26511138f -r 360bd6b35136 imgtools/imgcheck/libimgutils/src/e32reader.cpp --- a/imgtools/imgcheck/libimgutils/src/e32reader.cpp Wed Jun 16 16:51:40 2010 +0300 +++ b/imgtools/imgcheck/libimgutils/src/e32reader.cpp Wed Jun 23 16:56:47 2010 +0800 @@ -1,235 +1,220 @@ -/* -* 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 - -/** -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; -} +/* +* 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 + +/** +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 = reinterpret_cast(new long[iOrigHdr->iDllRefTableCount]); + + 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(const char* aImageName) +:ImageReader(aImageName) { + iInputStream.open(iImgFileName.c_str(), ios_base::binary | ios_base::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(const 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_base::end); + TUint32 aSz = iInputStream.tellg(); + iInputStream.seekg(0, ios_base::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; + iDependencyList.clear(); + char** names = iE32Image->GetImportExecutableNames(count); + for(int i = 0 ; i < count; ++i) { + iDependencyList.push_back(names[i]); + } + put_item_to_map(iImageVsDepList,iExeName.c_str(), iDependencyList); + if(names){ + delete [](reinterpret_cast(names)); + } + 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() const { + return iDependencyList; +} + +/** +Function responsible prepare the ExeVsId map. + +@internalComponent +@released +*/ +void E32Reader::PrepareExeVsIdMap() { + if(iExeVsIdData.size() == 0) { //Is not already prepared + IdData* 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; + put_item_to_map_2(iExeVsIdData,iExeName.c_str(),id); + } +} + +/** +Function responsible to return the Executable versus IdData container. + +@internalComponent +@released + +@return - returns iExeVsIdData +*/ +const ExeVsIdDataMap& E32Reader::GetExeVsIdMap() const { + return iExeVsIdData; +}