--- 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<HBufC> sisFilesArray;
- RPointerArray<HBufC> 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<HBufC> sisFilesArray;
+ RPointerArray<HBufC> 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