Update contrib.
1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of the License "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // modifier_plugin.cpp
18 #include "premodifier_plugin.h"
19 #include "plugincommon.h"
22 Leaving New function for the plugin
25 CPreModifierPlugin* CPreModifierPlugin::NewL()
27 CPreModifierPlugin* self = new(ELeave) CPreModifierPlugin;
28 CleanupStack::PushL(self);
36 Constructor for the plugin
39 CPreModifierPlugin::CPreModifierPlugin() : iInterceptsEnabled(EFalse),
45 void CPreModifierPlugin::ConstructL()
50 The destructor for the plugin
53 CPreModifierPlugin::~CPreModifierPlugin()
58 Initialise the plugin.
61 void CPreModifierPlugin::InitialiseL()
67 Enable the plugin's intercepts.
70 void CPreModifierPlugin::EnableInterceptsL()
72 if (iInterceptsEnabled) return;
74 User::LeaveIfError(RegisterIntercept(EFsFileRead, EPostIntercept));
75 User::LeaveIfError(RegisterIntercept(EFsFileWrite, EPostIntercept));
76 User::LeaveIfError(RegisterIntercept(EFsFileRename, EPostIntercept));
77 User::LeaveIfError(RegisterIntercept(EFsFileCreate, EPostIntercept));
78 User::LeaveIfError(RegisterIntercept(EFsFileSize, EPostIntercept));
79 User::LeaveIfError(RegisterIntercept(EFsFileSetSize, EPostIntercept));
80 User::LeaveIfError(RegisterIntercept(EFsFileLock, EPostIntercept));
81 User::LeaveIfError(RegisterIntercept(EFsFileUnLock, EPostIntercept));
82 User::LeaveIfError(RegisterIntercept(EFsFileOpen, EPostIntercept));
83 User::LeaveIfError(RegisterIntercept(EFsFileReplace, EPostIntercept));
84 User::LeaveIfError(RegisterIntercept(EFsReadFileSection, EPostIntercept));
85 User::LeaveIfError(RegisterIntercept(EFsDirReadOne, EPostIntercept));
86 User::LeaveIfError(RegisterIntercept(EFsDirReadPacked, EPostIntercept));
87 User::LeaveIfError(RegisterIntercept(EFsFileSubClose, EPostIntercept));
88 User::LeaveIfError(RegisterIntercept(EFsDirOpen, EPostIntercept));
89 User::LeaveIfError(RegisterIntercept(EFsFileTemp, EPostIntercept));
90 User::LeaveIfError(RegisterIntercept(EFsDelete, EPostIntercept));
91 User::LeaveIfError(RegisterIntercept(EFsReplace, EPostIntercept));
92 User::LeaveIfError(RegisterIntercept(EFsRename, EPostIntercept));
93 User::LeaveIfError(RegisterIntercept(EFsEntry, EPostIntercept));
94 User::LeaveIfError(RegisterIntercept(EFsSetEntry, EPostIntercept));
95 User::LeaveIfError(RegisterIntercept(EFsFileSeek, EPostIntercept));
97 _LOG(_L("Pre-Modifier Plugin: Enabled intercepts."));
99 iInterceptsEnabled = ETrue;
103 Disable the plugin's intercepts.
106 void CPreModifierPlugin::DisableInterceptsL()
108 if (!iInterceptsEnabled) return;
110 User::LeaveIfError(UnregisterIntercept(EFsFileRead, EPostIntercept));
111 User::LeaveIfError(UnregisterIntercept(EFsFileWrite, EPostIntercept));
112 User::LeaveIfError(UnregisterIntercept(EFsFileRename, EPostIntercept));
113 User::LeaveIfError(UnregisterIntercept(EFsFileCreate, EPostIntercept));
114 User::LeaveIfError(UnregisterIntercept(EFsFileSize, EPostIntercept));
115 User::LeaveIfError(UnregisterIntercept(EFsFileSetSize, EPostIntercept));
116 User::LeaveIfError(UnregisterIntercept(EFsFileLock, EPostIntercept));
117 User::LeaveIfError(UnregisterIntercept(EFsFileUnLock, EPostIntercept));
118 User::LeaveIfError(UnregisterIntercept(EFsFileOpen, EPostIntercept));
119 User::LeaveIfError(UnregisterIntercept(EFsFileReplace, EPostIntercept));
120 User::LeaveIfError(UnregisterIntercept(EFsReadFileSection, EPostIntercept));
121 User::LeaveIfError(UnregisterIntercept(EFsDirReadOne, EPostIntercept));
122 User::LeaveIfError(UnregisterIntercept(EFsDirReadPacked, EPostIntercept));
123 User::LeaveIfError(UnregisterIntercept(EFsFileSubClose, EPostIntercept));
124 User::LeaveIfError(UnregisterIntercept(EFsDirOpen, EPostIntercept));
125 User::LeaveIfError(UnregisterIntercept(EFsFileTemp, EPostIntercept));
126 User::LeaveIfError(UnregisterIntercept(EFsDelete, EPostIntercept));
127 User::LeaveIfError(UnregisterIntercept(EFsReplace, EPostIntercept));
128 User::LeaveIfError(UnregisterIntercept(EFsRename, EPostIntercept));
129 User::LeaveIfError(UnregisterIntercept(EFsEntry, EPostIntercept));
130 User::LeaveIfError(UnregisterIntercept(EFsSetEntry, EPostIntercept));
131 User::LeaveIfError(UnregisterIntercept(EFsFileSeek, EPostIntercept));
133 _LOG(_L("Pre-Modifier Plugin: Disabled intercepts."));
135 iInterceptsEnabled = EFalse;
142 TInt CPreModifierPlugin::DoRequestL(TFsPluginRequest& aRequest)
146 TInt function = aRequest.Function();
151 TRAP(err, FsFileReadL(aRequest));
155 TRAP(err, FsFileWriteL(aRequest));
159 TRAP(err, FsFileRenameL(aRequest));
163 TRAP(err, FsFileCreateL(aRequest));
167 TRAP(err, FsFileSizeL(aRequest));
171 TRAP(err, FsFileSetSizeL(aRequest));
175 TRAP(err, FsFileLockL(aRequest));
179 TRAP(err, FsFileUnLockL(aRequest));
183 TRAP(err, FsFileSeekL(aRequest));
187 TRAP(err,FsDirReadOneL(aRequest));
190 case EFsDirReadPacked:
191 TRAP(err,FsDirReadPackedL(aRequest));
195 TRAP(err, FsFileOpenL(aRequest));
199 TRAP(err, FsFileReplaceL(aRequest));
202 case EFsReadFileSection:
203 TRAP(err, FsReadFileSectionL(aRequest));
206 case EFsFileSubClose:
207 TRAP(err, FsFileSubCloseL(aRequest));
211 TRAP(err, FsDirOpenL(aRequest));
215 TRAP(err, FsFileTempL(aRequest));
219 TRAP(err, FsDeleteL(aRequest));
223 TRAP(err, FsReplaceL(aRequest));
227 TRAP(err, FsRenameL(aRequest));
231 TRAP(err, FsEntryL(aRequest));
235 TRAP(err, FsSetEntryL(aRequest));
249 void CPreModifierPlugin::FsFileUnLockL(TFsPluginRequest& aRequest)
256 TInt err = aRequest.FileName(filename);
258 iLineNumber = __LINE__;
260 User::Leave(err); //trapped in DoRequestL
262 err = aRequest.Read(TFsPluginRequest::ELength, length);
264 iLineNumber = __LINE__;
266 User::Leave(err); //trapped in DoRequestL
268 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
270 iLineNumber = __LINE__;
272 User::Leave(err); //trapped in DoRequestL
274 parse.Set(filename, NULL, NULL);
275 //TPtrC extension(parse.Ext());
277 _LOG4(_L("CPreModifierPlugin::FsFileUnLockL, file: %S, pos: %d, length: %d"), &filename, pos, length);
279 if (aRequest.IsPostOperation())
281 _LOG(_L("CPreModifierPlugin::FsFileUnLockL, post intercept"));
292 void CPreModifierPlugin::FsFileLockL(TFsPluginRequest& aRequest)
299 TInt err = aRequest.FileName(filename);
301 iLineNumber = __LINE__;
303 User::Leave(err); //trapped in DoRequestL
305 err = aRequest.Read(TFsPluginRequest::ELength, length);
307 iLineNumber = __LINE__;
309 User::Leave(err); //trapped in DoRequestL
311 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
313 iLineNumber = __LINE__;
315 User::Leave(err); //trapped in DoRequestL
317 parse.Set(filename, NULL, NULL);
318 TPtrC extension(parse.Ext());
320 _LOG4(_L("CPreModifierPlugin::FsFileLockL, file: %S, pos: %d, length: %d"), &filename, pos, length);
322 if (aRequest.IsPostOperation())
324 _LOG(_L("CPreModifierPlugin::FsFileLockL, post intercept"));
326 // Request read from post interception
327 if (extension.CompareF(_L(".lockread")) == 0)
330 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
331 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
332 _LOG(_L("CPreModifierPlugin::FsFileLockL , calling AdoptFromClient in post intercept"));
333 RFilePlugin fileplugin(aRequest);
334 TInt err = fileplugin.AdoptFromClient();
336 iLineNumber = __LINE__;
338 User::Leave(err); //trapped in DoRequestL
340 _LOG2(_L("CPreModifierPlugin::FsFileLockL, Adopt returned %d"), err);
342 err = fileplugin.Read(pos, tempBufPtr, length);
343 _LOG2(_L("CPreModifierPlugin::FsFileLockL, FileRead returned %d"), err);
345 iLineNumber = __LINE__;
347 User::Leave(err); //trapped in DoRequestL
349 CleanupStack::PopAndDestroy();
352 // Request close from post interception
353 if(extension.CompareF(_L(".lockclose")) == 0)
355 _LOG(_L("CPreModifierPlugin::FsFileLockL, file = *.lockclose post intercept "));
356 RFilePlugin fileplugin(aRequest);
357 TInt err = fileplugin.AdoptFromClient();
358 _LOG2(_L("CPreModifierPlugin::FsFileLockL ,Open %d"), err);
360 iLineNumber = __LINE__;
362 User::Leave(err); //trapped in DoRequestL
364 _LOG(_L("CPreModifierPlugin::FsFileLockL, Close"));
377 void CPreModifierPlugin::FsFileSeekL(TFsPluginRequest& aRequest)
382 TInt err = aRequest.FileName(filename);
384 iLineNumber = __LINE__;
386 User::Leave(err); //trapped in DoRequestL
388 parse.Set(filename, NULL, NULL);
390 _LOG2(_L("CPreModifierPlugin::FsFileSeekL, file: %S"), &filename);
392 if (aRequest.IsPostOperation())
394 _LOG(_L("CPreModifierPlugin::FsFileSeekL, post intercept"));
405 void CPreModifierPlugin::FsFileSizeL(TFsPluginRequest& aRequest)
410 TInt err = aRequest.FileName(filename);
412 iLineNumber = __LINE__;
414 User::Leave(err); //trapped in DoRequestL
416 parse.Set(filename, NULL, NULL);
418 _LOG2(_L("CPreModifierPlugin::FsFileSizeL, file: %S"), &filename);
420 if (aRequest.IsPostOperation())
422 _LOG(_L("CPreModifierPlugin::FsFileSizeL, post intercept"));
433 void CPreModifierPlugin::FsFileSetSizeL(TFsPluginRequest& aRequest)
438 TInt err = aRequest.FileName(filename);
440 iLineNumber = __LINE__;
442 User::Leave(err); //trapped in DoRequestL
444 parse.Set(filename, NULL, NULL);
446 _LOG2(_L("CPreModifierPlugin::FsFileSetSizeL, file: %S"), &filename);
448 if (aRequest.IsPostOperation())
450 _LOG(_L("CPreModifierPlugin::FsFileSetSizeL, post intercept"));
461 void CPreModifierPlugin::FsFileReadL(TFsPluginRequest& aRequest)
468 TInt err = aRequest.FileName(filename);
470 iLineNumber = __LINE__;
472 User::Leave(err); //trapped in DoRequestL
474 err = aRequest.Read(TFsPluginRequest::ELength, length);
476 iLineNumber = __LINE__;
478 User::Leave(err); //trapped in DoRequestL
480 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
482 iLineNumber = __LINE__;
484 User::Leave(err); //trapped in DoRequestL
486 parse.Set(filename, NULL, NULL);
488 _LOG4(_L("CPreModifierPlugin::FsFileReadL, file: %S, pos: %d, length: %d"), &filename, pos, length);
490 if (aRequest.IsPostOperation())
492 _LOG(_L("CPreModifierPlugin::FsFileReadL, post intercept"));
504 void CPreModifierPlugin::FsFileWriteL(TFsPluginRequest& aRequest)
512 TBuf<256> testfilename1;
513 TBuf<256> testfilename2;
515 //setting up test files
516 testfilename1.Append(iDriveToTest);
517 testfilename1.Append(_L(":\\Data\\test.txt"));
519 testfilename2.Append(iDriveToTest);
520 testfilename2.Append(_L(":\\Data\\createcreate3.txt"));
522 err = aRequest.FileName(filename);
524 iLineNumber = __LINE__;
526 User::Leave(err); //trapped in DoRequestL
528 err = aRequest.Read(TFsPluginRequest::ELength, length);
530 iLineNumber = __LINE__;
532 User::Leave(err); //trapped in DoRequestL
534 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
536 iLineNumber = __LINE__;
538 User::Leave(err); //trapped in DoRequestL
540 parse.Set(filename, NULL, NULL);
542 _LOG4(_L("CPreModifierPlugin::FsFileWriteL, file: %S, pos: %d, length: %d"), &filename, pos, length);
544 if (aRequest.IsPostOperation())
546 _LOG(_L("CPreModifierPlugin::FsFileWriteL, post intercept"));
559 void CPreModifierPlugin::FsFileRenameL(TFsPluginRequest& aRequest)
561 TFileName oldfilename, newfilename;
564 oldfilename = aRequest.Src().FullName();
565 newfilename = aRequest.Dest().FullName();
567 parse.Set(oldfilename, NULL, NULL);
568 TPtrC extension(parse.Ext());
570 _LOG3(_L("CPreModifierPlugin::FsFileRenameL, old name: %S, new name: %S"), &oldfilename, &newfilename);
572 if (aRequest.IsPostOperation())
574 _LOG(_L("CPreModifierPlugin::FsFileRenameL, post intercept"));
576 if (extension.CompareF(_L(".tst")) == 0)
578 TBuf8<32> tempBuf = (_L8("Rename Post Intercept"));
579 RFilePlugin fileplugin(aRequest);
580 TInt err = fileplugin.AdoptFromClient();
582 iLineNumber = __LINE__;
584 User::Leave(err); //trapped in DoRequestL
586 err = fileplugin.Write(20, tempBuf);
587 _LOG2(_L("CPreModifierPlugin::FsFileRenameL, FileWrite returned %d"), err);
589 iLineNumber = __LINE__;
591 User::Leave(err); //trapped in DoRequestL
602 void CPreModifierPlugin::FsFileCreateL(TFsPluginRequest& aRequest)
607 filename = aRequest.Src().FullName();
610 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
612 iLineNumber = __LINE__;
614 User::Leave(err); //trapped in DoRequestL
616 parse.Set(filename, NULL, NULL);
617 TPtrC extension(parse.Ext());
619 if (aRequest.IsPostOperation())
621 _LOG(_L("CPreModifierPlugin::FsFileCreateL, post intercept"));
623 if (extension.CompareF(_L(".tst")) == 0)
625 RFilePlugin fileplugin(aRequest);
626 TInt err = fileplugin.AdoptFromClient();
628 iLineNumber = __LINE__;
630 User::Leave(err); //trapped in DoRequestL
632 //write to the newly created file
634 wbuffer.Copy(_L8("TestTestTest"));
635 err = fileplugin.Write(0, wbuffer);
636 _LOG2(_L("CPreModifierPlugin::FsFileCreateL, RFilePlugin::Write to the newly created file returned %d"), err);
638 iLineNumber = __LINE__;
640 User::Leave(err); //trapped in DoRequestL
642 TInt length = wbuffer.Length();
643 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
644 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
645 err = fileplugin.Read(0, tempBufPtr);
646 _LOG2(_L("CPreModifierPlugin::FsFileCreateL, RFilePlugin::Read returned %d"), err);
648 iLineNumber = __LINE__;
650 User::Leave(err); //trapped in DoRequestL
651 //testing the correct thing has been written to the drive
652 err = wbuffer.Compare(tempBufPtr);
654 iLineNumber = __LINE__;
656 User::Leave(err); //trapped in DoRequestL
659 CleanupStack::PopAndDestroy(); //tempBuf
668 void CPreModifierPlugin::FsFileOpenL(TFsPluginRequest& aRequest)
674 filename = aRequest.Src().FullName();
677 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
679 iLineNumber = __LINE__;
681 User::Leave(err); //trapped in DoRequestL
683 parse.Set(filename, NULL, NULL);
684 TPtrC extension(parse.Ext());
686 _LOG2(_L("CPreModifierPlugin::FsFileOpenL, file: %S"), &filename);
688 if (aRequest.IsPostOperation())
690 _LOG(_L("CPreModifierPlugin::FsFileOpenL, post intercept"));
691 if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0) && (mode & EFileWrite))
694 RFilePlugin fileplugin(aRequest);
695 err = fileplugin.AdoptFromClient();
697 iLineNumber = __LINE__;
699 User::Leave(err); //trapped in DoRequestL
701 //write to the newly opened file
703 wbuffer.Copy(_L8("TestTestTest"));
704 err = fileplugin.Write(0, wbuffer);
705 _LOG2(_L("CPreModifierPlugin::FsFileOpenL, RFilePlugin::Write to the newly opened file returned %d"), err);
707 iLineNumber = __LINE__;
709 User::Leave(err); //trapped in DoRequestL
711 TInt length = wbuffer.Length();
712 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
713 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
714 err = fileplugin.Read(0, tempBufPtr);
715 _LOG2(_L("CPreModifierPlugin::FsFileOpenL, RFilePlugin::Read returned %d"), err);
717 iLineNumber = __LINE__;
719 User::Leave(err); //trapped in DoRequestL
721 //testing the correct thing has been written to the drive
722 err = wbuffer.Compare(tempBufPtr);
724 iLineNumber = __LINE__;
726 User::Leave(err); //trapped in DoRequestL
730 CleanupStack::PopAndDestroy(); //tempbuf
740 void CPreModifierPlugin::FsFileTempL(TFsPluginRequest& aRequest)
742 TBuf<256> testfilename1;
744 //setting up test files
745 testfilename1.Append(iDriveToTest);
746 testfilename1.Append(_L(":\\Data\\"));
748 if (aRequest.IsPostOperation())
750 _LOG(_L("CPreModifierPlugin::FsFileTempL, post intercept"));
752 RFilePlugin fileplugin(aRequest);
753 TInt err = fileplugin.AdoptFromClient();
755 iLineNumber = __LINE__;
757 User::Leave(err); //trapped in DoRequestL
759 //write to the newly created temp file
761 wbuffer.Copy(_L8("TestTestTest"));
762 err = fileplugin.Write(0, wbuffer);
763 _LOG2(_L("CPreModifierPlugin::FsFileTempL, RFilePlugin::Write to the newly created temp file returned %d"), err);
765 iLineNumber = __LINE__;
767 User::Leave(err); //trapped in DoRequestL
769 TInt length = wbuffer.Length();
770 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
771 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
772 err = fileplugin.Read(0, tempBufPtr);
773 _LOG2(_L("CPreModifierPlugin::FsFileTempL, RFilePlugin::Read returned %d"), err);
775 iLineNumber = __LINE__;
777 User::Leave(err); //trapped in DoRequestL
781 //testing the correct thing has been written to the drive
782 err = wbuffer.Compare(tempBufPtr);
784 iLineNumber = __LINE__;
786 User::Leave(err); //trapped in DoRequestL
788 CleanupStack::PopAndDestroy();
797 void CPreModifierPlugin::FsFileReplaceL(TFsPluginRequest& aRequest)
802 filename = aRequest.Src().FullName();
805 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
807 iLineNumber = __LINE__;
809 User::Leave(err); //trapped in DoRequestL
811 parse.Set(filename, NULL, NULL);
812 TPtrC extension(parse.Ext());
814 _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, file: %S"), &filename);
816 if (aRequest.IsPostOperation())
818 _LOG(_L("CPreModifierPlugin::FsFileReplaceL, post intercept"));
819 if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0))
821 //write to the newly replaced file
823 wbuffer.Copy(_L8("TestTestTest"));
825 RFilePlugin fileplugin(aRequest);
826 TInt err = fileplugin.AdoptFromClient();
828 iLineNumber = __LINE__;
830 User::Leave(err); //trapped in DoRequestL
832 err = fileplugin.Write(0, wbuffer);
833 _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, RFilePlugin::Write to the newly created file returned %d"), err);
835 iLineNumber = __LINE__;
837 User::Leave(err); //trapped in DoRequestL
839 TInt length = wbuffer.Length();
840 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
841 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
842 err = fileplugin.Read(0, tempBufPtr);
843 _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, RFilePlugin::Read returned %d"), err);
845 iLineNumber = __LINE__;
847 User::Leave(err); //trapped in DoRe
849 //testing the correct thing has been written to the drive
850 err = wbuffer.Compare(tempBufPtr);
852 iLineNumber = __LINE__;
854 User::Leave(err); //trapped in DoRequestL
857 CleanupStack::PopAndDestroy();
868 void CPreModifierPlugin::FsReadFileSectionL(TFsPluginRequest& aRequest)
875 TBuf<256> testfilename1;
877 //setting up test files
878 testfilename1.Append(iDriveToTest);
879 testfilename1.Append(_L(":\\Data\\test.txt"));
881 filename = aRequest.Src().FullName();
883 err = aRequest.Read(TFsPluginRequest::ELength, length);
885 iLineNumber = __LINE__;
887 User::Leave(err); //trapped in DoRequestL
889 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
891 iLineNumber = __LINE__;
893 User::Leave(err); //trapped in DoRequestL
895 parse.Set(filename, NULL, NULL);
897 _LOG2(_L("CPreModifierPlugin::FsReadFileSectionL, file: %S"), &filename);
899 if (aRequest.IsPostOperation())
901 _LOG(_L("CPreModifierPlugin::FsReadFileSectionL, post intercept - enter"));
902 RFilePlugin fileplugin2(aRequest,ETrue);
904 err = fileplugin2.Open(testfilename1, EFileWrite);
905 _LOG3(_L("CPreModifierPlugin::FsReadFileSectionL - RFilePlugin::Open for %S returned %d"), &testfilename1, err);
907 iLineNumber = __LINE__;
909 User::Leave(err); //trapped in DoRequestL
912 err = fileplugin2.Size(size);
913 _LOG3(_L("CPreModifierPlugin::FsReadFileSectionL - RFilePlugin::Size for %S returned %d"), &testfilename1, err);
915 iLineNumber = __LINE__;
917 User::Leave(err); //trapped in DoRequestL
919 //close the second file
921 _LOG(_L("CPreModifierPlugin::FsReadFileSectionL - post intercept - exit"));
930 void CPreModifierPlugin::FsDeleteL(TFsPluginRequest& aRequest)
935 TBuf<256> testfilename1;
937 //setting up test files
938 testfilename1.Append(iDriveToTest);
939 testfilename1.Append(_L(":\\Data\\test.txt"));
941 filename = aRequest.Src().FullName();
943 if (aRequest.IsPostOperation())
945 _LOG(_L("CPreModifierPlugin::FsDeleteL, post intercept"));
947 RFilePlugin fileplugin2(aRequest);
949 err = fileplugin2.Open(testfilename1, EFileWrite);
950 _LOG3(_L("RFilePlugin::Open for %S returned %d"), &testfilename1, err);
952 iLineNumber = __LINE__;
954 User::Leave(err); //trapped in DoRequestL
957 err = fileplugin2.Size(size);
959 iLineNumber = __LINE__;
961 User::Leave(err); //trapped in DoRequestL
963 //close the second file
965 _LOG2(_L("CPreModifierPlugin::FsDeleteL, RFilePlugin::Close to the second file returned %d"), err);
974 void CPreModifierPlugin::FsReplaceL(TFsPluginRequest& aRequest)
976 TFileName oldfilename;
977 TFileName newfilename;
979 oldfilename = aRequest.Src().FullName();
980 newfilename = aRequest.Dest().FullName();
982 TBuf<256> testfilename1;
984 //setting up test files
985 testfilename1.Append(iDriveToTest);
986 testfilename1.Append(_L(":\\Data\\test.txt"));
989 if (aRequest.IsPostOperation())
991 //STF: Is this code going to get called - the pre-operation completes early?
993 _LOG(_L("CPreModifierPlugin::FsReplaceL, post intercept"));
994 //We should check that the name has changed here.
995 RFilePlugin file(aRequest);
996 TInt err = file.AdoptFromClient();
998 iLineNumber = __LINE__;
1000 User::Leave(err); //trapped in DoRequestL
1002 TInt compare = oldfilename.Compare(newfilename);
1003 if(compare != 0) //is equal
1005 //User::Leave(compare);
1006 //It wont be equal as the name is coming from the request aint it.
1007 //Pointless comparison then eh?
1012 RFilePlugin fileplugin2(aRequest);
1013 //open a second file
1014 err = fileplugin2.Open(testfilename1, EFileWrite);
1015 _LOG3(_L("CPreModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1017 iLineNumber = __LINE__;
1019 User::Leave(err); //trapped in DoRequestL
1022 err =fileplugin2.Size(size);
1024 iLineNumber = __LINE__;
1026 User::Leave(err); //trapped in DoRequestL
1028 //close the second file
1029 fileplugin2.Close();
1030 _LOG2(_L("CPreModifierPlugin::FsReplaceL, RFilePlugin::Close to the second file returned %d"), err);
1039 void CPreModifierPlugin::FsRenameL(TFsPluginRequest& aRequest)
1041 TInt err = KErrNone;
1042 TFileName oldfilename;
1043 TFileName newfilename;
1045 oldfilename = aRequest.Src().FullName();
1046 newfilename = aRequest.Dest().FullName();
1048 TBuf<256> testfilename1;
1050 //setting up test files
1051 testfilename1.Append(iDriveToTest);
1052 testfilename1.Append(_L(":\\Data\\test.txt"));
1054 if (aRequest.IsPostOperation())
1056 _LOG(_L("CPreModifierPlugin::FsRenameL, post intercept"));
1057 RFilePlugin fileplugin2(aRequest);
1058 //open a second file
1059 err = fileplugin2.Open(testfilename1, EFileWrite);
1060 _LOG3(_L("CPreModifierPlugin::FsRenameL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1062 iLineNumber = __LINE__;
1064 User::Leave(err); //trapped in DoRequestL
1067 err = fileplugin2.Size(size);
1069 iLineNumber = __LINE__;
1071 User::Leave(err); //trapped in DoRequestL
1073 //close the second file
1074 fileplugin2.Close();
1075 _LOG2(_L("CPreModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err);
1083 void CPreModifierPlugin::FsEntryL(TFsPluginRequest& aRequest)
1085 TInt err = KErrNone;
1088 filename = aRequest.Src().FullName();
1090 TBuf<256> testfilename1;
1092 //setting up test files
1093 testfilename1.Append(iDriveToTest);
1094 testfilename1.Append(_L(":\\Data\\test.txt"));
1096 if (aRequest.IsPostOperation())
1098 _LOG(_L("CPreModifierPlugin::FsEntryL, post intercept"));
1099 RFilePlugin fileplugin2(aRequest);
1100 //open a second file
1101 err = fileplugin2.Open(testfilename1, EFileWrite);
1102 _LOG3(_L("CPreModifierPlugin::FsEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1104 iLineNumber = __LINE__;
1106 User::Leave(err); //trapped in DoRequestL
1109 err = fileplugin2.Size(size);
1111 iLineNumber = __LINE__;
1113 User::Leave(err); //trapped in DoRequestL
1115 //close the second file
1116 fileplugin2.Close();
1117 _LOG2(_L("CPreModifierPlugin::FsEntryL, RFilePlugin::Close to the second file returned %d"), err);
1127 void CPreModifierPlugin::FsSetEntryL(TFsPluginRequest& aRequest)
1129 TInt err = KErrNone;
1131 TBuf<256> testfilename1;
1133 //setting up test files
1134 testfilename1.Append(iDriveToTest);
1135 testfilename1.Append(_L(":\\Data\\test.txt"));
1137 if (aRequest.IsPostOperation())
1139 _LOG(_L("CPreModifierPlugin::FsSetEntryL, post intercept"));
1140 RFilePlugin fileplugin2(aRequest);
1141 //open a second file
1142 err = fileplugin2.Open(testfilename1, EFileWrite);
1143 _LOG3(_L("CPreModifierPlugin::FsSetEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1145 iLineNumber = __LINE__;
1147 User::Leave(err); //trapped in DoRequestL
1150 err = fileplugin2.Size(size);
1152 iLineNumber = __LINE__;
1154 User::Leave(err); //trapped in DoRequestL
1156 //close the second file
1157 fileplugin2.Close();
1158 _LOG2(_L("CPreModifierPlugin::FsSetEntryL, RFilePlugin::Close to the second file returned %d"), err);
1170 void CPreModifierPlugin::FsFileSubCloseL(TFsPluginRequest& aRequest)
1172 if (aRequest.IsPostOperation())
1174 _LOG(_L("CPreModifierPlugin::FsFileSubCloseL, post intercept"));
1185 void CPreModifierPlugin::FsDirOpenL(TFsPluginRequest& aRequest)
1187 if (aRequest.IsPostOperation())
1189 _LOG(_L("CPreModifierPlugin::FsDirOpenL, post intercept"));
1197 void CPreModifierPlugin::FsDirReadOneL(TFsPluginRequest& aRequest)
1201 TInt err = aRequest.FileName(name);
1203 iLineNumber = __LINE__;
1205 User::Leave(err); //trapped in DoRequestL
1207 if (aRequest.IsPostOperation())
1209 _LOG(_L("CPreModifierPlugin::FsDirReadOneL, post intercept"));
1221 void CPreModifierPlugin::FsDirReadPackedL(TFsPluginRequest& aRequest)
1223 if (aRequest.IsPostOperation())
1225 _LOG(_L("CPreModifierPlugin::FsDirReadPackedL, post intercept"));
1234 CFsPluginConn* CPreModifierPlugin::NewPluginConnL()
1236 return new(ELeave) CPreModifierPluginConn();
1239 //Asynchronous RPlugin::DoRequest
1240 void CPreModifierPlugin::FsPluginDoRequestL(CFsPluginConnRequest& aRequest)
1242 FsPluginDoControlL(aRequest);
1245 //Synchronous RPlugin::DoControl
1246 TInt CPreModifierPlugin::FsPluginDoControlL(CFsPluginConnRequest& aRequest)
1248 TInt err = KErrNone;
1250 //We can use this to set the drive
1251 //We can store this as a member of this class.
1253 TPckg<TInt> errCodeDes(iLastError);
1254 TPckg<TInt> errMsgDes(iLineNumber);
1257 TInt function = aRequest.Function();
1260 case KPluginSetDrive:
1262 TPckg<TChar> drive(iDriveToTest);
1263 TRAP(err,aRequest.ReadParam1L(drive));
1266 case KPluginGetError:
1268 TRAP(err,aRequest.WriteParam1L(errCodeDes));
1269 TRAP(err,aRequest.WriteParam2L(errMsgDes));
1279 TInt CPreModifierPluginConn::DoControl(CFsPluginConnRequest& aRequest)
1281 return ((CPreModifierPlugin*)Plugin())->FsPluginDoControlL(aRequest);
1284 void CPreModifierPluginConn::DoRequest(CFsPluginConnRequest& aRequest)
1286 DoControl(aRequest);
1289 void CPreModifierPluginConn::DoCancel(TInt /*aReqMask*/)
1295 class CPreModifierPluginFactory : public CFsPluginFactory
1298 CPreModifierPluginFactory();
1299 virtual TInt Install();
1300 virtual CFsPlugin* NewPluginL();
1301 virtual CFsPlugin* NewPluginConnL();
1302 virtual TInt UniquePosition();
1306 Constructor for the plugin factory
1309 CPreModifierPluginFactory::CPreModifierPluginFactory()
1314 Install function for the plugin factory
1317 TInt CPreModifierPluginFactory::Install()
1319 SetSupportedDrives(KPluginSupportAllDrives);
1320 //iSupportedDrives = 1<<23;
1321 return(SetName(&KPreModifierPluginName));
1327 TInt CPreModifierPluginFactory::UniquePosition()
1329 return(KPreModifierPos);
1333 Plugin factory function
1336 CFsPlugin* CPreModifierPluginFactory::NewPluginL()
1339 return CPreModifierPlugin::NewL();
1343 Plugin factory function
1346 CFsPlugin* CPreModifierPluginFactory::NewPluginConnL()
1349 return CPreModifierPlugin::NewL();
1358 EXPORT_C CFsPluginFactory* CreateFileSystem()
1360 return(new CPreModifierPluginFactory());