diff -r 95243422089a -r 491b3ed49290 filemanager/src/fmbkupengine/src/MMCScBkupPhoneModelUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/src/fmbkupengine/src/MMCScBkupPhoneModelUtils.cpp Tue Aug 31 15:06:05 2010 +0300 @@ -0,0 +1,122 @@ +/* +* Copyright (c) 2005 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: MMCScBkupPhoneModelUtils implementation +* +* +*/ + +#include "MMCScBkupPhoneModelUtils.h" + +// User includes +#include "MMCScBkupArchiveFlags.h" +#include "MMCScBkupArchiveUtils.h" + +// System includes +#include + + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// MMCScBkupPhoneModelUtils::CurrentPhoneModelLC() +// +// +// --------------------------------------------------------------------------- +HBufC8* MMCScBkupPhoneModelUtils::CurrentPhoneModelLC() + { + HBufC8* ret = HBufC8::NewLC( MaximumPhoneModelIdentifierLength() ); + // + TBuf version; + const TInt thirdLine(3); + const TInt err = SysUtil::GetSWVersion( version); + + if ( err == KErrNone ) + { + // Assume syntax Vxx.xx\ndd-mm-yy\nNHL-vvv\n(c) + // Extract model version from third line + for(TInt i(0); i < thirdLine; i++) + { + TInt cutPos = version.Locate( '\n' ); + + if( cutPos == KErrNotFound ) + { + break; + } + else if(i < ( thirdLine - 1 ) ) + { + version.Delete( 0, cutPos + 1 ); + } + else + { + cutPos = version.Locate( '\n' ); + if( cutPos != KErrNotFound ) + { + version.Delete( cutPos, (version.Length() - cutPos) ); + } + ret->Des().Copy( version ); + } + } + } + + // Implicit requirement - should always be the case though + __ASSERT_ALWAYS( ret->Length() <= 255, User::Invariant()); + return ret; + } + + +// --------------------------------------------------------------------------- +// MMCScBkupPhoneModelUtils::MaximumPhoneModelIdentifierLength() +// +// +// --------------------------------------------------------------------------- +TInt MMCScBkupPhoneModelUtils::MaximumPhoneModelIdentifierLength() + { + return KSysUtilVersionTextLength; + } + + +// --------------------------------------------------------------------------- +// MMCScBkupPhoneModelUtils::ArchiveRestorePermissableL() +// +// +// --------------------------------------------------------------------------- +TBool MMCScBkupPhoneModelUtils::ArchiveRestorePermissableL( const TDesC8& aPhoneModelData, TBitFlags aArchiveFlags, const TVersion& aArchiveVersion ) + { + TBool restoreOkay = EFalse; + + // Check version first + restoreOkay = ( aArchiveVersion.iMajor >= KMMCScBkupArchiveFileFormatFirstRestorableMajorVersion ); + + // Check flags next + if ( restoreOkay ) + { + restoreOkay = ( aArchiveFlags.Value() & EMMCScBkupArchiveFlagsContentValid ); + + // Only check model if the flags were alright + if ( restoreOkay ) + { + HBufC8* currentData = CurrentPhoneModelLC(); + restoreOkay = ( aPhoneModelData.Compare( *currentData ) == 0 ); + CleanupStack::PopAndDestroy( currentData ); + } + } + + // Done + return restoreOkay; + } + + + +