diff -r 000000000000 -r ba25891c3a9e secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/sisfiledata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swianalysistoolkit/source/chainvalidityandinstallfilestatustools/dumpinstallfilestatustool/sisfiledata.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,108 @@ +/* +* Copyright (c) 2005-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: +* +*/ + + +#include "sisfiledata.h" +#include "osinterface.h" +using namespace std; + +SISFileData::SISFileData() + :iExeLabelAndCapabilities (NULL) + { + } + +int SISFileData::EciFileRead(const char* aFile , const Options& aOptions) + { + ifstream file; + string line ; + string exeCapabilitiesFile = ".\\"; + string exeCapabilities ; + string exeKey ; + string exeValue; + unsigned int exeKeyloc = 0 ; + unsigned int exeValueloc = 0; + exeCapabilitiesFile.append(aFile); + file.open(aFile); + if(!file) + { + throw EUnableToOpenFile; + } + else + { + ExeLabelAndCapabilitiesList* iNext = NULL; + ExeLabelAndCapabilitiesList* node = NULL ; + ExeLabelAndCapabilitiesList* nextNode = NULL; + while(!file.eof()) + { + getline(file,line); + if((exeKeyloc = line.find("@",0)) != string::npos) + { + int certCapabilities = 0; + exeKey = line.substr(0,line.find("=",0)); + exeValueloc = line.find("=",0); + exeValue = line.substr(line.find("=",exeValueloc)+1); + iExeName = exeValue.substr(0,exeValue.find("@",0)); + if((iExeName.find(".exe") != string::npos) || (iExeName.find(".dll") !=string::npos)) + { + node = new ExeLabelAndCapabilitiesList; + node->iExeCapability = 0; + node->iExeLabel = iExeName; + exeCapabilities = exeValue.substr(exeValue.find("@",0)+1); + //convert string to integer in order to form an integer vector. + std::istringstream stream(exeCapabilities); + stream >> certCapabilities; + node -> iExeCapability = certCapabilities ; + node -> iNext = NULL; + //when it is the first node in the list + if(iExeLabelAndCapabilities == NULL) + { + iExeLabelAndCapabilities = node; + } + else + { + nextNode = iExeLabelAndCapabilities; + while(nextNode -> iNext != NULL) + { + nextNode = nextNode->iNext; + } + + nextNode -> iNext = node; + } + } + } + } + } + + file.close(); + if(!iExeLabelAndCapabilities) + { + cout << "SIS File doesn't contain any executables." << endl; + return 0; + } + + return 1; + } + +SISFileData::~SISFileData() + { + for(ExeLabelAndCapabilitiesList* list = iExeLabelAndCapabilities ; list ; ) + { + ExeLabelAndCapabilitiesList* next = list -> iNext; + delete list; + list = next; + } + } \ No newline at end of file