diff -r 000000000000 -r ff3b6d0fd310 cbs/CbsServer/ServerSrc/CbsUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbs/CbsServer/ServerSrc/CbsUtils.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,211 @@ +/* +* Copyright (c) 2003 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: This module contains the implementation of CbsUtils class +* member functions. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include // FFS critical level check +#include "CbsUtils.h" +#include +#include +#include +#include +#include "CbsLogger.h" + + +// ================= CONSTANTS ======================= + +const TInt KRamMemoryCriticalLevel = 1500000; // KRAMLOWTHRESHOLD = 1500000 + + +// ================= MEMBER FUNCTIONS ======================= + + +// ----------------------------------------------------------------------------- +// CbsUtils::FindAndOpenDefaultResourceFileLC +// Searches and opens the DLL default resource file. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CbsUtils::FindAndOpenDefaultResourceFileLC( + RFs& aFs, + RResourceFile& aResFile ) + { + // default resource file path + + _LIT(KDirAndFile,"z:CbsServer.rsc"); + + TParse* fp = new(ELeave) TParse(); + fp->Set(KDirAndFile, &KDC_RESOURCE_FILES_DIR, NULL); + + static const TInt KDefResFileSignature = 4; + + // Find the resource file + TFileName fileName( fp->FullName() ); + BaflUtils::NearestLanguageFile( aFs, fileName ); + + // Open the resource file + aResFile.OpenL( aFs, fileName ); + // Push close operation in tbe cleanup stack + CleanupClosePushL( aResFile ); + + aResFile.ConfirmSignatureL( KDefResFileSignature ); + + delete fp; + } + +// ----------------------------------------------------------------------------- +// CbsUtils::FFSCriticalLevelCheckL +// Checks that there is space for writing data on FFS. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CbsUtils::FFSCriticalLevelCheckL( + const TInt aBytesToWrite, + RFs& aFs ) + { + CBSLOGSTRING("CBSSERVER: >>> CbsUtils::FFSCriticalLevelCheckL()"); + + // Checks RAM memory critical level. + if (RamMemCriticalLevelCheckL( aBytesToWrite )) + { + User::Leave( KErrDiskFull ); // returns KErrDiskFull -> no changes to clients + } + + // Checks RAM disk critical level + if ( SysUtil::FFSSpaceBelowCriticalLevelL( &aFs, aBytesToWrite ) ) + { + User::Leave( KErrDiskFull ); + } + + CBSLOGSTRING("CBSSERVER: <<< CbsUtils::FFSCriticalLevelCheckL()"); + } + +// ----------------------------------------------------------------------------- +// CbsUtils::RamMemCriticalLevelCheckL +// Checks that there is space for allocating data in memory. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CbsUtils::RamMemCriticalLevelCheckL( + const TInt aBytesToWrite) + { + + // Read the critical threahold RAM memory level from the repository. + TInt thresholdVal; + CRepository* repository = CRepository::NewLC( KCRUidUiklaf ); + if (repository->Get( KUikOOMRamLowThreshold, thresholdVal ) != KErrNone) + { + thresholdVal = KRamMemoryCriticalLevel; + } + CleanupStack::PopAndDestroy( repository ); + + TInt freeMem = 0; + HAL::Get(HAL::EMemoryRAMFree, freeMem); + if ( freeMem > (thresholdVal + aBytesToWrite) ) + { + return EFalse; + } + + return ETrue; + } +// ----------------------------------------------------------------------------- +// CbsUtils::VolumeCriticalLevelCheckL +// Leaves with KErrDiskFull if writing aBytesToWrite bytes +// to the RAM File System would reduce the free space on RAM +// under the critical level. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CbsUtils::VolumeCriticalLevelCheckL( + const TDesC& aFileName, + TInt aBytesToWrite, + const RFs& aFs ) + { + // Convert file name to a volume number + TInt volumeNumber; + aFs.CharToDrive( aFileName[0], volumeNumber ); + + // Find out if the volume has enough free space + TVolumeInfo volume; + User::LeaveIfError( aFs.Volume( volume, volumeNumber ) ); + if ( volume.iFree < aBytesToWrite ) + { + User::Leave( KErrDiskFull ); + } + } + +// ----------------------------------------------------------------------------- +// CbsUtils::ExistsL +// Returns ETrue, if the file aFile exists. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CbsUtils::ExistsL( + const RFs& aFs, + const TDesC& aFile ) + { + TParse filename; + aFs.Parse( aFile, filename ); + + TBool returnCode( EFalse ); + TUint attributes; + + TInt result( aFs.Att( filename.FullName(), attributes ) ); + if ( result == KErrNone ) + { + returnCode = ETrue; + } + else if ( result == KErrNotFound ) + { + returnCode = EFalse; + } + else + { + User::Leave( result ); + } + return returnCode; + } + +// ----------------------------------------------------------------------------- +// CbsUtils::DeleteFileL +// Deletes the given file. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CbsUtils::DeleteFileL( + RFs& aFs, + const TDesC& aFile ) + { + TInt result( aFs.Delete( aFile ) ); + if ( result != KErrNone && + result != KErrNotFound && + result != KErrPathNotFound ) + { + User::Leave( result ); + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File + +