diff -r 0ff24a8f6ca2 -r 98307c651589 analyzetool/commandlineengine/src/CATBase.cpp --- a/analyzetool/commandlineengine/src/CATBase.cpp Fri Aug 27 11:37:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1299 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: Definitions for the class CATBase. -* -*/ - - -#include "../inc/CATBase.h" -#include "../inc/CATParseXML.h" - -// ----------------------------------------------------------------------------- -// CATBase::CATBase -// Constructor. -// ----------------------------------------------------------------------------- -CATBase::CATBase(void) -{ - LOG_FUNC_ENTRY("CATBase::CATBase"); -} - -// ----------------------------------------------------------------------------- -// CATBase::~CATBase -// Destructor. -// ----------------------------------------------------------------------------- -CATBase::~CATBase(void) -{ - LOG_FUNC_ENTRY("CATBase::~CATBase"); -} - -// ----------------------------------------------------------------------------- -// CATBase::ChangeToLower -// Converts any uppercase letter to lowercase. -// ----------------------------------------------------------------------------- -void CATBase::ChangeToLower( string& sInput ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ChangeToLower"); - int iLength = (int)sInput.size(); - for( int i = 0 ; i < iLength ; i++ ) - { - sInput[i] = (char)tolower( sInput[i] ); - } -} - -// ----------------------------------------------------------------------------- -// CATBase::ChangeToUpper -// Converts any uppercase letter to lowercase. -// ----------------------------------------------------------------------------- -void CATBase::ChangeToUpper( string& sInput ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ChangeToUpper"); - int iLength = (int)sInput.size(); - for( int i = 0 ; i < iLength ; i++ ) - { - sInput[i] = (char)toupper( sInput[i] ); - } -} - -// ----------------------------------------------------------------------------- -// CATBase::TrimString -// Remove spaces and tabulatures from beginning and -// end of given string. -// ----------------------------------------------------------------------------- -void CATBase::TrimString( string& sInput ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::TrimString"); - if( sInput.empty() ) - return; - //Remove spaces and tabulatures from beginning of string - while( !sInput.empty() && ( sInput[0] == SPACE_CHAR_VALUE || sInput[0] == TAB_CHAR_VALUE ) ) - { - sInput.erase( 0, 1 ); - } - //Remove spaces and tabulatures from end of string - while( !sInput.empty() && ( sInput[sInput.size()-1] == SPACE_CHAR_VALUE || sInput[sInput.size()-1] == TAB_CHAR_VALUE ) ) - { - sInput.erase( sInput.size()-1, 1 ); - } -} - -// ----------------------------------------------------------------------------- -// CATBase::SearchFileWithExtension -// Searches files with given extension from path. -// ----------------------------------------------------------------------------- -bool CATBase::SearchFileWithExtension( const char* pPathAndExt, bool bPrintErrors, string& sErrorLog ) -{ - LOG_FUNC_ENTRY("CATBase::SearchFileWithExtension"); - WIN32_FIND_DATA FindFileData; - HANDLE hFind; - string sTemp( pPathAndExt ); - - //Find file - hFind = FindFirstFile( sTemp.c_str(), &FindFileData ); - if (hFind == INVALID_HANDLE_VALUE) - { - string sErrorString( "No " ); - //Get extension - string sExt( pPathAndExt ); - sExt.erase( 0, sExt.find_last_of( "." ) ); - - sErrorString.append( sExt ); - sErrorString.append( " files in directory: " ); - - string sWithoutExt( pPathAndExt ); - sWithoutExt.erase( sWithoutExt.find_last_of( "." )-1, string::npos ); - sErrorString.append( sWithoutExt ); - - if( bPrintErrors ) - { - //string sTemp( pPathAndExt ); - //printf( "Can not find: %s.\n", pPathAndExt ); - printf( sErrorString.c_str() ); - } - else - { - //Add line change if sErrorString not empty - if( !sErrorLog.empty() ) - sErrorString.insert( 0, "\n" ); - sErrorLog.append( sErrorString ); - } - return false; - } - else - { - FindClose(hFind); - return true; - } -} - -// ----------------------------------------------------------------------------- -// CATBase::GetPathOrFileName -// Returns path to file or file name. -// ----------------------------------------------------------------------------- -string CATBase::GetPathOrFileName( bool bFileName, string sInput ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::GetPathOrFileName"); - string sRet; - size_t iPos = sInput.size(); - - sInput = ChangeSlashToBackSlash( sInput ); - - //Find character '\' starting from end of string - while( iPos > 0 && sInput[iPos] != '\\' ) - { - iPos--; - } - if( iPos > 0 ) - { - //Return file name - if( bFileName ) - { - sInput.erase( 0, iPos+1 ); - sRet = sInput; - } - else //Return file path - { - sInput.erase( iPos+1, string::npos ); - sRet = sInput; - } - } - else - { - if( !bFileName ) - return sRet; - sRet = sInput; - } - return sRet; -} - -// ----------------------------------------------------------------------------- -// CATBase::GetFileNameUsingExt -// Searches files with given extension from path. -// ----------------------------------------------------------------------------- -string CATBase::GetFileNameUsingExt( const char* pPathAndExt ) -{ - LOG_FUNC_ENTRY("CATBase::GetFileNameUsingExt"); - WIN32_FIND_DATA FindFileData; - HANDLE hFind; - string sRet; - - //Find file - hFind = FindFirstFile( pPathAndExt, &FindFileData ); - if (hFind == INVALID_HANDLE_VALUE) - { - //if( bPrintErrors ) - printf( "Can not find: %s.\n", pPathAndExt ); - return sRet; - } - else - { - sRet.append( FindFileData.cFileName ); - FindClose(hFind); - return sRet; - } -} - -// ----------------------------------------------------------------------------- -// CATBase::GetStringUntilNextSpace -// Function returns string from begin of given string until next space, -// characters until next space are removed from sInput string. -// ----------------------------------------------------------------------------- -string CATBase::GetStringUntilNextSpace( string& sInput, bool bEraseFromInput ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::GetStringUntilNextSpace"); - string sTemp( sInput ); - size_t iSize = sTemp.find_first_of(' '); - if( iSize != string::npos ) - { - sTemp.resize( iSize ); - if( bEraseFromInput ) - sInput.erase( 0, (iSize+1) ); - } - else - { - if ( bEraseFromInput ) - sInput.clear(); - } - return sTemp; -} - -// ----------------------------------------------------------------------------- -// CATBase::ChangeSlashToBackSlash -// Function changes all BackSlash characters to Slash character from -// given string. -// ----------------------------------------------------------------------------- -string CATBase::ChangeSlashToBackSlash( string sInput ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ChangeSlashToBackSlash"); - for( unsigned int i = 0 ; i < sInput.length() ; i++ ) - { - if( sInput[i] == '/' ) - { - sInput[i] = '\\'; - } - } - return sInput; -} - -// ----------------------------------------------------------------------------- -// CATBase::FileExists -// Check if given file exists. -// ----------------------------------------------------------------------------- -bool CATBase::FileExists( const char * pFilename ) -{ - LOG_FUNC_ENTRY("CATBase::FileExists"); - DWORD dwRet = GetFileAttributes( pFilename ); - if( dwRet == INVALID_FILE_ATTRIBUTES ) - { - return false; - } - else - { - //Is file directory? - if( dwRet & FILE_ATTRIBUTE_DIRECTORY ) - { - return false; - } - } - return true; -} - -bool CATBase::IsFileReadOnly( const char* pFilename ) -{ - LOG_FUNC_ENTRY("CATBase::IsFileReadOnly"); - DWORD dwRet = GetFileAttributes( pFilename ); - if( dwRet == INVALID_FILE_ATTRIBUTES ) - return false; - if( dwRet & FILE_ATTRIBUTE_READONLY ) - return true; - return false; -} - -bool CATBase::SetFileReadOnly( const char* pFileName ) -{ - LOG_FUNC_ENTRY("CATBase::SetFileReadOnly"); - DWORD dw = GetFileAttributes( pFileName ); - if( dw == INVALID_FILE_ATTRIBUTES ) - return false; - if( dw & FILE_ATTRIBUTE_READONLY ) - return true; - dw = dw | FILE_ATTRIBUTE_READONLY ; - if ( SetFileAttributes( pFileName, dw ) ) - return true; - return false; -} -bool CATBase::SetFileWritable( const char* pFileName ) -{ - LOG_FUNC_ENTRY("CATBase::SetFileWritable"); - DWORD dw = GetFileAttributes( pFileName ); - if( dw == INVALID_FILE_ATTRIBUTES ) - return false; - if( ! dw & FILE_ATTRIBUTE_READONLY ) - return true; - dw = dw ^ FILE_ATTRIBUTE_READONLY ; - if ( SetFileAttributes( pFileName, dw ) ) - return true; - return false; -} - -// ----------------------------------------------------------------------------- -// CATBase::FileCopyToPath -// Copies file to given path -// ----------------------------------------------------------------------------- -bool CATBase::FileCopyToPath(const string& sFile, const string& sToPath) -{ - LOG_FUNC_ENTRY("CATBase::FileCopyToPath"); - // Display message - cout << AT_MSG << "Copy " << sFile << AT_FILE_TO << sToPath << endl; - if ( sFile.empty() || sToPath.empty() ) - { - LOG_FUNC_EXIT("CATBase::FileCopyToPath Error, empty parameter"); - return false; - } - // Copy using windows api (seems not to work when relavite path .. - /* - // Full path where to copy - string sDestination = sToPath; - // Append '\' to string if not exists - if ( sDestination.length() > 1 ) - { - const char cLastChar = sDestination[ sDestination.length() -1 ]; - if ( cLastChar != DASH ) - sDestination.append("\\"); - } - int iRet = 0; - iRet = CopyFile( sFile.c_str(), sDestination.c_str(), false ); - if ( iRet != 0 ) - { - return false; - } - */ - string sCommand; - sCommand.append( "copy /Y \""); - sCommand.append( sFile ); - sCommand.append( "\" \"" ); - sCommand.append( sToPath ); - sCommand.append( "\" > nul 2>&1" ); - LOG_STRING( sCommand ); - int iRet = 0; - iRet = (int)system( sCommand.c_str() ); - if ( iRet != 0 ) - return false; - return true; -} - -// ----------------------------------------------------------------------------- -// CATBase::FileMoveToPath -// Copies file to given path -// ----------------------------------------------------------------------------- -bool CATBase::FileMoveToPath(const string& sFile, const string& sToPath) -{ - LOG_FUNC_ENTRY("CATBase::FileMoveToPath"); - // Display message - cout << AT_MSG << "Move " << sFile << AT_FILE_TO << sToPath << endl; - if ( sFile.empty() || sToPath.empty() ) - { - LOG_FUNC_EXIT("CATBase::FileMoveToPath Error, empty parameter"); - return false; - } - // Move (again windows api function does not support relative path .. in it - /* - // Get filename from sFile - string sFileName = GetPathOrFileName( true, sFile ); - // Full path where to copy - string sDestination = sToPath; - // Append '\' to string if not exists - if ( sDestination.length() > 1 ) - { - const char cLastChar = sDestination[ sDestination.length() -1 ]; - if ( cLastChar != DASH ) - sDestination.append("\\"); - } - int iRet = 0; - iRet = MoveFile( sFile.c_str(), sDestination.c_str()); - if ( iRet != 0 ) - { - return false; - } - */ - string sCommand; - sCommand.append( "move /Y \""); - sCommand.append( sFile ); - sCommand.append( "\" \"" ); - sCommand.append( sToPath ); - sCommand.append( "\" > nul 2>&1" ); - LOG_STRING( sCommand ); - int iRet = 0; - iRet = (int)system( sCommand.c_str() ); - if ( iRet != 0 ) - return false; - return true; -} -// ----------------------------------------------------------------------------- -// CATBase::CreateTempPath -// Creates temporary directory path for given mmp file -// ----------------------------------------------------------------------------- -string CATBase::CreateTempPath(const string& sMmpFileWithPath) -{ - LOG_FUNC_ENTRY("CATBase::CreateTempPath"); - string sTempPath = GetPathOrFileName( false, sMmpFileWithPath ); - sTempPath.append( AT_TEMP_DIR ); - sTempPath.append( "\\" ); - return sTempPath; -} - -// ----------------------------------------------------------------------------- -// CATBase::RemovePathAndExt -// Removes extension from file name and returns file name without extension. -// ----------------------------------------------------------------------------- -string CATBase::RemovePathAndExt( string sFileName, bool bReverseFindExt) -{ - LOG_LOW_FUNC_ENTRY("CATBase::RemovePathAndExt"); - string sRet; - sFileName = GetPathOrFileName( true, sFileName ); - if ( bReverseFindExt ) - { - // Remove extension from reverse - size_t iPos = sFileName.find_last_of('.'); - if( iPos != string::npos ) - { - sFileName.resize( sFileName.find_last_of('.') ); - sRet = sFileName; - } - } - else - { - // Remove extension finding first . - size_t iPos = sFileName.find_first_of('.'); - if( iPos != string::npos ) - { - sFileName.resize( sFileName.find_first_of('.') ); - sRet = sFileName; - } - } - return sRet; -} - -// ----------------------------------------------------------------------------- -// CATBase::IsTargetTypeSupported -// Checks from constant array is this target unsupported -// ----------------------------------------------------------------------------- -bool CATBase::IsTargetTypeSupported(string sTargetType) -{ - LOG_FUNC_ENTRY("CATBase::IsTargetTypeSupported"); - // compare to list - int iArraySize = sizeof( UNSUPPORTED_TARGET_TYPES ) / sizeof( string ); - for ( int i=0 ; i < iArraySize ; i++ ) - { - string sUnsupported = UNSUPPORTED_TARGET_TYPES[i]; - // lowercase both - ChangeToLower(sTargetType); - ChangeToLower(sUnsupported); - // compare - if ( sUnsupported.compare( sTargetType ) == 0 ) - { - return false; - } - } - return true; -} - -// ----------------------------------------------------------------------------- -// CATBase::IsTargetTypeKernelSide -// Checks from constant array is this target type kernel side -// ----------------------------------------------------------------------------- -bool CATBase::IsTargetTypeKernelSide(string sTargetType) -{ - LOG_FUNC_ENTRY("CATBase::IsTargetTypeKernelSide"); - // compare to list - int iArraySize = sizeof( KERNEL_SIDE_TARGET_TYPES ) / sizeof( string ); - for ( int i=0 ; i < iArraySize ; i++ ) - { - string sUnsupported = KERNEL_SIDE_TARGET_TYPES[i]; - // lowercase both - ChangeToLower(sTargetType); - ChangeToLower(sUnsupported); - // compare - if ( sUnsupported.compare( sTargetType ) == 0 ) - { - return true; - } - } - return false; -} - -bool CATBase::CheckVariant( const string& sEpocRoot, const string& sVariant ) -{ - LOG_FUNC_ENTRY("CATBase::CheckVariant"); - string sFileToCheck; - // Add epoc root - if( sEpocRoot.size() > 1 ) - sFileToCheck.append( sEpocRoot ); - // Add path - sFileToCheck.append( VARIANT_DIR ) ; - // Add variant - sFileToCheck.append( sVariant ); - // Add extension - sFileToCheck.append( VARIANT_FILE_EXTENSION ); - // check does FileExists - return FileExists( sFileToCheck.c_str() ); -} -bool CATBase::IsDefaultVariant( const string& sEpocRoot ) -{ - LOG_FUNC_ENTRY("CATBase::IsDefaultVariant"); - string sFileToCheck; - // Add epoc root - if( sEpocRoot.size() > 1 ) - sFileToCheck.append( sEpocRoot ); - // Add path - sFileToCheck.append( VARIANT_DIR ) ; - // Add variant - sFileToCheck.append( "DEFAULT" ); - // Add extension - sFileToCheck.append( VARIANT_FILE_EXTENSION ); - // check does FileExists - return FileExists( sFileToCheck.c_str() ); -} - -// ----------------------------------------------------------------------------- -// CATBase::FileDelete -// FileDelete -// ----------------------------------------------------------------------------- -bool CATBase::FileDelete(const string& sFile, bool bPrint ) -{ - LOG_FUNC_ENTRY("CATBase::FileDelete"); - // does file even exists - if ( !FileExists( sFile.c_str() ) ) - return false; - // delete file - int iRet = _unlink( sFile.c_str() ); - // if print on display error - if ( iRet && bPrint ) - { - cout << AT_MSG << "Error, deleting file " << sFile - << endl; - } - // if print on display message - else if ( !iRet && bPrint ) - { - cout << AT_MSG << "Delete " << sFile << endl; - } - // return - if ( iRet ) - return false; - return true; -} -// ----------------------------------------------------------------------------- -// CATBase::DirDelete -// Delelete directory -// ----------------------------------------------------------------------------- -bool CATBase::DirDelete(const string& sDir, bool bPrint ) -{ - LOG_FUNC_ENTRY("CATBase::DirDelete"); - if ( sDir.find( AT_TEMP_DIR) == string::npos ) - return false; - - if ( sDir.length() < 2 ) - return false; - - string sDir2; - if ( sDir.at(1) != ':' ) - { - char cDir[MAX_LINE_LENGTH]; - GetCurrentDirectory( MAX_LINE_LENGTH , cDir ); - sDir2.append( cDir ); - sDir2.append( "\\" ); - sDir2.append( sDir ); - } - else - sDir2.append( sDir ); - - // does directory exists - DWORD dwRet = GetFileAttributes( sDir2.c_str() ); - if ( dwRet == INVALID_FILE_ATTRIBUTES ) - return false; - else if ( ! (dwRet & FILE_ATTRIBUTE_DIRECTORY) ) - { - return false; - } - // Delete dir - string sCmd( "rmdir /S /Q " ); - sCmd.append( sDir2 ); - sCmd.append( " > nul 2>&1" ); - int iRet = (int)system( sCmd.c_str() ); - if ( iRet && bPrint) - { - cout << AT_MSG << "Error, deleting directory " << sDir2 << endl; - } - else if ( !iRet && bPrint ) - { - cout << AT_MSG << "Delete directory " << sDir2 << endl; - } - if ( iRet ) - return false; - return true; -} - -// ----------------------------------------------------------------------------- -// CATBase::DirCreate -// Create directory -// ----------------------------------------------------------------------------- -bool CATBase::DirCreate(const string& sDir, bool bPrint ) -{ - LOG_FUNC_ENTRY("CATBase::DirCreate"); - - if ( sDir.length() < 2 ) - return false; - - string sDir2; - if ( sDir.at(1) != ':' ) - { - char cDir[MAX_LINE_LENGTH]; - GetCurrentDirectory( MAX_LINE_LENGTH , cDir ); - sDir2.append( cDir ); - sDir2.append( "\\" ); - sDir2.append( sDir ); - } - else - sDir2.append( sDir ); - - // does directory exists - DWORD dwRet = GetFileAttributes( sDir2.c_str() ); - if ( dwRet != INVALID_FILE_ATTRIBUTES ) - { - if( dwRet & FILE_ATTRIBUTE_DIRECTORY ) - return false; - } - // Create dir - string sCmd( "mkdir " ); - sCmd.append( sDir2 ); - sCmd.append( " > nul 2>&1" ); - int iRet = (int)system( sCmd.c_str() ); - if ( iRet && bPrint) - { - cout << AT_MSG << "Error, creating directory " << sDir2 << endl; - } - else if ( !iRet && bPrint ) - { - cout << AT_MSG << "Directory " << sDir2 << " created" << endl; - } - if ( iRet ) - return false; - return true; -} - -// ----------------------------------------------------------------------------- -// CATBase::ConvertTCHARtoString -// Convert TCHAR* to std::string -// ----------------------------------------------------------------------------- -string CATBase::ConvertTCHARtoString(TCHAR* charArray) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ConvertTCHARtoString"); - // Loop char array - stringstream ss; - int iIndex = 0; - char c = (char) charArray[iIndex]; - // until null termination - while ( c != '\0' ) - { - ss << c; - iIndex++; - c = (char) charArray[iIndex]; - } - // return string - return ss.str(); -} - -// ----------------------------------------------------------------------------- -// CATBase::ConvertTCHARtoString -// Get list of files in directory -// ----------------------------------------------------------------------------- -vector CATBase::DirList(const string& sDirectory - , bool bListDirs, bool bAddPathToFile) -{ - LOG_FUNC_ENTRY("CATBase::DirList"); - // Create string to modify it - string sDir = sDirectory; - // Add if missing '\' & '*' to the sDirectory - if ( sDir.at( sDir.size()-1 ) != '\\' ) - sDir.append( "\\" ); - // Path to add to file string if specified - string sPath = sDir; - // Add * to for windows api to find all files - sDir.append( "*" ); - // convert directory string to LPCSTR - LPCSTR dir( sDir.c_str() ); - // vector to store file list - vector vFileList; - // Using win32 api to find list of files in directory - // file data "container" - WIN32_FIND_DATA fileData; - // handle to directory - HANDLE hFinder = FindFirstFile( dir, &fileData ); - if ( hFinder == INVALID_HANDLE_VALUE ) - { - // no files found - return vFileList; - } - // loop files add to vector and return - while( FindNextFile(hFinder, &fileData ) ) - { - DWORD dw = fileData.dwFileAttributes; - // skip if its directory and bListDirs not specified - if ( dw & FILE_ATTRIBUTE_DIRECTORY && ! bListDirs) - continue; - // add files to vector - string sFile = ConvertTCHARtoString( fileData.cFileName ); - // Add given path to file string if specified - if ( bAddPathToFile ) - sFile.insert( 0, sPath ); - vFileList.push_back( sFile ); - } - // Close file find handler - FindClose( hFinder ); - return vFileList; -} - -// ----------------------------------------------------------------------------- -// CATBase::ParseRelativePathToString -// ParseRelative -// ----------------------------------------------------------------------------- -void CATBase::ParseRelativePathString(string& sPathString) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ParseRelativePathString"); - string sParsed; - // find .. - size_t iDots = sPathString.find( ".." ); - while ( iDots != string::npos ) - { - RemoveRelativePath( sPathString, iDots ); - iDots = sPathString.find( ".." ); - } -} - -// ----------------------------------------------------------------------------- -// CATBase::RemoveRelativePath -// Remove relative path from string (using given index) -// ----------------------------------------------------------------------------- -void CATBase::RemoveRelativePath(string& sString, size_t iDots) -{ - LOG_LOW_FUNC_ENTRY("CATBase::RemoveRelativePath"); - // Chck if accidentally given wrong parameter - if ( iDots == string::npos - || iDots < 1 ) - return; - // Parsed string - string sParsed; - // Find position of last backslash before dots - size_t i = sString.rfind("\\", iDots-2 ); - // Pickup start part (depending is the backslash at last parts first char) - if ( sString.at(iDots+2) != '\\' ) - sParsed = sString.substr( 0, i+1 ) ; - else - sParsed = sString.substr( 0, i ); - // Pick up last part - sParsed.append( sString.substr( iDots+2, sString.size() ) ); - sString = sParsed; -} - -// ----------------------------------------------------------------------------- -// Get extension from given string -// ----------------------------------------------------------------------------- -string CATBase::GetExtension(const string& sString) -{ - LOG_LOW_FUNC_ENTRY("CATBase::GetExtension"); - // find last . - size_t iDot = sString.find_last_of( "." ); - // return string after . if found - if ( iDot != string::npos ) - return sString.substr(iDot+1, sString.length()-(iDot+1) ); - // otherwise return given string - return sString; -} - -// ----------------------------------------------------------------------------- -// CATBase::DirectoryExists -// Check if given directory exists. -// ----------------------------------------------------------------------------- -bool CATBase::DirectoryExists( const char* pDirname ) -{ - LOG_FUNC_ENTRY("CATBase::DirectoryExists"); - size_t iLenght = strlen( pDirname ); - - if ( iLenght < 2 ) - return false; - - string sDir; - if ( pDirname[1] != ':' ) - { - char cDir[MAX_LINE_LENGTH]; - GetCurrentDirectory( MAX_LINE_LENGTH , cDir ); - sDir.append( cDir ); - sDir.append( "\\" ); - sDir.append( pDirname ); - } - else - sDir.append( pDirname ); - - DWORD dwRet = GetFileAttributes( sDir.c_str() ); - if( dwRet == INVALID_FILE_ATTRIBUTES ) - { - return false; - } - else - { - //Is file directory? - if( dwRet & FILE_ATTRIBUTE_DIRECTORY ) - { - return true; - } - else - { - return false; - } - } -} - -// ----------------------------------------------------------------------------- -// CATBase::ConvertUnixPathToWin -// ----------------------------------------------------------------------------- -void CATBase::ConvertUnixPathToWin( string& sPath ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ConvertUnixPathToWin"); - size_t iSpot = 0; - // convert '/' to '\' - iSpot = sPath.find( "/" ); - while( iSpot != string::npos ) - { - sPath.replace(iSpot,1, "\\"); - iSpot = sPath.find( "/", iSpot+1 ); - } - // convert '\\' to '\' - iSpot = sPath.find( "\\\\" ); - while( iSpot != string::npos ) - { - sPath.replace(iSpot,2,"\\"); - iSpot = sPath.find( "\\\\" ); - } -} - -// ----------------------------------------------------------------------------- -// CATBase::RemoveAllAfterDotIfTwoDots -// Removes all after first '.' -// if given string contains 2 '.' or more -// ----------------------------------------------------------------------------- -void CATBase::RemoveAllAfterDotIfTwoDots(string& sModName) -{ - LOG_LOW_FUNC_ENTRY("CATBase::RemoveAllAfterDotIfTwoDots"); - // did we find variable? - size_t found; - // Find first '.' - found = sModName.find("."); - if ( found != string::npos ) - { - // Try find second '.' - found = sModName.find(".", found+1); - if ( found != string::npos ) - { - // Remove all after first '.' - sModName = sModName.substr(0, sModName.find(".")+1 ); - } - } -} -// ----------------------------------------------------------------------------- -// CATBase::CreateTemporaryCpp -// ----------------------------------------------------------------------------- -bool CATBase::CreateTemporaryCpp( const string& sId, - const string& sPath - ,const string& sS60FileName - ,int iLogOption - ,int iIsDebug - ,int iAllocCallStackSize - ,int iFreeCallStackSize ) -{ - LOG_FUNC_ENTRY("CATBase::CreateTemporaryCpp"); - // Add slash to path if missing - string sTempCpp = sPath; - if( sTempCpp.at( sTempCpp.length() - 1 ) != '\\' ) - sTempCpp.append("\\"); - - // append temporary cpp name with id in middle - sTempCpp.append( AT_TEMP_CPP_LOWER_START ); - sTempCpp.append( sId ); - sTempCpp.append( AT_TEMP_CPP_LOWER_END ); - - //Open and truncate temporary cpp - ofstream out( sTempCpp.c_str() , ios::trunc ); - if ( ! out.good() ) - { - out.close(); - return false; - } - // Headers - out << "#include "; - // Is debug - out << "\nconst TInt ATTempDebug(" << iIsDebug << ");"; - // Log option - out << "\nconst TInt ATTempLogOption(" << iLogOption << ");"; - // Alloc call stack - out << "\nconst TInt ATTempAllocCallStackSize(" << iAllocCallStackSize << ");"; - // Free call stack - out << "\nconst TInt ATTempFreeCallStackSize(" << iFreeCallStackSize << ");"; - // Log file name - out << "\n_LIT( ATTempLogFileName, \"" << sS60FileName << "\" );"; - // Version number - out << "\n_LIT( ATTempVersion, \"" << ATOOL_COMPATIBILITY_STRING << "\" );"; - // Variable functions use enumeration values that are defined in memoryhook (customuser.h) - // We use constants here so that we don't need to include the header file, wich - // might cause problems. -/* Enumeration copied to comment for notes - enum TATOptions - { - ELogFileName = 1, - EVersion = 2 , - ELogOption = 3, - EDebug = 4, - EAllocCallStackSize = 5, - EFreeCallStackSize = 6 - }; -*/ - out << "\nTInt GetInt( const TUint8 aType )"; - out << "\n{"; - out << "\nswitch( aType )"; - out << "\n{"; - out << "\ncase 4: return ATTempDebug; "; - out << "\ncase 3: return ATTempLogOption;"; - out << "\ncase 5: return ATTempAllocCallStackSize;"; - out << "\ncase 6: return ATTempFreeCallStackSize;"; - out << "\ndefault: return KErrArgument;"; - out << "\n}"; - out << "\n}"; - out << "\nTPtrC GetString( const TUint8 aType )"; - out << "\n{"; - out << "\nswitch( aType )"; - out << "\n{"; - out << "\ncase 1: return ATTempLogFileName();"; - out << "\ncase 2: return ATTempVersion();"; - out << "\ndefault: return KNullDesC();"; - out << "\n}"; - out << "\n}"; - - /** Todo: Old way of separate functions, these here for backup support and to ease testing. */ - /** Unnessesary in the future, so can be removed then (1.8.2). */ - - out << "\n_LIT( KFileName, \""; - out << sS60FileName; - out << "\" );\n"; - - // Hardcoded version number for support. - out << "\n/* The AnalyzeTool version number used. */"; - out << "\n_LIT( KAtoolVersion, \"1.7.5;1.9.1\" );\n"; - - out << "\nconst TFileName LogFileName()"; - out << "\n {"; - out << "\n return TFileName( KFileName() );"; - out << "\n }"; - - out << "\nTUint32 AllocCallStackSize()"; - out << "\n {"; - out << "\n return TUint32( "; - out << iAllocCallStackSize; - out << " );\n"; - out << "\n }"; - - out << "\nTUint32 FreeCallStackSize()"; - out << "\n {"; - out << "\n return TUint32( "; - out << iFreeCallStackSize; - out << " );\n"; - out << "\n }"; - - out << "\nconst TFileName AtoolVersion()"; - out << "\n {"; - out << "\n return TFileName( KAtoolVersion() );"; - out << "\n }"; - - out << "\nTUint32 LogOption()"; - out << "\n {"; - out << "\n return TUint32( "; - out << iLogOption; - out << " );"; - out << "\n }"; - - out << "\nTUint32 IsDebug()"; - out << "\n {"; - out << "\n return TUint32( "; - out << iIsDebug; - out << " );"; - out << "\n }"; - - // End of file and close - out << "\n\n// End of File\n"; - out.close(); - cout << AT_MSG << "Created " << sTempCpp << endl; - return true; -} - -// ----------------------------------------------------------------------------- -// CATBase::IsDataFile -// ----------------------------------------------------------------------------- -bool CATBase::IsDataFile( string sFile ) -{ - LOG_FUNC_ENTRY("CATBase::IsDataFile"); - // Check that sFile not empty - if ( sFile.empty() || sFile.length() < 1 ) - return false; - - // Temporary line char array. - char cLineFromFile[MAX_LINE_LENGTH]; - //Open file - ifstream in( sFile.c_str() ); - - //File open ok? - if( !in.good() ) - return false; - - //Read all lines - in.getline( cLineFromFile, MAX_LINE_LENGTH ); - - string sLineFromFile( cLineFromFile ); - in.close(); - if( sLineFromFile.find( "DATA_FILE_VERSION" ) != string::npos ) - return true; - else - return false; -} - - -// ----------------------------------------------------------------------------- -// CATBase::ParseStringToVector -// ----------------------------------------------------------------------------- -vector CATBase::ParseStringToVector( const string& sInput, char separator ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::ParseStringToVector"); - string sString(sInput); - // Elements vector - vector vStrings; - size_t iPos = sString.find( separator ); - // If can not find it return vector with just one element - if ( iPos == string::npos ) - { - // Don't add empty item into vector. - if ( sString.size() > 0 ) - vStrings.push_back( sString ); - return vStrings; - } - // Loop elements - while( iPos != string::npos ) - { - string sElement = sString.substr(0, iPos); - vStrings.push_back( sElement ); - sString.erase(0, iPos +1 ); - iPos = sString.find( separator ); - } - // Add last element if any - if ( sString.size() > 0 ) - vStrings.push_back( sString ); - // Return elements - return vStrings; -} - -// ----------------------------------------------------------------------------- -// CATBase::FilterString -// Filter string out of unwanted characters. The list of allowed -// characters is defined in CFILTERSTRING. -// ----------------------------------------------------------------------------- -string CATBase::FilterString( const string& sString ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::FilterString"); - string sFiltered; - for( size_t i = 0 ; i < sString.length() ; i++ ) - { - const char p = sString.at( i ); - if ( strchr( CFILTERSTRING, p ) != 0 ) - sFiltered.push_back( p ); - } - return sFiltered; -} - -// ----------------------------------------------------------------------------- -// CATBase::FilterExtraSpaces -// Replaces multiple continuous spaces with single. Won't leave -// spaces in start or end of string. -// ----------------------------------------------------------------------------- -void CATBase::FilterExtraSpaces( string& sString ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::FilterExtraSpaces"); - string sFiltered; - // Loop thru char array. - for( size_t i = 0 ; i < sString.length(); i++ ) - { - // Is char space? - if ( sString.at( i ) == ' ' ) - { - // Pick up space if filtered does not contain char as last. - if ( sFiltered.rbegin() == sFiltered.rend() ) - sFiltered.push_back( sString.at( i ) ); - else if ( * ( sFiltered.rbegin() ) != ' ' ) - sFiltered.push_back( sString.at( i ) ); - } - else - sFiltered.push_back( sString.at( i ) ); - } - - // Remove first and/or last character if it is space. - if ( sFiltered.begin() != sFiltered.end() ) - { - if( * ( sFiltered.begin() ) == ' ' ) - sFiltered.erase( 0, 1 ); - } - if ( sFiltered.rbegin() != sFiltered.rend() ) - { - if( * ( sFiltered.rbegin() ) == ' ' ) - sFiltered.resize( sFiltered.length()-1 ); - } - sString = sFiltered; -} - - -bool CATBase::hexToDec( string& sHex, unsigned int& iDec ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::hexToDec"); - istringstream ss( sHex ); - ss.setf( ios::hex, ios::basefield ); - if( ( ss >> iDec ) ) - return true; - return false; -} - -bool CATBase::hexToDec( string& sHex, int& iDec ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::hexToDec"); - istringstream ss( sHex ); - ss.setf( ios::hex, ios::basefield ); - if( ( ss >> iDec ) ) - return true; - return false; -} - -bool CATBase::hexToDec( string& sHex, unsigned long& ulDec ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::hexToDec"); - istringstream ss( sHex ); - ss.setf( ios::hex, ios::basefield ); - if( ( ss >> ulDec ) ) - return true; - return false; -} - -bool CATBase::hexToDec( string& sHex, unsigned long long& ullDec ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::hexToDec"); - istringstream ss( sHex ); - ss.setf( ios::hex, ios::basefield ); - if( ( ss >> ullDec ) ) - return true; - return false; -} - -/** -* Used to create array of integer & hex value pairs. -*/ -struct CHexMap -{ - char chr; - int value; -}; - -// ----------------------------------------------------------------------------- -// CATBase::_httoi -// ----------------------------------------------------------------------------- -unsigned long CATBase::_httoi(const char *value) -{ - LOG_LOW_FUNC_ENTRY("CATBase::_httoi"); - unsigned long l; - string s( value ); - if ( CATBase::hexToDec( s, l ) ) - return l; - return 0; -} - - -// ----------------------------------------------------------------------------- -// CATBase::NumberToHexString(int) -// ----------------------------------------------------------------------------- -string CATBase::NumberToHexString( unsigned int i ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::IntToHexString"); - stringstream ss; - ss << "0x" << hex << i; - string retval; retval = ss.str().c_str(); - return retval; -} -// ----------------------------------------------------------------------------- -// CATBase::NumberToHexString(long) -// ----------------------------------------------------------------------------- -string CATBase::NumberToHexString( unsigned long i ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::IntToHexString"); - stringstream ss; - ss << "0x" << hex << i; - string retval; retval = ss.str().c_str(); - return retval; -} - -// ----------------------------------------------------------------------------- -// CATBase::IsHexCharacter -// ----------------------------------------------------------------------------- -bool CATBase::IsHexCharacter(const TCHAR *value) -{ - LOG_LOW_FUNC_ENTRY("CATBase::IsHexCharacter"); - const int HexMapL = 22; - CHexMap HexMap[HexMapL] = - { - {'0', 0}, {'1', 1}, - {'2', 2}, {'3', 3}, - {'4', 4}, {'5', 5}, - {'6', 6}, {'7', 7}, - {'8', 8}, {'9', 9}, - {'A', 10}, {'B', 11}, - {'C', 12}, {'D', 13}, - {'E', 14}, {'F', 15}, - {'a', 10}, {'b', 11}, - {'c', 12}, {'d', 13}, - {'e', 14}, {'f', 15} - }; - bool found = false; - for (int i = 0; i < HexMapL; i++) - { - if(HexMap[i].chr == *value) - { - found = true; - break; - } - } - return found; -} - -// ----------------------------------------------------------------------------- -// CATBase::IsAscii(const char*,const unsigned int) -// ----------------------------------------------------------------------------- -bool CATBase::IsAscii( const char* pInput, const unsigned int iLength ) -{ - LOG_LOW_FUNC_ENTRY("CATBase::IsAscii"); - bool bRet = true; - const char* pPoint = pInput; - for( unsigned int i = 0 ; i < iLength ; i++) - { - if( !__isascii(*pPoint) ) - { - bRet = false; - break; - } - pPoint++; - } - return bRet; -} - -// ----------------------------------------------------------------------------- -// CATBase::GetEpocRoot( string& sEpocRoot ) -// ----------------------------------------------------------------------------- -bool CATBase::GetEpocRoot( string& sEpocRoot ) -{ - LOG_FUNC_ENTRY( "CATBase::GetEpocRoot" ); - bool bRet = true; - //Find EPOCROOT from environment variable - char* pEpocRoot = getenv ("EPOCROOT"); - if( pEpocRoot == NULL ) - { - const char pDevicesPath[] = "C:\\Program Files\\Common Files\\Symbian\\devices.xml"; - CATParseXML parser; - //Find EPOCROOT from devices - sEpocRoot = parser.GetEpocRootPathFromXML(pDevicesPath); - if( sEpocRoot.empty() ) - { - printf("EPOCROOT not set to environment variables.\n"); - bRet = false; - } - } - else - { - sEpocRoot.append( pEpocRoot ); - LOG_STRING( "EpocRoot :" << sEpocRoot ); - } - //Remove trailing slash - if ( sEpocRoot.size() > 1 && sEpocRoot[ sEpocRoot.length()-1 ] == '\\' ) - sEpocRoot.resize( sEpocRoot.length()-1 ); - return bRet; -} -//End of file