Don't mess around with EPOCROOT until actually entering raptor so we know what the original was
Put the original epocroot back on the front of the whatcomp output. This allows what output to be
either relative or absolute depending on what your epocroot is.
/*
* 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;
}