sl@0: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // modifier_plugin.cpp sl@0: // sl@0: // sl@0: sl@0: #include "premodifier_plugin.h" sl@0: #include "plugincommon.h" sl@0: sl@0: /** sl@0: Leaving New function for the plugin sl@0: @internalComponent sl@0: */ sl@0: CPreModifierPlugin* CPreModifierPlugin::NewL() sl@0: { sl@0: CPreModifierPlugin* self = new(ELeave) CPreModifierPlugin; sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: /** sl@0: Constructor for the plugin sl@0: @internalComponent sl@0: */ sl@0: CPreModifierPlugin::CPreModifierPlugin() : iInterceptsEnabled(EFalse), sl@0: iLogging(ETrue) sl@0: { sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::ConstructL() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: The destructor for the plugin sl@0: @internalComponent sl@0: */ sl@0: CPreModifierPlugin::~CPreModifierPlugin() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: Initialise the plugin. sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::InitialiseL() sl@0: { sl@0: EnableInterceptsL(); sl@0: } sl@0: sl@0: /** sl@0: Enable the plugin's intercepts. sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::EnableInterceptsL() sl@0: { sl@0: if (iInterceptsEnabled) return; sl@0: sl@0: User::LeaveIfError(RegisterIntercept(EFsFileRead, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileWrite, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileRename, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileCreate, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSize, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSetSize, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileLock, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileUnLock, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileOpen, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileReplace, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsReadFileSection, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirReadOne, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirReadPacked, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSubClose, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirOpen, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileTemp, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDelete, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsReplace, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRename, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsEntry, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetEntry, EPostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSeek, EPostIntercept)); sl@0: sl@0: _LOG(_L("Pre-Modifier Plugin: Enabled intercepts.")); sl@0: sl@0: iInterceptsEnabled = ETrue; sl@0: } sl@0: sl@0: /** sl@0: Disable the plugin's intercepts. sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::DisableInterceptsL() sl@0: { sl@0: if (!iInterceptsEnabled) return; sl@0: sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileRead, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileWrite, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileRename, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileCreate, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileSize, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileSetSize, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileLock, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileUnLock, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileOpen, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileReplace, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsReadFileSection, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsDirReadOne, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsDirReadPacked, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileSubClose, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsDirOpen, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileTemp, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsDelete, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsReplace, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsRename, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsEntry, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsSetEntry, EPostIntercept)); sl@0: User::LeaveIfError(UnregisterIntercept(EFsFileSeek, EPostIntercept)); sl@0: sl@0: _LOG(_L("Pre-Modifier Plugin: Disabled intercepts.")); sl@0: sl@0: iInterceptsEnabled = EFalse; sl@0: } sl@0: sl@0: /** sl@0: Handle requests sl@0: @internalComponent sl@0: */ sl@0: TInt CPreModifierPlugin::DoRequestL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: sl@0: TInt function = aRequest.Function(); sl@0: sl@0: switch(function) sl@0: { sl@0: case EFsFileRead: sl@0: TRAP(err, FsFileReadL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileWrite: sl@0: TRAP(err, FsFileWriteL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileRename: sl@0: TRAP(err, FsFileRenameL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileCreate: sl@0: TRAP(err, FsFileCreateL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileSize: sl@0: TRAP(err, FsFileSizeL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileSetSize: sl@0: TRAP(err, FsFileSetSizeL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileLock: sl@0: TRAP(err, FsFileLockL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileUnLock: sl@0: TRAP(err, FsFileUnLockL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileSeek: sl@0: TRAP(err, FsFileSeekL(aRequest)); sl@0: break; sl@0: sl@0: case EFsDirReadOne: sl@0: TRAP(err,FsDirReadOneL(aRequest)); sl@0: break; sl@0: sl@0: case EFsDirReadPacked: sl@0: TRAP(err,FsDirReadPackedL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileOpen: sl@0: TRAP(err, FsFileOpenL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileReplace: sl@0: TRAP(err, FsFileReplaceL(aRequest)); sl@0: break; sl@0: sl@0: case EFsReadFileSection: sl@0: TRAP(err, FsReadFileSectionL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileSubClose: sl@0: TRAP(err, FsFileSubCloseL(aRequest)); sl@0: break; sl@0: sl@0: case EFsDirOpen: sl@0: TRAP(err, FsDirOpenL(aRequest)); sl@0: break; sl@0: sl@0: case EFsFileTemp: sl@0: TRAP(err, FsFileTempL(aRequest)); sl@0: break; sl@0: sl@0: case EFsDelete: sl@0: TRAP(err, FsDeleteL(aRequest)); sl@0: break; sl@0: sl@0: case EFsReplace: sl@0: TRAP(err, FsReplaceL(aRequest)); sl@0: break; sl@0: sl@0: case EFsRename: sl@0: TRAP(err, FsRenameL(aRequest)); sl@0: break; sl@0: sl@0: case EFsEntry: sl@0: TRAP(err, FsEntryL(aRequest)); sl@0: break; sl@0: sl@0: case EFsSetEntry: sl@0: TRAP(err, FsSetEntryL(aRequest)); sl@0: break; sl@0: sl@0: default: sl@0: break; sl@0: } sl@0: sl@0: return err; sl@0: } sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileUnLockL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt length = 0; sl@0: TInt64 pos = 0; sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TInt err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::ELength, length); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::EPosition, pos); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: //TPtrC extension(parse.Ext()); sl@0: sl@0: _LOG4(_L("CPreModifierPlugin::FsFileUnLockL, file: %S, pos: %d, length: %d"), &filename, pos, length); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileUnLockL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileLockL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt length = 0; sl@0: TInt64 pos = 0; sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TInt err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::ELength, length); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::EPosition, pos); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: TPtrC extension(parse.Ext()); sl@0: sl@0: _LOG4(_L("CPreModifierPlugin::FsFileLockL, file: %S, pos: %d, length: %d"), &filename, pos, length); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileLockL, post intercept")); sl@0: sl@0: // Request read from post interception sl@0: if (extension.CompareF(_L(".lockread")) == 0) sl@0: { sl@0: length = 10; sl@0: HBufC8* tempBuf = HBufC8::NewMaxLC(length); sl@0: TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); sl@0: _LOG(_L("CPreModifierPlugin::FsFileLockL , calling AdoptFromClient in post intercept")); sl@0: RFilePlugin fileplugin(aRequest); sl@0: TInt err = fileplugin.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsFileLockL, Adopt returned %d"), err); sl@0: sl@0: err = fileplugin.Read(pos, tempBufPtr, length); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileLockL, FileRead returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: fileplugin.Close(); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: // Request close from post interception sl@0: if(extension.CompareF(_L(".lockclose")) == 0) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileLockL, file = *.lockclose post intercept ")); sl@0: RFilePlugin fileplugin(aRequest); sl@0: TInt err = fileplugin.AdoptFromClient(); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileLockL ,Open %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: fileplugin.Close(); sl@0: _LOG(_L("CPreModifierPlugin::FsFileLockL, Close")); sl@0: } sl@0: sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileSeekL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TInt err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsFileSeekL, file: %S"), &filename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileSeekL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileSizeL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TInt err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsFileSizeL, file: %S"), &filename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileSizeL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileSetSizeL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TInt err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsFileSetSizeL, file: %S"), &filename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileSetSizeL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileReadL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt length = 0; sl@0: TInt64 pos = 0; sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TInt err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::ELength, length); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::EPosition, pos); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: sl@0: _LOG4(_L("CPreModifierPlugin::FsFileReadL, file: %S, pos: %d, length: %d"), &filename, pos, length); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileReadL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileWriteL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: TInt length = 0; sl@0: TInt64 pos = 0; sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: TBuf<256> testfilename1; sl@0: TBuf<256> testfilename2; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: testfilename2.Append(iDriveToTest); sl@0: testfilename2.Append(_L(":\\Data\\createcreate3.txt")); sl@0: sl@0: err = aRequest.FileName(filename); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::ELength, length); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::EPosition, pos); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: sl@0: _LOG4(_L("CPreModifierPlugin::FsFileWriteL, file: %S, pos: %d, length: %d"), &filename, pos, length); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileWriteL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileRenameL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName oldfilename, newfilename; sl@0: TParse parse; sl@0: sl@0: oldfilename = aRequest.Src().FullName(); sl@0: newfilename = aRequest.Dest().FullName(); sl@0: sl@0: parse.Set(oldfilename, NULL, NULL); sl@0: TPtrC extension(parse.Ext()); sl@0: sl@0: _LOG3(_L("CPreModifierPlugin::FsFileRenameL, old name: %S, new name: %S"), &oldfilename, &newfilename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileRenameL, post intercept")); sl@0: sl@0: if (extension.CompareF(_L(".tst")) == 0) sl@0: { sl@0: TBuf8<32> tempBuf = (_L8("Rename Post Intercept")); sl@0: RFilePlugin fileplugin(aRequest); sl@0: TInt err = fileplugin.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = fileplugin.Write(20, tempBuf); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileRenameL, FileWrite returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: fileplugin.Close(); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::FsFileCreateL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: filename = aRequest.Src().FullName(); sl@0: sl@0: TUint mode; sl@0: TInt err = aRequest.Read(TFsPluginRequest::EMode, mode); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: TPtrC extension(parse.Ext()); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileCreateL, post intercept")); sl@0: sl@0: if (extension.CompareF(_L(".tst")) == 0) sl@0: { sl@0: RFilePlugin fileplugin(aRequest); sl@0: TInt err = fileplugin.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //write to the newly created file sl@0: TBuf8<64> wbuffer; sl@0: wbuffer.Copy(_L8("TestTestTest")); sl@0: err = fileplugin.Write(0, wbuffer); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileCreateL, RFilePlugin::Write to the newly created file returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt length = wbuffer.Length(); sl@0: HBufC8* tempBuf = HBufC8::NewMaxLC(length); sl@0: TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); sl@0: err = fileplugin.Read(0, tempBufPtr); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileCreateL, RFilePlugin::Read returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: //testing the correct thing has been written to the drive sl@0: err = wbuffer.Compare(tempBufPtr); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: fileplugin.Close(); sl@0: CleanupStack::PopAndDestroy(); //tempBuf sl@0: } sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: void CPreModifierPlugin::FsFileOpenL(TFsPluginRequest& aRequest) sl@0: { sl@0: sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: filename = aRequest.Src().FullName(); sl@0: sl@0: TUint mode; sl@0: TInt err = aRequest.Read(TFsPluginRequest::EMode, mode); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: TPtrC extension(parse.Ext()); sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsFileOpenL, file: %S"), &filename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileOpenL, post intercept")); sl@0: if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0) && (mode & EFileWrite)) sl@0: { sl@0: sl@0: RFilePlugin fileplugin(aRequest); sl@0: err = fileplugin.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //write to the newly opened file sl@0: TBuf8<64> wbuffer; sl@0: wbuffer.Copy(_L8("TestTestTest")); sl@0: err = fileplugin.Write(0, wbuffer); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileOpenL, RFilePlugin::Write to the newly opened file returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt length = wbuffer.Length(); sl@0: HBufC8* tempBuf = HBufC8::NewMaxLC(length); sl@0: TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); sl@0: err = fileplugin.Read(0, tempBufPtr); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileOpenL, RFilePlugin::Read returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //testing the correct thing has been written to the drive sl@0: err = wbuffer.Compare(tempBufPtr); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: fileplugin.Close(); sl@0: sl@0: CleanupStack::PopAndDestroy(); //tempbuf sl@0: } sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::FsFileTempL(TFsPluginRequest& aRequest) sl@0: { sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\")); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileTempL, post intercept")); sl@0: sl@0: RFilePlugin fileplugin(aRequest); sl@0: TInt err = fileplugin.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //write to the newly created temp file sl@0: TBuf8<64> wbuffer; sl@0: wbuffer.Copy(_L8("TestTestTest")); sl@0: err = fileplugin.Write(0, wbuffer); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileTempL, RFilePlugin::Write to the newly created temp file returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt length = wbuffer.Length(); sl@0: HBufC8* tempBuf = HBufC8::NewMaxLC(length); sl@0: TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); sl@0: err = fileplugin.Read(0, tempBufPtr); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileTempL, RFilePlugin::Read returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: fileplugin.Close(); sl@0: sl@0: //testing the correct thing has been written to the drive sl@0: err = wbuffer.Compare(tempBufPtr); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::FsFileReplaceL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName filename; sl@0: TParse parse; sl@0: sl@0: filename = aRequest.Src().FullName(); sl@0: sl@0: TUint mode; sl@0: TInt err = aRequest.Read(TFsPluginRequest::EMode, mode); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: TPtrC extension(parse.Ext()); sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, file: %S"), &filename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileReplaceL, post intercept")); sl@0: if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0)) sl@0: { sl@0: //write to the newly replaced file sl@0: TBuf8<64> wbuffer; sl@0: wbuffer.Copy(_L8("TestTestTest")); sl@0: sl@0: RFilePlugin fileplugin(aRequest); sl@0: TInt err = fileplugin.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = fileplugin.Write(0, wbuffer); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, RFilePlugin::Write to the newly created file returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt length = wbuffer.Length(); sl@0: HBufC8* tempBuf = HBufC8::NewMaxLC(length); sl@0: TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); sl@0: err = fileplugin.Read(0, tempBufPtr); sl@0: _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, RFilePlugin::Read returned %d"), err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRe sl@0: sl@0: //testing the correct thing has been written to the drive sl@0: err = wbuffer.Compare(tempBufPtr); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: fileplugin.Close(); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: sl@0: void CPreModifierPlugin::FsReadFileSectionL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: TInt length = 0; sl@0: TInt64 pos = 0; sl@0: TFileName filename; sl@0: TParse parse; sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: filename = aRequest.Src().FullName(); sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::ELength, length); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: err = aRequest.Read(TFsPluginRequest::EPosition, pos); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: parse.Set(filename, NULL, NULL); sl@0: sl@0: _LOG2(_L("CPreModifierPlugin::FsReadFileSectionL, file: %S"), &filename); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsReadFileSectionL, post intercept - enter")); sl@0: RFilePlugin fileplugin2(aRequest,ETrue); sl@0: //open a second file sl@0: err = fileplugin2.Open(testfilename1, EFileWrite); sl@0: _LOG3(_L("CPreModifierPlugin::FsReadFileSectionL - RFilePlugin::Open for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt64 size=0; sl@0: err = fileplugin2.Size(size); sl@0: _LOG3(_L("CPreModifierPlugin::FsReadFileSectionL - RFilePlugin::Size for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //close the second file sl@0: fileplugin2.Close(); sl@0: _LOG(_L("CPreModifierPlugin::FsReadFileSectionL - post intercept - exit")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::FsDeleteL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: TFileName filename; sl@0: sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: filename = aRequest.Src().FullName(); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsDeleteL, post intercept")); sl@0: sl@0: RFilePlugin fileplugin2(aRequest); sl@0: //open a second file sl@0: err = fileplugin2.Open(testfilename1, EFileWrite); sl@0: _LOG3(_L("RFilePlugin::Open for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt64 size=0; sl@0: err = fileplugin2.Size(size); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //close the second file sl@0: fileplugin2.Close(); sl@0: _LOG2(_L("CPreModifierPlugin::FsDeleteL, RFilePlugin::Close to the second file returned %d"), err); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::FsReplaceL(TFsPluginRequest& aRequest) sl@0: { sl@0: TFileName oldfilename; sl@0: TFileName newfilename; sl@0: sl@0: oldfilename = aRequest.Src().FullName(); sl@0: newfilename = aRequest.Dest().FullName(); sl@0: sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: //STF: Is this code going to get called - the pre-operation completes early? sl@0: sl@0: _LOG(_L("CPreModifierPlugin::FsReplaceL, post intercept")); sl@0: //We should check that the name has changed here. sl@0: RFilePlugin file(aRequest); sl@0: TInt err = file.AdoptFromClient(); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt compare = oldfilename.Compare(newfilename); sl@0: if(compare != 0) //is equal sl@0: { sl@0: //User::Leave(compare); sl@0: //It wont be equal as the name is coming from the request aint it. sl@0: //Pointless comparison then eh? sl@0: } sl@0: sl@0: file.Close(); sl@0: sl@0: RFilePlugin fileplugin2(aRequest); sl@0: //open a second file sl@0: err = fileplugin2.Open(testfilename1, EFileWrite); sl@0: _LOG3(_L("CPreModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt64 size=0; sl@0: err =fileplugin2.Size(size); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //close the second file sl@0: fileplugin2.Close(); sl@0: _LOG2(_L("CPreModifierPlugin::FsReplaceL, RFilePlugin::Close to the second file returned %d"), err); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CPreModifierPlugin::FsRenameL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: TFileName oldfilename; sl@0: TFileName newfilename; sl@0: sl@0: oldfilename = aRequest.Src().FullName(); sl@0: newfilename = aRequest.Dest().FullName(); sl@0: sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsRenameL, post intercept")); sl@0: RFilePlugin fileplugin2(aRequest); sl@0: //open a second file sl@0: err = fileplugin2.Open(testfilename1, EFileWrite); sl@0: _LOG3(_L("CPreModifierPlugin::FsRenameL, RFilePlugin::Open for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt64 size=0; sl@0: err = fileplugin2.Size(size); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //close the second file sl@0: fileplugin2.Close(); sl@0: _LOG2(_L("CPreModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: void CPreModifierPlugin::FsEntryL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: TFileName filename; sl@0: sl@0: filename = aRequest.Src().FullName(); sl@0: sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsEntryL, post intercept")); sl@0: RFilePlugin fileplugin2(aRequest); sl@0: //open a second file sl@0: err = fileplugin2.Open(testfilename1, EFileWrite); sl@0: _LOG3(_L("CPreModifierPlugin::FsEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt64 size=0; sl@0: err = fileplugin2.Size(size); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //close the second file sl@0: fileplugin2.Close(); sl@0: _LOG2(_L("CPreModifierPlugin::FsEntryL, RFilePlugin::Close to the second file returned %d"), err); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: sl@0: void CPreModifierPlugin::FsSetEntryL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: sl@0: TBuf<256> testfilename1; sl@0: sl@0: //setting up test files sl@0: testfilename1.Append(iDriveToTest); sl@0: testfilename1.Append(_L(":\\Data\\test.txt")); sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsSetEntryL, post intercept")); sl@0: RFilePlugin fileplugin2(aRequest); sl@0: //open a second file sl@0: err = fileplugin2.Open(testfilename1, EFileWrite); sl@0: _LOG3(_L("CPreModifierPlugin::FsSetEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: TInt64 size=0; sl@0: err = fileplugin2.Size(size); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: //close the second file sl@0: fileplugin2.Close(); sl@0: _LOG2(_L("CPreModifierPlugin::FsSetEntryL, RFilePlugin::Close to the second file returned %d"), err); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsFileSubCloseL(TFsPluginRequest& aRequest) sl@0: { sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsFileSubCloseL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsDirOpenL(TFsPluginRequest& aRequest) sl@0: { sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsDirOpenL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: void CPreModifierPlugin::FsDirReadOneL(TFsPluginRequest& aRequest) sl@0: { sl@0: sl@0: TFileName name; sl@0: TInt err = aRequest.FileName(name); sl@0: iLastError = err; sl@0: iLineNumber = __LINE__; sl@0: if(err!=KErrNone) sl@0: User::Leave(err); //trapped in DoRequestL sl@0: sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsDirReadOneL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: void CPreModifierPlugin::FsDirReadPackedL(TFsPluginRequest& aRequest) sl@0: { sl@0: if (aRequest.IsPostOperation()) sl@0: { sl@0: _LOG(_L("CPreModifierPlugin::FsDirReadPackedL, post intercept")); sl@0: } sl@0: else sl@0: { sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: CFsPluginConn* CPreModifierPlugin::NewPluginConnL() sl@0: { sl@0: return new(ELeave) CPreModifierPluginConn(); sl@0: } sl@0: sl@0: //Asynchronous RPlugin::DoRequest sl@0: void CPreModifierPlugin::FsPluginDoRequestL(CFsPluginConnRequest& aRequest) sl@0: { sl@0: FsPluginDoControlL(aRequest); sl@0: } sl@0: sl@0: //Synchronous RPlugin::DoControl sl@0: TInt CPreModifierPlugin::FsPluginDoControlL(CFsPluginConnRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: sl@0: //We can use this to set the drive sl@0: //We can store this as a member of this class. sl@0: sl@0: TPckg errCodeDes(iLastError); sl@0: TPckg errMsgDes(iLineNumber); sl@0: sl@0: sl@0: TInt function = aRequest.Function(); sl@0: switch(function) sl@0: { sl@0: case KPluginSetDrive: sl@0: { sl@0: TPckg drive(iDriveToTest); sl@0: TRAP(err,aRequest.ReadParam1L(drive)); sl@0: break; sl@0: } sl@0: case KPluginGetError: sl@0: { sl@0: TRAP(err,aRequest.WriteParam1L(errCodeDes)); sl@0: TRAP(err,aRequest.WriteParam2L(errMsgDes)); sl@0: break; sl@0: } sl@0: default: sl@0: break; sl@0: } sl@0: sl@0: return err; sl@0: } sl@0: sl@0: TInt CPreModifierPluginConn::DoControl(CFsPluginConnRequest& aRequest) sl@0: { sl@0: return ((CPreModifierPlugin*)Plugin())->FsPluginDoControlL(aRequest); sl@0: } sl@0: sl@0: void CPreModifierPluginConn::DoRequest(CFsPluginConnRequest& aRequest) sl@0: { sl@0: DoControl(aRequest); sl@0: } sl@0: sl@0: void CPreModifierPluginConn::DoCancel(TInt /*aReqMask*/) sl@0: { sl@0: } sl@0: sl@0: //factory functions sl@0: sl@0: class CPreModifierPluginFactory : public CFsPluginFactory sl@0: { sl@0: public: sl@0: CPreModifierPluginFactory(); sl@0: virtual TInt Install(); sl@0: virtual CFsPlugin* NewPluginL(); sl@0: virtual CFsPlugin* NewPluginConnL(); sl@0: virtual TInt UniquePosition(); sl@0: }; sl@0: sl@0: /** sl@0: Constructor for the plugin factory sl@0: @internalComponent sl@0: */ sl@0: CPreModifierPluginFactory::CPreModifierPluginFactory() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: Install function for the plugin factory sl@0: @internalComponent sl@0: */ sl@0: TInt CPreModifierPluginFactory::Install() sl@0: { sl@0: SetSupportedDrives(KPluginSupportAllDrives); sl@0: //iSupportedDrives = 1<<23; sl@0: return(SetName(&KPreModifierPluginName)); sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: TInt CPreModifierPluginFactory::UniquePosition() sl@0: { sl@0: return(KPreModifierPos); sl@0: } sl@0: sl@0: /** sl@0: Plugin factory function sl@0: @internalComponent sl@0: */ sl@0: CFsPlugin* CPreModifierPluginFactory::NewPluginL() sl@0: sl@0: { sl@0: return CPreModifierPlugin::NewL(); sl@0: } sl@0: sl@0: /** sl@0: Plugin factory function sl@0: @internalComponent sl@0: */ sl@0: CFsPlugin* CPreModifierPluginFactory::NewPluginConnL() sl@0: sl@0: { sl@0: return CPreModifierPlugin::NewL(); sl@0: } sl@0: sl@0: /** sl@0: Create a new Plugin sl@0: @internalComponent sl@0: */ sl@0: extern "C" { sl@0: sl@0: EXPORT_C CFsPluginFactory* CreateFileSystem() sl@0: { sl@0: return(new CPreModifierPluginFactory()); sl@0: } sl@0: } sl@0: