vpnengine/vpnmanager/src/fileutil.cpp
changeset 0 33413c0669b9
child 22 9f4e37332ce5
--- /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
+        }
+    }