--- /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 <f32file.h>
+#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
+ }
+ }