diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/dumpsis/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/dumpsis/main.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,187 @@ +/* +* Copyright (c) 2004-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: +* +*/ + +#ifdef _MSC_VER +#pragma warning (disable: 4786) +#endif // _MSC_VER + + +#include +#include +#include +#include +#include +#include + +#include "utility_interface.h" +#include "options.h" +#include "siscontents.h" +#include "siscontroller.h" +#include "dumpsis.h" + +enum DumpsisException + { + EDumpsisExecutionSuccessful, + EDumpsisExecutionError, + EDumpsisUnknownError + }; + +void DisplayFileCapList(CDumpSis& dumpsis, Options& aOptions) + { + TFileCapTestList fileList; + dumpsis.GetCapVerifiedFileList(fileList); + int fileCount = fileList.size(); + + if(fileCount != 0 && aOptions.CreateECI() && !aOptions.Verbose()) + { + std::wcout << L"[FILELIST]" << std::endl; + } + + for(int i = 0; i < fileCount; ++i) + { + std::wcout << std::endl; + const CSISFileDescription* fdesc = fileList[i].iFileDesc; + std::wstring str = fdesc->Target().GetString(); + std::wcout << L"File" << i+1; + if(aOptions.CreateECI() && !aOptions.Verbose()) + { + std::wcout << L"=" << str; + std::wcout << L"@" << fdesc->Capabilities() << std::endl; + } + else + { + std::wcout << L":" << str; + std::vector capList; + fdesc->GetCapabilityList(capList); + std::wcout << std::endl; + for(int j = 0; j < capList.size(); ++j) + { + std::wcout << L"\t" << capList[j] << std::endl; + } + } + } + if(!aOptions.Verbose()) + { + for(int i = 0; i < fileCount; ++i) + { + if(fileList[i].iActualCap < 0) + { + continue; + } + if(aOptions.CreateECI() && fileList[i].iFileDesc->Capabilities() == 0) + { + std::wcout << L"0" << std::endl; + } + else if(!aOptions.CreateECI()) + { + std::wcout << std::endl; + std::wcout << L"Executable" << i+1; + if(fileList[i].iActualCap) + { + std::wcout << L": capabilities matched with the SIS file header capabilities"; + } + else + { + std::wcout << L": capabilities mismatched with the SIS file header capabilities"; + } + std::wcout << std::endl << std::endl; + } + } + } + } + +int main(int argc, char *argv[]) + { + wchar_t **argv1 = CommandLineArgs(argc,argv); + + Options* options = NULL; + int retVal = EDumpsisExecutionSuccessful; + try + { + options = new Options (argc, argv1); + + SISLogger::SetStream(std::wcout); + + CDumpSis dumpsis(options->SISFileName(), options->Verbose()); + + CDumpSis::TExtractionLevel extractionLevel = CDumpSis::ENone; + + if(options->ExtractFiles()) + { + extractionLevel = (options->Verbose())? CDumpSis::EEverything : CDumpSis::EAllButCerts; + } + else + { + extractionLevel = CDumpSis::EAllDataFiles; + } + + dumpsis.ExtractFiles(options->ExtractDirectory(), extractionLevel); + + if(options->Listexe()) + { + DisplayFileCapList(dumpsis, *options); + } + } + catch (CmdLineException err) + { + Options::DisplayError (err); + retVal = EDumpsisExecutionError; + } + catch(CSISException oops) + { + switch(oops.ErrorCategory()) + { + case CSISException::EFileProblem: + std::cerr << "cannot open specified SIS file for reading" << std::endl; + break; + case CSISException::EFileFormat: + case CSISException::EMemory: + case CSISException::EIllegal: + std::cerr << "error whilst parsing file contents" << std::endl; + break; + case CSISException::ELegacyFormat: + std::cerr << "This is an old format (pre 9.x) SIS file, which is no longer supported" << std::endl; + break; + case CSISException::ECompress: + std::cerr << "error while decompressing" << std::endl; + break; + default: + std::cerr << "unknown error reading SIS file" << std::endl; + break; + } + retVal = EDumpsisExecutionError; + } + catch (std::exception &err) + { + std::cerr << "Error: " << err.what() << std::endl; + retVal = EDumpsisExecutionError; + } + catch (...) + { + retVal = EDumpsisUnknownError; + std::cerr << "Unknown error"; + } + + if ((NULL != options) && (options->PauseOnExit())) + { + std::cout << argv[0] << " Finished" << std::endl; + getchar (); + } + delete options; + + return retVal; + }