diff -r 98b66e4fb0be -r 26b6f0522fd8 appinstaller/AppinstUi/Daemon/Src/versionRevisor.cpp --- a/appinstaller/AppinstUi/Daemon/Src/versionRevisor.cpp Fri Apr 16 15:05:20 2010 +0300 +++ b/appinstaller/AppinstUi/Daemon/Src/versionRevisor.cpp Mon May 03 12:38:03 2010 +0300 @@ -45,605 +45,609 @@ const TInt KVerRevSisVersionSame = 300; const TInt KVerRevSisVersionNewer = 400; -using namespace Swi; -//namespace Swi -// { -// ----------------------------------------------------------------------- -// Two-phased constructor -// ----------------------------------------------------------------------- -// -CVersionRevisor* CVersionRevisor::NewL( CProgramStatus& aMainStatus ) - { - CVersionRevisor* self = NewLC( aMainStatus ); - CleanupStack::Pop( self ); - return self; - } - -// ------------------------------------------------------------------------ -// Two-phased constructor -// ------------------------------------------------------------------------ -// -CVersionRevisor* CVersionRevisor::NewLC( CProgramStatus& aMainStatus ) - { - CVersionRevisor* self = new (ELeave) CVersionRevisor; - CleanupStack::PushL( self ); - self->ConstructL( aMainStatus ); - return self; - } - -// ----------------------------------------------------------------------- -// 2nd constructor -// ----------------------------------------------------------------------- -// -void CVersionRevisor::ConstructL( CProgramStatus& aMainStatus ) - { - FLOG( _L("[VersionRev] ConstructL start") ); - iSisUninstaller = NULL; - iStartupReason = KErrNone; - // Note revisor do not own this instance. - iProgramStatus = &aMainStatus; - User::LeaveIfError( iFs.Connect() ); - // Get system startup reason. - TRAP_IGNORE( StartUpReasonL() ); - FLOG( _L("[VersionRev] ConstructL end") ); - } - -// ----------------------------------------------------------------------- -// c++ destructor -// ----------------------------------------------------------------------- -// -CVersionRevisor::~CVersionRevisor() +namespace Swi { - FLOG( _L("[VersionRev] ~CVersionRevisor start") ); - delete iSisUninstaller; - iSisUninstaller = NULL; - iStubDataArray.ResetAndDestroy(); - iFs.Close(); - FLOG( _L("[VersionRev] ~CVersionRevisor end") ); - } - -// ----------------------------------------------------------------------- -// Starts uninstall process. -// ----------------------------------------------------------------------- -// -TInt CVersionRevisor::StartProcessL() - { - FLOG( _L("[VersionRev] StartProcessL start") ); - TInt err = KErrNone; + // ----------------------------------------------------------------------- + // Two-phased constructor + // ----------------------------------------------------------------------- + // + CVersionRevisor* CVersionRevisor::NewL( CProgramStatus& aMainStatus ) + { + CVersionRevisor* self = NewLC( aMainStatus ); + CleanupStack::Pop( self ); + return self; + } + + // ------------------------------------------------------------------------ + // Two-phased constructor + // ------------------------------------------------------------------------ + // + CVersionRevisor* CVersionRevisor::NewLC( CProgramStatus& aMainStatus ) + { + CVersionRevisor* self = new (ELeave) CVersionRevisor; + CleanupStack::PushL( self ); + self->ConstructL( aMainStatus ); + return self; + } + + // ----------------------------------------------------------------------- + // 2nd constructor + // ----------------------------------------------------------------------- + // + void CVersionRevisor::ConstructL( CProgramStatus& aMainStatus ) + { + FLOG( _L("[VersionRev] ConstructL start") ); + iSisUninstaller = NULL; + iStartupReason = KErrNone; + // Note revisor do not own this instance. + iProgramStatus = &aMainStatus; + User::LeaveIfError( iFs.Connect() ); + // Get system startup reason. + TRAP_IGNORE( StartUpReasonL() ); + FLOG( _L("[VersionRev] ConstructL end") ); + } - // If firmware update is done, start scan process. - if( iStartupReason == EFirmwareUpdate ) - { - iSisUninstaller = - CSisPkgUninstaller::NewL( *iProgramStatus, *this ); - - TRAP( err, ProcessStubFilesL() ); - FLOG_1( _L("[VersionRev] Process stub TRAP error = %d"), err ); - - TRAP( err, ProcessSisRegistryL() ); - FLOG_1( _L("[VersionRev] Process sis TRAP error = %d"), err ); - - iSisUninstaller->StartUninstallL(); - } - else - { - FLOG( _L("[VersionRev] StartProcessL: No firmware update") ); - // Ok, no need to start process. Leave so main will call delete. - User::Leave( KErrAbort ); - } - - FLOG( _L("[VersionRev] StartProcessL end") ); - return KErrNone; - } + // ----------------------------------------------------------------------- + // c++ destructor + // ----------------------------------------------------------------------- + // + CVersionRevisor::~CVersionRevisor() + { + FLOG( _L("[VersionRev] ~CVersionRevisor start") ); + delete iSisUninstaller; + iSisUninstaller = NULL; + iStubDataArray.ResetAndDestroy(); + iFs.Close(); + FLOG( _L("[VersionRev] ~CVersionRevisor end") ); + } + + // ----------------------------------------------------------------------- + // Starts uninstall process. + // ----------------------------------------------------------------------- + // + TInt CVersionRevisor::StartProcessL() + { + FLOG( _L("[VersionRev] StartProcessL start") ); + TInt err = KErrNone; + +//#ifdef _DEBUG +//FLOG( _L("[VersionRev] FOR TESTING: STARTUP REASON = Firmwareupdate ! ! !") ); +//iStartupReason = EFirmwareUpdate; +//#endif -// ----------------------------------------------------------------------- -// Reads stub sis files. -// ----------------------------------------------------------------------- -// -TInt CVersionRevisor::ProcessStubFilesL() - { - FLOG( _L("[VersionRev] ProcessStubFilesL start") ); - CDir* dir; - - TInt err = iFs.GetDir( - KVerRevStubSISDir, - KEntryAttNormal, - ESortNone, - dir ); - - if ( err == KErrNone ) - { - CleanupStack::PushL( dir ); + // If firmware update is done, start scan process. + if( iStartupReason == EFirmwareUpdate ) + { + iSisUninstaller = + CSisPkgUninstaller::NewL( *iProgramStatus, *this ); + + TRAP( err, ProcessStubFilesL() ); + FLOG_1( _L("[VersionRev] Process stub TRAP error = %d"), err ); + + TRAP( err, ProcessSisRegistryL() ); + FLOG_1( _L("[VersionRev] Process sis TRAP error = %d"), err ); + + iSisUninstaller->StartUninstallL(); + } + else + { + FLOG( _L("[VersionRev] StartProcessL: No firmware update") ); + // Ok, no need to start process. Leave so main will call delete. + User::Leave( KErrAbort ); + } + + FLOG( _L("[VersionRev] StartProcessL end") ); + return KErrNone; + } + + // ----------------------------------------------------------------------- + // Reads stub sis files. + // ----------------------------------------------------------------------- + // + TInt CVersionRevisor::ProcessStubFilesL() + { + FLOG( _L("[VersionRev] ProcessStubFilesL start") ); + CDir* dir; - TInt count = dir->Count(); - FLOG_1( _L("[VersionRev] Stub count = %d"), count ); - - for ( TInt index = 0; index < count; index++ ) + TInt err = iFs.GetDir( + KVerRevStubSISDir, + KEntryAttNormal, + ESortNone, + dir ); + + if ( err == KErrNone ) { - FLOG_1( _L("[VersionRev] Stub index = %d"), index ); - TFileName stubName; - stubName.Append( KVerRevStubSISDir ); - stubName.Append( (*dir)[index].iName ); - FLOG_1( _L("[VersionRev] Stub name: %S\n "), - &(*dir)[index].iName ); - // Function needs to be trapped because SisController leavs - // if some corrupted file is in dir etc. - TRAP( err, AppendStubInfoL( stubName ) ); - } - CleanupStack::PopAndDestroy( dir ); + CleanupStack::PushL( dir ); + + TInt count = dir->Count(); + FLOG_1( _L("[VersionRev] Stub count = %d"), count ); + + for ( TInt index = 0; index < count; index++ ) + { + FLOG_1( _L("[VersionRev] Stub index = %d"), index ); + TFileName stubName; + stubName.Append( KVerRevStubSISDir ); + stubName.Append( (*dir)[index].iName ); + FLOG_1( _L("[VersionRev] Stub name: %S\n "), + &(*dir)[index].iName ); + // Function needs to be trapped because SisController leavs + // if some corrupted file is in dir etc. + TRAP( err, AppendStubInfoL( stubName ) ); + } + CleanupStack::PopAndDestroy( dir ); + } + + FLOG( _L("[VersionRev] ProcessStubFilesL end") ); + return err; } - FLOG( _L("[VersionRev] ProcessStubFilesL end") ); - return err; - } - -// ----------------------------------------------------------------------- -// Checks rom updates from sis registry and adds pkg UID to array for -// uninstaller process. -// -// Pre contitons for uninstall is: -// 1. sis version is older or same as rom STUB version. -// 2. sis has files only in C drvie. -// 3. if sis version is same as stub version, all binary files must be -// present in rom (z:\sys\bin). -// Rom STUB <- SA = uninstalled -// Rom STUB <- SP = no uninstall, returned drive is Z (0x04) -// Rom STUB <- PU = no uninstall, returned drive is Z+C (0x2000004) -// Rom STUB <- SA <- SP = SA is uninstalled, SP is not (n-gage) -// Rom STUB <- SA <- PU = uninstalled -// Rom STUB <- SA + emped. sis = SA is uninstalled, empedded pkg is not. -// ----------------------------------------------------------------------- -// -TInt CVersionRevisor::ProcessSisRegistryL() - { - FLOG( _L("[VersionRev] ProcessSisRegistryL start") ); - TInt stubArrayCount = iStubDataArray.Count(); - FLOG_1( _L("[VersionRev] Stub array count = %d"), stubArrayCount ); - - if ( stubArrayCount ) + // ----------------------------------------------------------------------- + // Checks rom updates from sis registry and adds pkg UID to array for + // uninstaller process. + // + // Pre contitons for uninstall is: + // 1. sis version is older or same as rom STUB version. + // 2. sis has files only in C drvie. + // 3. if sis version is same as stub version, all binary files must be + // present in rom (z:\sys\bin). + // Rom STUB <- SA = uninstalled + // Rom STUB <- SP = no uninstall, returned drive is Z (0x04) + // Rom STUB <- PU = no uninstall, returned drive is Z+C (0x2000004) + // Rom STUB <- SA <- SP = SA is uninstalled, SP is not (n-gage) + // Rom STUB <- SA <- PU = uninstalled + // Rom STUB <- SA + emped. sis = SA is uninstalled, empedded pkg is not. + // ----------------------------------------------------------------------- + // + TInt CVersionRevisor::ProcessSisRegistryL() { - Swi::RSisRegistrySession sisRegSession; - User::LeaveIfError( sisRegSession.Connect() ); - CleanupClosePushL( sisRegSession ); - - Swi::RSisRegistryEntry entry; - TInt err = KErrNone; - - // Search correct sis pagace and open entry to it. - for ( TInt stubIndex = 0; stubIndex < stubArrayCount; stubIndex++ ) - { - TUid stubUID = iStubDataArray[stubIndex]->pkgUID; - FLOG_1( _L("[VersionRev] Stub UID: 0x%x \n "), stubUID.iUid ); + FLOG( _L("[VersionRev] ProcessSisRegistryL start") ); + TInt stubArrayCount = iStubDataArray.Count(); + FLOG_1( _L("[VersionRev] Stub array count = %d"), stubArrayCount ); + + if ( stubArrayCount ) + { + Swi::RSisRegistrySession sisRegSession; + User::LeaveIfError( sisRegSession.Connect() ); + CleanupClosePushL( sisRegSession ); + + Swi::RSisRegistryEntry entry; + TInt err = KErrNone; + + // Search correct sis pagace and open entry to it. + for ( TInt stubIndex = 0; stubIndex < stubArrayCount; stubIndex++ ) + { + TUid stubUID = iStubDataArray[stubIndex]->pkgUID; + FLOG_1( _L("[VersionRev] Stub UID: 0x%x \n "), stubUID.iUid ); + + TBool isInstalled = sisRegSession.IsInstalledL( stubUID ); + + if ( isInstalled ) + { + err = entry.Open( sisRegSession, stubUID ); + + if ( !err ) + { + CleanupClosePushL( entry ); + + TUint drives = entry.InstalledDrivesL(); + FLOG_1( _L("[VersionRev] Installe drive: 0x%x \n "), + drives ); + + if ( drives == KVerRevDriveC ) + { + FLOG( _L("[VersionRev] SIS is installed to C:") ); + FLOG( _L("[VersionRev] Check SIS version") ); + + TVersion stubVersion( + iStubDataArray[stubIndex]->major, + iStubDataArray[stubIndex]->minor, + iStubDataArray[stubIndex]->build ); + + // Check sis and stub version. + TInt ver = CompareVersions( + entry.VersionL(), + stubVersion ); + FLOG_1( _L("[VersionRev] CompareVer.= %d "), ver ); + TBool removePkg = EFalse; - TBool isInstalled = sisRegSession.IsInstalledL( stubUID ); - - if ( isInstalled ) - { - err = entry.Open( sisRegSession, stubUID ); - - if ( !err ) - { - CleanupClosePushL( entry ); - - TUint drives = entry.InstalledDrivesL(); - FLOG_1( _L("[VersionRev] Installe drive: 0x%x \n "), - drives ); - - if ( drives == KVerRevDriveC ) - { - FLOG( _L("[VersionRev] SIS is installed to C:") ); - FLOG( _L("[VersionRev] Check SIS version") ); - - TVersion stubVersion( - iStubDataArray[stubIndex]->major, - iStubDataArray[stubIndex]->minor, - iStubDataArray[stubIndex]->build ); - - // Check sis and stub version. - TInt ver = CompareVersions( - entry.VersionL(), - stubVersion ); - FLOG_1( _L("[VersionRev] CompareVer.= %d "), ver ); - TBool removePkg = EFalse; - - if ( ver == KVerRevSisVersionSame ) - { - // If version is same check that all binary - // files in rom is found. If files are missing - // do not remove sis pkg. - FLOG( _L("[VersionRev] Sis version same")); - removePkg = AllRomBinariesFoundL( entry ); - } - if ( ver == KVerRevSisVersionOlder ) - { - FLOG( _L("[VersionRev] Sis version older")); - removePkg = ETrue; - } - - // Add uid to uninstall array if removePkg is true. - if ( removePkg ) - { - iSisUninstaller->AddUidToListL( stubUID ); - FLOG_1( _L("[VersionRev] Uninst. UID:0x%x"), - stubUID.iUid ); - } - }//if - CleanupStack::PopAndDestroy(); //entry - }//if - } //if - } //for - CleanupStack::PopAndDestroy(); //sisRegSession - } //if - - return KErrNone; - } + if ( ver == KVerRevSisVersionSame ) + { + // If version is same check that all binary + // files in rom is found. If files are missing + // do not remove sis pkg. + FLOG( _L("[VersionRev] Sis version same")); + removePkg = AllRomBinariesFoundL( entry ); + } + if ( ver == KVerRevSisVersionOlder ) + { + FLOG( _L("[VersionRev] Sis version older")); + removePkg = ETrue; + } + + // Add uid to uninstall array if removePkg is true. + if ( removePkg ) + { + iSisUninstaller->AddUidToListL( stubUID ); + FLOG_1( _L("[VersionRev] Uninst. UID:0x%x"), + stubUID.iUid ); + } + }//if + CleanupStack::PopAndDestroy(); //entry + }//if + } //if + } //for + CleanupStack::PopAndDestroy(); //sisRegSession + } //if + + return KErrNone; + } - -// ----------------------------------------------------------------------- -// This function reads firmware string and checks if firmware update has -// been done. This function does create file to private directory and -// saves current firmware version string to it. -// ----------------------------------------------------------------------- -// -void CVersionRevisor::StartUpReasonL() - { - FLOG( _L("[VersionRev] StartUpReasonL") ); - iStartupReason = KErrNotFound; - HBufC* currentVersionString = HBufC::NewLC( KVerRevStrLength*2 ); - TPtr currentStringPtr = currentVersionString->Des(); - // Get current firmware string from sysutil. - // Firmware string is saved to Z:\\resource\\versions\\sw.txt - SysUtil::GetSWVersion( currentStringPtr ); - FLOG_1( _L("[VersionRev] Firmware version = %S "), - ¤tStringPtr ); - TUint result; - // If private directory is not found create it. - TInt err = iFs.Att( KVerRevPrivatePath, result ); - - if ( ! err == KErrNone && result & KEntryAttDir ) - { - iFs.CreatePrivatePath( EDriveC ); - FLOG( _L("[VersionRev] StartUpReasonL: Create private folder") ); - } - - RFile file; - TFindFile find( iFs ); - // Check if version file is found in Daemon private director. - err = find.FindByPath( KVerRevVersionFile(), &KVerRevPrivatePath() ); - FLOG_1( _L("[VersionRev] StartUpReasonL: Find file = %d"), err ); - - if ( err ) - { - // If file is not found this is first boot or user memory (C:) has - // been formatted. No need to start version checking but let's save - // the current firmware version to Daemon private folder. - err = file.Create( - iFs, - KVerRevVersionFile, - EFileWrite|EFileRead|EFileStreamText ); + // ----------------------------------------------------------------------- + // This function reads firmware string and checks if firmware update has + // been done. This function does create file to private directory and + // saves current firmware version string to it. + // ----------------------------------------------------------------------- + // + void CVersionRevisor::StartUpReasonL() + { + FLOG( _L("[VersionRev] StartUpReasonL") ); + iStartupReason = KErrNotFound; + HBufC* currentVersionString = HBufC::NewLC( KVerRevStrLength*2 ); + TPtr currentStringPtr = currentVersionString->Des(); - FLOG_1( _L("[VersionRev] file create err = %d"), err ); - User::LeaveIfError( err ); - - // Write current firmware version strign to file. - WriteFileText( file, currentStringPtr ); + // Get current firmware string from sysutil. + // Firmware string is saved to Z:\\resource\\versions\\sw.txt + SysUtil::GetSWVersion( currentStringPtr ); + FLOG_1( _L("[VersionRev] Firmware version = %S "), + ¤tStringPtr ); + TUint result; + // If private directory is not found create it. + TInt err = iFs.Att( KVerRevPrivatePath, result ); - file.Flush(); - file.Close(); - } - else - { - - HBufC* previousVersionString = HBufC::NewLC( KVerRevStrLength*2 ); - TPtr previousStringPtr = previousVersionString->Des(); - - // Open firmware version file from private directory. - err = file.Open( - iFs, - KVerRevVersionFile, - EFileWrite|EFileRead|EFileStreamText ); - - FLOG_1( _L("[VersionRev] file open err = %d"), err ); - User::LeaveIfError( err ); + if ( ! err == KErrNone && result & KEntryAttDir ) + { + iFs.CreatePrivatePath( EDriveC ); + FLOG( _L("[VersionRev] StartUpReasonL: Create private folder") ); + } + + RFile file; + TFindFile find( iFs ); + // Check if version file is found in Daemon private director. + err = find.FindByPath( KVerRevVersionFile(), &KVerRevPrivatePath() ); + FLOG_1( _L("[VersionRev] StartUpReasonL: Find file = %d"), err ); - // Read previous firmware string from the file. - ReadFileText( file, previousStringPtr ); - FLOG_1( _L("[VersionRev] Previous sw version: %S"), - &previousStringPtr ); - - file.Close(); - - if ( previousStringPtr.Length() != 0 ) - { - // Compare firmware strings. - err = previousVersionString->Compare( currentStringPtr ); - FLOG_1( _L("[VersionRev] String compare = %d"), err ); + if ( err ) + { + // If file is not found this is first boot or user memory (C:) has + // been formatted. No need to start version checking but let's save + // the current firmware version to Daemon private folder. + err = file.Create( + iFs, + KVerRevVersionFile, + EFileWrite|EFileRead|EFileStreamText ); + + FLOG_1( _L("[VersionRev] file create err = %d"), err ); + User::LeaveIfError( err ); - if ( err == KErrNone ) - { - // Strings are identical, no firmware update. - iStartupReason = KErrNone; - FLOG( _L("[VersionRev] iStartupReason = KErrNone") ); - } - else - { - iStartupReason = EFirmwareUpdate; - FLOG( _L("[VersionRev] iStartupReason = EFirmwareUpdate") ); - file.Replace( + // Write current firmware version strign to file. + WriteFileText( file, currentStringPtr ); + + file.Flush(); + file.Close(); + } + else + { + + HBufC* previousVersionString = HBufC::NewLC( KVerRevStrLength*2 ); + TPtr previousStringPtr = previousVersionString->Des(); + + // Open firmware version file from private directory. + err = file.Open( iFs, KVerRevVersionFile, - EFileWrite|EFileStreamText ); - // Ok we have firmware update. Let's write new firmware - // string to file and start version checking. - WriteFileText( file, currentStringPtr ); - file.Flush(); - file.Close(); - } - } - CleanupStack::PopAndDestroy(); //previousVersionString - } - CleanupStack::PopAndDestroy( ); //currentVersionString - } - - -// ----------------------------------------------------------------------- -// Help function to read firmware version string from file. -// ----------------------------------------------------------------------- -// -void CVersionRevisor::ReadFileText( RFile& aFile, TDes& aText ) - { - TFileText fileText; - fileText.Set( aFile ); - fileText.Read( aText ); + EFileWrite|EFileRead|EFileStreamText ); + + FLOG_1( _L("[VersionRev] file open err = %d"), err ); + User::LeaveIfError( err ); + + // Read previous firmware string from the file. + ReadFileText( file, previousStringPtr ); + FLOG_1( _L("[VersionRev] Previous sw version: %S"), + &previousStringPtr ); + + file.Close(); + + if ( previousStringPtr.Length() != 0 ) + { + // Compare firmware strings. + err = previousVersionString->Compare( currentStringPtr ); + FLOG_1( _L("[VersionRev] String compare = %d"), err ); + + if ( err == KErrNone ) + { + // Strings are identical, no firmware update. + iStartupReason = KErrNone; + FLOG( _L("[VersionRev] iStartupReason = KErrNone") ); + } + else + { + iStartupReason = EFirmwareUpdate; + FLOG( _L("[VersionRev] iStartupReason = EFirmwareUpdate") ); + file.Replace( + iFs, + KVerRevVersionFile, + EFileWrite|EFileStreamText ); + // Ok we have firmware update. Let's write new firmware + // string to file and start version checking. + WriteFileText( file, currentStringPtr ); + file.Flush(); + file.Close(); + } + } + CleanupStack::PopAndDestroy(); //previousVersionString + } + CleanupStack::PopAndDestroy( ); //currentVersionString + } - // Replace new-line patterns with real ones. - TInt position = aText.Find( KVerRevNewLinePattern ); - while ( position != KErrNotFound ) - { - // err is a position - aText.Replace( - position, - KVerRevNewLinePattern().Length(), - KVerRevNewLine ); + + // ----------------------------------------------------------------------- + // Help function to read firmware version string from file. + // ----------------------------------------------------------------------- + // + void CVersionRevisor::ReadFileText( RFile& aFile, TDes& aText ) + { + TFileText fileText; + fileText.Set( aFile ); + fileText.Read( aText ); - position = aText.Find( KVerRevNewLinePattern ); - } - } - + // Replace new-line patterns with real ones. + TInt position = aText.Find( KVerRevNewLinePattern ); + while ( position != KErrNotFound ) + { + // err is a position + aText.Replace( + position, + KVerRevNewLinePattern().Length(), + KVerRevNewLine ); + + position = aText.Find( KVerRevNewLinePattern ); + } + } -// ----------------------------------------------------------------------- -// Help function to write firmware version string from file. -// ----------------------------------------------------------------------- -// -void CVersionRevisor::WriteFileText( RFile& aFile, TDes& aText ) - { - // Replace real new-line marker with pattern. This makes - // reading operation easy. - TInt position = aText.Find( KVerRevNewLine ); - while ( position != KErrNotFound ) - { - aText.Replace( - position, - KVerRevNewLine().Length(), - KVerRevNewLinePattern ); - - position = aText.Find( KVerRevNewLine ); - } - - TFileText fileText; - fileText.Set( aFile ); - fileText.Write( aText ); - } - -// ----------------------------------------------------------------------- -// This function reads stub sis files version and uid and adds the info -// in array. -// ----------------------------------------------------------------------- -// -void CVersionRevisor::AppendStubInfoL( TDesC& aStubName ) - { - CFileSisDataProvider* provider = - CFileSisDataProvider::NewLC( iFs, aStubName ); - - Sis::CController* stubData = Sis::CController::NewLC( *provider ); - - const Sis::CVersion& version = stubData->Info().Version(); - - TVersionRevStubData* stubPkg = new( ELeave ) TVersionRevStubData(); - CleanupStack::PushL( stubPkg ); - stubPkg->pkgUID = stubData->Info().Uid().Uid(); - stubPkg->major = version.Major(); - stubPkg->minor = version.Minor(); - stubPkg->build = version.Build(); - - iStubDataArray.AppendL( stubPkg ); - - CleanupStack::Pop( stubPkg ); + // ----------------------------------------------------------------------- + // Help function to write firmware version string from file. + // ----------------------------------------------------------------------- + // + void CVersionRevisor::WriteFileText( RFile& aFile, TDes& aText ) + { + // Replace real new-line marker with pattern. This makes + // reading operation easy. + TInt position = aText.Find( KVerRevNewLine ); + while ( position != KErrNotFound ) + { + aText.Replace( + position, + KVerRevNewLine().Length(), + KVerRevNewLinePattern ); + + position = aText.Find( KVerRevNewLine ); + } + + TFileText fileText; + fileText.Set( aFile ); + fileText.Write( aText ); + } + -#ifdef _DEBUG - RDebug::Print( _L("[VersionRev] Add Stub UID: 0x%x Ver: %d.%d.%d\n "), - stubData->Info().Uid().Uid(), - version.Major(), - version.Minor(), - version.Build() ); -#endif + // ----------------------------------------------------------------------- + // This function reads stub sis files version and uid and adds the info + // in array. + // ----------------------------------------------------------------------- + // + void CVersionRevisor::AppendStubInfoL( TDesC& aStubName ) + { + CFileSisDataProvider* provider = + CFileSisDataProvider::NewLC( iFs, aStubName ); + + Sis::CController* stubData = Sis::CController::NewLC( *provider ); + + const Sis::CVersion& version = stubData->Info().Version(); - CleanupStack::PopAndDestroy( 2, provider ); - provider = NULL; - stubData = NULL; - stubPkg = NULL; - } + TVersionRevStubData* stubPkg = new( ELeave ) TVersionRevStubData(); + CleanupStack::PushL( stubPkg ); + stubPkg->pkgUID = stubData->Info().Uid().Uid(); + stubPkg->major = version.Major(); + stubPkg->minor = version.Minor(); + stubPkg->build = version.Build(); + + iStubDataArray.AppendL( stubPkg ); + + CleanupStack::Pop( stubPkg ); + + #ifdef _DEBUG + RDebug::Print( _L("[VersionRev] Add Stub UID: 0x%x Ver: %d.%d.%d\n "), + stubData->Info().Uid().Uid(), + version.Major(), + version.Minor(), + version.Build() ); + #endif + + CleanupStack::PopAndDestroy( 2, provider ); + provider = NULL; + stubData = NULL; + stubPkg = NULL; + } -// ----------------------------------------------------------------------- -// This function compares sis and stub versions. -// ----------------------------------------------------------------------- -// -TInt CVersionRevisor::CompareVersions( - TVersion aSisVer, - TVersion aStubVer ) - { - FLOG( _L("[VersionRev] CompareVersions()") ); - - // Compare major version - if ( aSisVer.iMajor > aStubVer.iMajor ) - { - FLOG( _L("[VersionRev] STUB major version older ") ); - return KVerRevSisVersionNewer; - } - // If same major version, check minor version. - else if ( aSisVer.iMajor == aStubVer.iMajor ) - { - if ( aSisVer.iMinor > aStubVer.iMinor ) + // ----------------------------------------------------------------------- + // This function compares sis and stub versions. + // ----------------------------------------------------------------------- + // + TInt CVersionRevisor::CompareVersions( + TVersion aSisVer, + TVersion aStubVer ) + { + FLOG( _L("[VersionRev] CompareVersions()") ); + + // Compare major version + if ( aSisVer.iMajor > aStubVer.iMajor ) { - FLOG( _L("[VersionRev] STUB minor version older ") ); + FLOG( _L("[VersionRev] STUB major version older ") ); return KVerRevSisVersionNewer; } - // If same minor version, check build version. - else if ( aSisVer.iMinor == aStubVer.iMinor ) - { - if ( aSisVer.iBuild > aStubVer.iBuild ) + // If same major version, check minor version. + else if ( aSisVer.iMajor == aStubVer.iMajor ) + { + if ( aSisVer.iMinor > aStubVer.iMinor ) { - FLOG( _L("[VersionRev] STUB build version older ") ); - return KVerRevSisVersionNewer; - } - else if ( aSisVer.iBuild == aStubVer.iBuild ) + FLOG( _L("[VersionRev] STUB minor version older ") ); + return KVerRevSisVersionNewer; + } + // If same minor version, check build version. + else if ( aSisVer.iMinor == aStubVer.iMinor ) { - // Sis build version is same as stub. - FLOG( _L("[VersionRev] Build version same ") ); - return KVerRevSisVersionSame; - } - else // build + if ( aSisVer.iBuild > aStubVer.iBuild ) + { + FLOG( _L("[VersionRev] STUB build version older ") ); + return KVerRevSisVersionNewer; + } + else if ( aSisVer.iBuild == aStubVer.iBuild ) + { + // Sis build version is same as stub. + FLOG( _L("[VersionRev] Build version same ") ); + return KVerRevSisVersionSame; + } + else // build + { + // Sis build version is older. + FLOG( _L("[VersionRev] SIS build version OLDER !") ); + return KVerRevSisVersionOlder; + } + } + else // minor { - // Sis build version is older. - FLOG( _L("[VersionRev] SIS build version OLDER !") ); + // Sis minor version is older. + FLOG( _L("[VersionRev] SIS minor version OLDER !") ); return KVerRevSisVersionOlder; - } - } - else // minor + } + } + else //major { - // Sis minor version is older. - FLOG( _L("[VersionRev] SIS minor version OLDER !") ); + // Sis major version is older. + FLOG( _L("[VersionRev] SIS major version OLDER !") ); return KVerRevSisVersionOlder; } - } - else //major + } + + // ----------------------------------------------------------------------- + // This function check that all sis pkg's binary files are found from rom. + // ----------------------------------------------------------------------- + // + TBool CVersionRevisor::AllRomBinariesFoundL( Swi::RSisRegistryEntry& aEntry ) { - // Sis major version is older. - FLOG( _L("[VersionRev] SIS major version OLDER !") ); - return KVerRevSisVersionOlder; - } - } - -// ----------------------------------------------------------------------- -// This function check that all sis pkg's binary files are found from rom. -// ----------------------------------------------------------------------- -// -TBool CVersionRevisor::AllRomBinariesFoundL( Swi::RSisRegistryEntry& aEntry ) - { - FLOG( _L("[VersionRev] AllRomBinariesFoundL") ); - TBool allBinaryFilesFound = EFalse; - TInt err = KErrNone; - RPointerArray sisFilesArray; - RPointerArray binaryFilesArray; - - // Get installed files from this entry. - aEntry.FilesL( sisFilesArray ); - TInt arrayCount = sisFilesArray.Count(); - FLOG_1( _L("[VersionRev] Sis files count = %d"), arrayCount ); - - if ( arrayCount ) - { - for ( TInt index = 0; index < arrayCount; index++ ) - { - // Get file path - HBufC* tempFilePath = sisFilesArray[index]->AllocL(); - CleanupStack::PushL( tempFilePath ); - FLOG_1( _L("[VersionRev] File path: %S \n"), tempFilePath ); - - // Check if file is installed to sys\bin folder. - // Search \sys\bin string from the descriptor's data. - err = tempFilePath->Find( KVerRevSysPath ); - FLOG_1( _L("[VersionRev] Sys path found = %d"), err ); - - if ( err != KErrNotFound ) - { - // If binary file, add to array. - binaryFilesArray.Append( tempFilePath ); - CleanupStack::Pop(); //tempFilePath - } - else - { - // Delete temp descriptor. - CleanupStack::PopAndDestroy( tempFilePath ); - tempFilePath = NULL; - } - } + FLOG( _L("[VersionRev] AllRomBinariesFoundL") ); + TBool allBinaryFilesFound = EFalse; + TInt err = KErrNone; + RPointerArray sisFilesArray; + RPointerArray binaryFilesArray; + + // Get installed files from this entry. + aEntry.FilesL( sisFilesArray ); + TInt arrayCount = sisFilesArray.Count(); + FLOG_1( _L("[VersionRev] Sis files count = %d"), arrayCount ); - // Count how meny binary files are found. - TInt binaryCount = binaryFilesArray.Count(); - FLOG_1( _L("[VersionRev] Binary files count = %d"), binaryCount ); - if ( binaryCount ) - { - TInt foundInRomCount = 0; - TFindFile find( iFs ); - TParse stringParser; - TFileName binaryFileNameAndExt; + if ( arrayCount ) + { + for ( TInt index = 0; index < arrayCount; index++ ) + { + // Get file path + HBufC* tempFilePath = sisFilesArray[index]->AllocL(); + CleanupStack::PushL( tempFilePath ); + FLOG_1( _L("[VersionRev] File path: %S \n"), tempFilePath ); + + // Check if file is installed to sys\bin folder. + // Search \sys\bin string from the descriptor's data. + err = tempFilePath->Find( KVerRevSysPath ); + FLOG_1( _L("[VersionRev] Sys path found = %d"), err ); + + if ( err != KErrNotFound ) + { + // If binary file, add to array. + binaryFilesArray.Append( tempFilePath ); + CleanupStack::Pop(); //tempFilePath + } + else + { + // Delete temp descriptor. + CleanupStack::PopAndDestroy( tempFilePath ); + tempFilePath = NULL; + } + } - for ( TInt index = 0; index < binaryCount; index++ ) - { - // Get binary file path. - HBufC* binaryPathBuf = binaryFilesArray[index]; - // Parse file name and extension. - stringParser.Set( *binaryPathBuf ,NULL, NULL ); - binaryFileNameAndExt.Copy( stringParser.NameAndExt() ); - FLOG_1( _L("[VersionRev] Search file: %S \n"), - &binaryFileNameAndExt ); - - // Search file in z:\sys\bin. - // Note path must contain drive letter. - err = find.FindByPath( - binaryFileNameAndExt, - &KVerRevRomSysPath() ); - FLOG_1( _L("[VersionRev] Found in rom = %d"), err ); - - if ( err == KErrNone ) + // Count how meny binary files are found. + TInt binaryCount = binaryFilesArray.Count(); + FLOG_1( _L("[VersionRev] Binary files count = %d"), binaryCount ); + if ( binaryCount ) + { + TInt foundInRomCount = 0; + TFindFile find( iFs ); + TParse stringParser; + TFileName binaryFileNameAndExt; + + for ( TInt index = 0; index < binaryCount; index++ ) { - // File found in rom. Increase counter. - foundInRomCount++; - } - } //for + // Get binary file path. + HBufC* binaryPathBuf = binaryFilesArray[index]; + // Parse file name and extension. + stringParser.Set( *binaryPathBuf ,NULL, NULL ); + binaryFileNameAndExt.Copy( stringParser.NameAndExt() ); + FLOG_1( _L("[VersionRev] Search file: %S \n"), + &binaryFileNameAndExt ); + + // Search file in z:\sys\bin. + // Note path must contain drive letter. + err = find.FindByPath( + binaryFileNameAndExt, + &KVerRevRomSysPath() ); + FLOG_1( _L("[VersionRev] Found in rom = %d"), err ); + + if ( err == KErrNone ) + { + // File found in rom. Increase counter. + foundInRomCount++; + } + } //for + + // Check that all binary files are found in rom. + if ( binaryCount == foundInRomCount ) + { + allBinaryFilesFound = ETrue; + FLOG( _L("[VersionRev] All rom file found !") ); + } + } //if - // Check that all binary files are found in rom. - if ( binaryCount == foundInRomCount ) - { - allBinaryFilesFound = ETrue; - FLOG( _L("[VersionRev] All rom file found !") ); - } - } //if + // Free all objects and array. + binaryFilesArray.ResetAndDestroy(); + } + // Free all objects and array. + sisFilesArray.ResetAndDestroy(); - // Free all objects and array. - binaryFilesArray.ResetAndDestroy(); + return allBinaryFilesFound; } - // Free all objects and array. - sisFilesArray.ResetAndDestroy(); + - return allBinaryFilesFound; - } - + // ----------------------------------------------------------------------- + // This function handles VersionRevisors self exit. + // ----------------------------------------------------------------------- + // + void CVersionRevisor::Exit() + { + FLOG( _L("[VersionRev] Exit() ") ); + // Ok all is done. Free all resources and exit. + delete this; + } -// ----------------------------------------------------------------------- -// This function handles VersionRevisors self exit. -// ----------------------------------------------------------------------- -// - void CVersionRevisor::Exit() - { - FLOG( _L("[VersionRev] Exit() ") ); - // Ok all is done. Free all resources and exit. - delete this; - } - -// } // namespace Swi + } // namespace Swi //EOF