diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/source/interpretsislib/adornedutilities.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/source/interpretsislib/adornedutilities.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,134 @@ +/* +* Copyright (c) 2008-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 "adornedutilities.h" +#include +#include +#include + +#include "stringutils.h" +#include "symbiantypes.h" +#include "logger.h" +#include "is_utils.h" + +const std::wstring KAdornedWildCharString = L"{????????}"; +const int KFileNameUnadornedPartLength = 10; + + +void GetUnadornedFileName(const std::wstring& aAdornedFilename, std::wstring& aUnadornedFilename) +{ + aUnadornedFilename = aAdornedFilename; + int length = aAdornedFilename.length(); + + // check to see if the name is adorned. If so, remove the version number + int startVersion = aAdornedFilename.find('{'); + if (startVersion != 0) + { + int endVersion = aAdornedFilename.find('}'); + if ((endVersion != 0) && (endVersion - startVersion == (KFileNameUnadornedPartLength - 1))) + { + // get unadorned version of the file + aUnadornedFilename = aAdornedFilename.substr(0,startVersion); + + // for names ending with } i.e: DummyFile{12345678} nothing is to be appended to + // aUnadornedFilename in such a case aAdornedFilename.Mid(endVersion+1) would cause a crash + if (endVersion < (length - 1)) + { + aUnadornedFilename.append(aAdornedFilename.substr(endVersion + 1,length)); + } + } + } +} + +bool IsAdornedVariationOf(const std::wstring& aFileName1, const std::wstring& aFileName2) +{ + std::wstring unadornedFileName1; + GetUnadornedFileName(aFileName1,unadornedFileName1); + + std::wstring unadornedFileName2; + GetUnadornedFileName(aFileName2,unadornedFileName2); + + // Check whether filename2 is a variant of filename1 + // e.g: d:\sys\bin\DummyDll{000A0001}.dll is considered a variant of c:\sys\bin\DummyDll.dll + // because they both break down to \sys\bin\DummyDll.dll + std::wstring fileName1Path(StringUtils::Path(unadornedFileName1)); + std::wstring fileName1NameAndExt(StringUtils::NameAndExt(unadornedFileName1)); + + std::wstring fileName2Path(StringUtils::Path(unadornedFileName2)); + std::wstring fileName2NameAndExt(StringUtils::NameAndExt(unadornedFileName2)); + + return ((fileName1Path == fileName2Path) && (fileName1NameAndExt == fileName2NameAndExt)); +} + +void FindAllAdornedVariants(const std::wstring& aSearchNameWild, const std::wstring& aSearchPath, std::list& aAdornedFileNamesFound, const DrivesMap& aDriveMap) +{ + DrivesMap::const_iterator it = aDriveMap.begin(); + DrivesMap::const_iterator end = aDriveMap.end(); + + for ( ; it != end ; ++it) + { + // drive to search on + int disk = tolower(it->first); + std::wstring drive = L"$:"; + drive[0] = disk; + + std::wstring searchPath(aSearchPath); + + // actual readable directory + std::wstring localDir = it->second->iDir; + + // using ROM/ROFS logs for the z drive, searching for adorned variants is handled later. + if (disk == 'z' && localDir.empty()) + continue; + + // convert to the local path and see if the file exists on the drive + ConvertToLocalPath( searchPath, localDir ); + + // search this directory + std::list dirContents; + GetDirContents(searchPath, dirContents); + + std::list::iterator curr = dirContents.begin(); + std::list::iterator end = dirContents.end(); + while (curr != end) + { + std::wstring dirFile(*curr); + + if (StringUtils::WildcardCompare(aSearchNameWild,dirFile)) + { + // found an adorned file, add to the list of adorned names found + std::wstringstream foundFile; + foundFile << drive << aSearchPath << dirFile; + aAdornedFileNamesFound.push_back(foundFile.str()); + } + + ++curr; + } + } +} + +void GenerateSearchNameWild(const std::wstring& aFileName, std::wstring& aSearchNameWild) +{ + std::wstring unadornedFileName; + GetUnadornedFileName(aFileName, unadornedFileName); + + aSearchNameWild = StringUtils::Name(unadornedFileName); + aSearchNameWild.append(KAdornedWildCharString); + aSearchNameWild.append(StringUtils::Ext(unadornedFileName)); +}