diff -r 000000000000 -r 33413c0669b9 vpnengine/vpnmanager/src/fileutil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/vpnmanager/src/fileutil.cpp Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,281 @@ +/* +* Copyright (c) 2000 - 2006 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: Provides file handling functions. +* +*/ + + + +#include +#include "fileutil.h" + +TFileUtil::TFileUtil(RFs& aFs) : iFs(aFs) + { + } + +TFileName TFileUtil::ReplaceExtension(const TFileName& aFileName, + const TDesC& aExtension) + { + TFileName newFileName; + + TInt extensionOffset = aFileName.LocateReverse('.'); + + if (extensionOffset == KErrNotFound) + { + newFileName = aFileName; + newFileName.Append('.'); + newFileName.Append(aExtension); + } + else + { + newFileName = aFileName.Left(extensionOffset + 1); + newFileName.Append(aExtension); + } + + return newFileName; + } + +TBool TFileUtil::FileExists(const TFileName& aFileName) + { + TUint fileAttr; + + if (iFs.Att(aFileName, fileAttr) == KErrNone) + { + return ETrue; + } + else + { + return EFalse; + } + } + +HBufC8* TFileUtil::LoadFileDataL(const TFileName& aFileName) + { + RFile file; + CleanupClosePushL(file); + + User::LeaveIfError(file.Open(iFs, aFileName, EFileRead)); + + TInt fileSize; + User::LeaveIfError(file.Size(fileSize)); + + HBufC8* fileData = HBufC8::NewLC(fileSize); + TPtr8 ptrFileData = fileData->Des(); + + User::LeaveIfError(file.Read(ptrFileData)); + + CleanupStack::Pop(); // fileData + CleanupStack::PopAndDestroy(); // file + + return fileData; + } + +HBufC* TFileUtil::LoadFileDataUL(const TFileName& aFileName) + { + HBufC8* fileData8 = LoadFileDataL(aFileName); + CleanupStack::PushL(fileData8); + + HBufC* fileData = To16BitL(*fileData8); + + CleanupStack::PopAndDestroy(); // fileData8 + + return fileData; + } + +void TFileUtil::SaveFileDataL(const TFileName& aFileName, + const TDesC& aFileData) + { + HBufC8* fileData8 = To8BitL(aFileData); + CleanupStack::PushL(fileData8); + + SaveFileDataL(aFileName, *fileData8); + + CleanupStack::PopAndDestroy(); // fileData8 + } + +void TFileUtil::SaveFileDataL(const TFileName& aFileName, + const TDesC8& aFileData) + { + RFile file; + CleanupClosePushL(file); + + User::LeaveIfError(file.Replace(iFs, aFileName, EFileWrite)); + + User::LeaveIfError(file.Write(aFileData)); + + CleanupStack::PopAndDestroy(); // file + } + +HBufC* TFileUtil::MakeFileNameLC(const TDesC& aDir, const TDesC& aName, + const TDesC& aExtension) + { + HBufC* fileName = HBufC::NewL(aDir.Length() + aName.Length() + aExtension.Length()); + CleanupStack::PushL(fileName); + TPtr fileNamePtr = fileName->Des(); + fileNamePtr.Append(aDir); + fileNamePtr.Append(aName); + fileNamePtr.Append(aExtension); + + return fileName; + } + +TFileName TFileUtil::MakeFileName(const TDesC& aDir, const TDesC& aNameAndExtension) + { + TFileName fileName; + + fileName.Copy(aDir); + fileName.Append(aNameAndExtension); + + return fileName; + } + +HBufC* TFileUtil::GetPolFileNameLC(const TVpnPolicyId& aPolicyId) + { + TPath privateDir; + User::LeaveIfError(iFs.PrivatePath(privateDir)); + + return MakeFileNameLC(privateDir, aPolicyId, KPolFileExt); + } + +HBufC* TFileUtil::GetPolFileNameL(const TVpnPolicyId& aPolicyId) + { + HBufC* ret(NULL); + TPath privateDir; + User::LeaveIfError(iFs.PrivatePath(privateDir)); + ret = MakeFileNameLC(privateDir, aPolicyId, KPolFileExt); + CleanupStack::Pop(); + return ret; + } + +HBufC* TFileUtil::GetPinFileNameLC(const TVpnPolicyId& aPolicyId) + { + TPath privateDir; + User::LeaveIfError(iFs.PrivatePath(privateDir)); + return MakeFileNameLC(privateDir, aPolicyId, KPinFileExt); + } + +HBufC* TFileUtil::GetPinFileNameL(const TVpnPolicyId& aPolicyId) + { + HBufC* ret(NULL); + TPath privateDir; + User::LeaveIfError(iFs.PrivatePath(privateDir)); + ret = MakeFileNameLC(privateDir, aPolicyId, KPinFileExt); + CleanupStack::Pop(); + return ret; + } + +TFileName TFileUtil::PolListFileNameL() + { + TPath privateDir; + TInt err = iFs.PrivatePath(privateDir); + return MakeFileName(privateDir, KPolListFile); + } + +void TFileUtil::DeleteFileL(const TFileName& aFileName) + { + User::LeaveIfError(iFs.Delete(aFileName)); + } + +void TFileUtil::DeleteFilesL(const TFileName& aFileFilter) + { + CFileMan* fileMan = CFileMan::NewL(iFs); + CleanupStack::PushL(fileMan); + + User::LeaveIfError(fileMan->Delete(aFileFilter)); + + CleanupStack::PopAndDestroy(); // fileMan + } + +void TFileUtil::MoveFileL(const TFileName& aSrcFileName, const TFileName& aDstFileName) + { + User::LeaveIfError(iFs.Rename(aSrcFileName, aDstFileName)); + } + +void TFileUtil::CopyFileL(const TFileName& aSrcFileName, const TFileName& aDstFileName) + { + CFileMan* fileMan = CFileMan::NewL(iFs); + CleanupStack::PushL(fileMan); + + User::LeaveIfError(fileMan->Copy(aSrcFileName, aDstFileName)); + + CleanupStack::PopAndDestroy(); // fileMan + } + +void TFileUtil::CreateDirIfNeededL(const TFileName& aDirName) + { + TFileName dirName; + + dirName.Copy(aDirName); + + if (dirName[dirName.Length() - 1] != '\\') + { + dirName.Append('\\'); + } + + if (!FileExists(dirName)) + { + User::LeaveIfError(iFs.MkDirAll(dirName)); + } + } + +HBufC8* TFileUtil::To8BitL(const TDesC16& aDes) + { + HBufC8* desCopy; + + TInt desLength = aDes.Length(); + + if (desLength > 0) + { + desCopy = HBufC8::NewL(desLength); + desCopy->Des().Copy(aDes); + } + else + { + desCopy = HBufC8::NewL(1); + } + + return desCopy; + } + +HBufC16* TFileUtil::To16BitL(const TDesC8& aDes) + { + HBufC16* desCopy; + + TInt desLength = aDes.Length(); + + if (desLength > 0) + { + desCopy = HBufC16::NewL(desLength); + desCopy->Des().Copy(aDes); + } + else + { + desCopy = HBufC16::NewL(1); + } + + return desCopy; + } + +void TFileUtil::DeleteDirL(const TFileName& aDirName) + { + if (FileExists(aDirName)) + { + CFileMan* fileMan = CFileMan::NewL(iFs); + CleanupStack::PushL(fileMan); + + User::LeaveIfError(fileMan->RmDir(aDirName)); + + CleanupStack::PopAndDestroy(); // fileMan + } + }