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.
16 #include "modifier_plugin.h"
17 #include "plugincommon.h"
18 #include <f32pluginutils.h>
21 Leaving New function for the plugin
24 CModifierPlugin* CModifierPlugin::NewL()
26 CModifierPlugin* self = new(ELeave) CModifierPlugin;
27 CleanupStack::PushL(self);
35 Constructor for the plugin
38 CModifierPlugin::CModifierPlugin() : iInterceptsEnabled(EFalse),
44 void CModifierPlugin::ConstructL()
49 The destructor for the plugin
52 CModifierPlugin::~CModifierPlugin()
57 Initialise the plugin.
60 void CModifierPlugin::InitialiseL()
66 Enable the plugin's intercepts.
69 void CModifierPlugin::EnableInterceptsL()
71 if (iInterceptsEnabled) return;
73 User::LeaveIfError(RegisterIntercept(EFsFileRead, EPreIntercept));
74 User::LeaveIfError(RegisterIntercept(EFsFileWrite, EPreIntercept));
75 User::LeaveIfError(RegisterIntercept(EFsFileRename, EPreIntercept));
76 User::LeaveIfError(RegisterIntercept(EFsFileCreate, EPreIntercept));
77 User::LeaveIfError(RegisterIntercept(EFsFileSize, EPreIntercept));
78 User::LeaveIfError(RegisterIntercept(EFsFileSetSize, EPreIntercept));
79 User::LeaveIfError(RegisterIntercept(EFsFileLock, EPreIntercept));
80 User::LeaveIfError(RegisterIntercept(EFsFileUnLock, EPreIntercept));
81 User::LeaveIfError(RegisterIntercept(EFsFileOpen, EPreIntercept));
82 User::LeaveIfError(RegisterIntercept(EFsFileReplace, EPreIntercept));
83 User::LeaveIfError(RegisterIntercept(EFsReadFileSection, EPreIntercept));
84 User::LeaveIfError(RegisterIntercept(EFsDirReadOne, EPreIntercept));
85 User::LeaveIfError(RegisterIntercept(EFsDirReadPacked, EPreIntercept));
86 User::LeaveIfError(RegisterIntercept(EFsFileSubClose, EPreIntercept));
87 User::LeaveIfError(RegisterIntercept(EFsDirOpen, EPreIntercept));
88 User::LeaveIfError(RegisterIntercept(EFsFileTemp, EPreIntercept));
89 User::LeaveIfError(RegisterIntercept(EFsDelete, EPreIntercept));
90 User::LeaveIfError(RegisterIntercept(EFsReplace, EPreIntercept));
91 User::LeaveIfError(RegisterIntercept(EFsRename, EPreIntercept));
92 User::LeaveIfError(RegisterIntercept(EFsEntry, EPreIntercept));
93 User::LeaveIfError(RegisterIntercept(EFsSetEntry, EPreIntercept));
94 User::LeaveIfError(RegisterIntercept(EFsFileSeek, EPreIntercept));
95 User::LeaveIfError(RegisterIntercept(EFsPluginDoControl, EPreIntercept));
96 User::LeaveIfError(RegisterIntercept(EFsPluginDoRequest, EPreIntercept));
97 User::LeaveIfError(RegisterIntercept(EFsVolume, EPreIntercept));
100 _LOG(_L("Modifier Plugin: Enabled intercepts."));
102 iInterceptsEnabled = ETrue;
106 Disable the plugin's intercepts.
109 void CModifierPlugin::DisableInterceptsL()
111 if (!iInterceptsEnabled) return;
113 User::LeaveIfError(UnregisterIntercept(EFsFileRead, EPreIntercept));
114 User::LeaveIfError(UnregisterIntercept(EFsFileWrite, EPreIntercept));
115 User::LeaveIfError(UnregisterIntercept(EFsFileRename, EPreIntercept));
116 User::LeaveIfError(UnregisterIntercept(EFsFileCreate, EPreIntercept));
117 User::LeaveIfError(UnregisterIntercept(EFsFileSize, EPreIntercept));
118 User::LeaveIfError(UnregisterIntercept(EFsFileSetSize, EPreIntercept));
119 User::LeaveIfError(UnregisterIntercept(EFsFileLock, EPreIntercept));
120 User::LeaveIfError(UnregisterIntercept(EFsFileUnLock, EPreIntercept));
121 User::LeaveIfError(UnregisterIntercept(EFsFileOpen, EPreIntercept));
122 User::LeaveIfError(UnregisterIntercept(EFsFileReplace, EPreIntercept));
123 User::LeaveIfError(UnregisterIntercept(EFsReadFileSection, EPreIntercept));
124 User::LeaveIfError(UnregisterIntercept(EFsDirReadOne, EPreIntercept));
125 User::LeaveIfError(UnregisterIntercept(EFsDirReadPacked, EPreIntercept));
126 User::LeaveIfError(UnregisterIntercept(EFsFileSubClose, EPreIntercept));
127 User::LeaveIfError(UnregisterIntercept(EFsDirOpen, EPreIntercept));
128 User::LeaveIfError(UnregisterIntercept(EFsFileTemp, EPreIntercept));
129 User::LeaveIfError(UnregisterIntercept(EFsDelete, EPreIntercept));
130 User::LeaveIfError(UnregisterIntercept(EFsReplace, EPreIntercept));
131 User::LeaveIfError(UnregisterIntercept(EFsRename, EPreIntercept));
132 User::LeaveIfError(UnregisterIntercept(EFsEntry, EPreIntercept));
133 User::LeaveIfError(UnregisterIntercept(EFsSetEntry, EPreIntercept));
134 User::LeaveIfError(UnregisterIntercept(EFsFileSeek, EPreIntercept));
135 User::LeaveIfError(UnregisterIntercept(EFsVolume, EPreIntercept));
137 _LOG(_L("Modifier Plugin: Disabled intercepts."));
139 iInterceptsEnabled = EFalse;
146 TInt CModifierPlugin::DoRequestL(TFsPluginRequest& aRequest)
148 iLastError = KErrNone;
149 iLineNumber = __LINE__;
153 TInt function = aRequest.Function();
155 if(aRequest.IsPostOperation())
157 _LOG2(_L("CModifierPlugin::DoRequestL for Function %d in Post-Interception"),function);
161 _LOG2(_L("CModifierPlugin::DoRequestL for Function %d in Pre-Interception"),function);
167 TRAP(err, FsFileReadL(aRequest));
171 TRAP(err, FsFileWriteL(aRequest));
175 TRAP(err, FsFileRenameL(aRequest));
179 TRAP(err, FsFileCreateL(aRequest));
183 TRAP(err, FsFileSizeL(aRequest));
187 TRAP(err, FsFileSetSizeL(aRequest));
191 TRAP(err, FsFileLockL(aRequest));
195 TRAP(err, FsFileUnLockL(aRequest));
199 TRAP(err, FsFileSeekL(aRequest));
203 TRAP(err,FsDirReadOneL(aRequest));
206 case EFsDirReadPacked:
207 TRAP(err,FsDirReadPackedL(aRequest));
211 TRAP(err, FsFileOpenL(aRequest));
215 TRAP(err, FsFileReplaceL(aRequest));
218 case EFsReadFileSection:
219 TRAP(err, FsReadFileSectionL(aRequest));
222 case EFsFileSubClose:
223 TRAP(err, FsFileSubCloseL(aRequest));
227 TRAP(err, FsDirOpenL(aRequest));
231 TRAP(err, FsFileTempL(aRequest));
235 TRAP(err, FsDeleteL(aRequest));
239 TRAP(err, FsReplaceL(aRequest));
243 TRAP(err, FsRenameL(aRequest));
247 TRAP(err, FsEntryL(aRequest));
251 TRAP(err, FsSetEntryL(aRequest));
255 TRAP(err, FsVolumeL(aRequest));
269 void CModifierPlugin::FsFileUnLockL(TFsPluginRequest& aRequest)
276 TInt err = aRequest.FileName(filename);
278 iLineNumber = __LINE__;
280 User::Leave(err); //trapped in DoRequestL
282 err = aRequest.Read(TFsPluginRequest::ELength, length);
284 iLineNumber = __LINE__;
286 User::Leave(err); //trapped in DoRequestL
288 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
290 iLineNumber = __LINE__;
292 User::Leave(err); //trapped in DoRequestL
294 parse.Set(filename, NULL, NULL);
295 TPtrC extension(parse.Ext());
297 _LOG4(_L("CModifierPlugin::FsFileUnLockL, file: %S, pos: %d, length: %d"), &filename, pos, length);
299 if (aRequest.IsPostOperation())
301 _LOG(_L("CModifierPlugin::FsFileUnLockL, post intercept"));
305 _LOG(_L("CModifierPlugin::FsFileUnLockL, pre intercept"));
306 if(extension.CompareF(_L(".unlock")) == 0)
308 RFilePlugin fileplugin(aRequest);
309 err = fileplugin.AdoptFromClient();
311 iLineNumber = __LINE__;
313 User::Leave(err); //trapped in DoRequestL
315 err = fileplugin.UnLock(pos, length);
317 iLineNumber = __LINE__;
319 User::Leave(err); //trapped in DoRequestL
323 User::Leave(KErrCompletion);
331 void CModifierPlugin::FsFileLockL(TFsPluginRequest& aRequest)
338 TInt err = aRequest.FileName(filename);
340 iLineNumber = __LINE__;
342 User::Leave(err); //trapped in DoRequestL
344 err = aRequest.Read(TFsPluginRequest::ELength, length);
346 iLineNumber = __LINE__;
348 User::Leave(err); //trapped in DoRequestL
350 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
352 iLineNumber = __LINE__;
354 User::Leave(err); //trapped in DoRequestL
356 parse.Set(filename, NULL, NULL);
357 TPtrC extension(parse.Ext());
359 _LOG4(_L("CModifierPlugin::FsFileLockL, file: %S, pos: %d, length: %d"), &filename, pos, length);
361 if (aRequest.IsPostOperation())
363 _LOG(_L("CModifierPlugin::FsFileLockL, post intercept"));
365 // Request read from post interception
366 if (extension.CompareF(_L(".lockread")) == 0)
369 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
370 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
371 _LOG(_L("CModifierPlugin::FsFileLockL , calling FileRead in post intercept"));
372 RFilePlugin fileplugin(aRequest);
373 TInt err = fileplugin.AdoptFromClient();
374 _LOG2(_L("CModifierPlugin::FsFileLockL, Adopt returned %d"), err);
376 iLineNumber = __LINE__;
378 User::Leave(err); //trapped in DoRequestL
380 err = fileplugin.Read(pos, tempBufPtr, length);
381 _LOG2(_L("CModifierPlugin::FsFileLockL, FileRead returned %d"), err);
383 iLineNumber = __LINE__;
385 User::Leave(err); //trapped in DoRequestL
388 CleanupStack::PopAndDestroy();
391 // Request close from post interception
392 if(extension.CompareF(_L(".lockclose")) == 0)
394 _LOG(_L("CModifierPlugin::FsFileLockL, calling Close in post intercept "));
396 RFilePlugin fileplugin(aRequest);
397 TInt err = fileplugin.AdoptFromClient();
398 _LOG2(_L("CModifierPlugin::FsFileLockL ,Open %d"), err);
400 iLineNumber = __LINE__;
402 User::Leave(err); //trapped in DoRequestL
404 _LOG(_L("CModifierPlugin::FsFileLockL, Close"));
405 //Try to close twice?
407 _LOG(_L("CModifierPlugin::FsFileLockL, Close"));
413 _LOG(_L("CModifierPlugin::FsFileLockL, pre intercept"));
414 if((extension.CompareF(_L(".lock")) == 0)
415 || (extension.CompareF(_L(".lockclose")) == 0)
416 || (extension.CompareF(_L(".lockread")) == 0) )
418 RFilePlugin fileplugin(aRequest);
419 TInt err = fileplugin.AdoptFromClient();
421 iLineNumber = __LINE__;
423 User::Leave(err); //trapped in DoRequestL
425 err = fileplugin.Lock(0,2);
427 iLineNumber = __LINE__;
429 User::Leave(err); //trapped in DoRequestL
433 User::Leave(KErrCompletion);
441 void CModifierPlugin::FsFileSeekL(TFsPluginRequest& aRequest)
446 TInt err = aRequest.FileName(filename);
448 iLineNumber = __LINE__;
450 User::Leave(err); //trapped in DoRequestL
452 parse.Set(filename, NULL, NULL);
453 TPtrC extension(parse.Ext());
455 _LOG2(_L("CModifierPlugin::FsFileSeekL, file: %S"), &filename);
457 if (aRequest.IsPostOperation())
459 _LOG(_L("CModifierPlugin::FsFileSeekL, post intercept"));
463 _LOG(_L("CModifierPlugin::FsFileSeekL, pre intercept"));
464 if(extension.CompareF(_L(".seek")) == 0)
466 RFilePlugin fileplugin(aRequest);
467 TInt err = fileplugin.AdoptFromClient();
469 iLineNumber = __LINE__;
471 User::Leave(err); //trapped in DoRequestL
475 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
477 iLineNumber = __LINE__;
479 User::Leave(err); //trapped in DoRequestL
481 err = aRequest.Read(TFsPluginRequest::EMode, (TUint&)mode);
483 iLineNumber = __LINE__;
485 User::Leave(err); //trapped in DoRequestL
487 err = fileplugin.Seek(mode,pos);
489 iLineNumber = __LINE__;
491 User::Leave(err); //trapped in DoRequestL
493 //STF: When we add TInt64 write, should also add TInt write also...
494 TPtrC8 p((TUint8*)&pos,sizeof(TInt));
495 err = aRequest.Write(TFsPluginRequest::ENewPosition, p);
497 iLineNumber = __LINE__;
499 User::Leave(err); //trapped in DoRequestL
509 void CModifierPlugin::FsFileSizeL(TFsPluginRequest& aRequest)
514 TInt err = aRequest.FileName(filename);
516 iLineNumber = __LINE__;
518 User::Leave(err); //trapped in DoRequestL
520 parse.Set(filename, NULL, NULL);
521 TPtrC extension(parse.Ext());
523 _LOG2(_L("CModifierPlugin::FsFileSizeL, file: %S"), &filename);
525 if (aRequest.IsPostOperation())
527 _LOG(_L("CModifierPlugin::FsFileSizeL, post intercept"));
531 _LOG(_L("CModifierPlugin::FsFileSizeL, pre intercept"));
532 if(extension.CompareF(_L(".size")) == 0)
534 _LOG(_L("CModifierPlugin::FsFileSizeL"));
536 RFilePlugin fileplugin(aRequest);
537 TInt err = fileplugin.AdoptFromClient();
539 iLineNumber = __LINE__;
541 User::Leave(err); //trapped in DoRequestL
544 err = fileplugin.Size(size);
546 iLineNumber = __LINE__;
548 User::Leave(err); //trapped in DoRequestL
550 TInt sizeLow = I64LOW(size); //STF: Need 64-bit write for size?
551 TPckgBuf<TInt> sizeBuf(sizeLow);
552 err = aRequest.Write(TFsPluginRequest::ESize, sizeBuf);
554 iLineNumber = __LINE__;
556 User::Leave(err); //trapped in DoRequestL
560 // request processed by plug-in
561 User::Leave(KErrCompletion);
569 void CModifierPlugin::FsFileSetSizeL(TFsPluginRequest& aRequest)
574 TInt err = aRequest.FileName(filename);
576 iLineNumber = __LINE__;
578 User::Leave(err); //trapped in DoRequestL
580 parse.Set(filename, NULL, NULL);
582 _LOG2(_L("CModifierPlugin::FsFileSetSizeL, file: %S"), &filename);
584 if (aRequest.IsPostOperation())
586 _LOG(_L("CModifierPlugin::FsFileSetSizeL, post intercept"));
590 RFilePlugin fileplugin(aRequest);
591 TInt err = fileplugin.AdoptFromClient();
593 iLineNumber = __LINE__;
595 User::Leave(err); //trapped in DoRequestL
597 _LOG(_L("CModifierPlugin::FsFileSetSizeL, pre intercept"));
600 err = aRequest.Read(TFsPluginRequest::ESize, size);
602 iLineNumber = __LINE__;
604 User::Leave(err); //trapped in DoRequestL
606 err = fileplugin.SetSize(size);
608 iLineNumber = __LINE__;
610 User::Leave(err); //trapped in DoRequestL
614 // request processed by plug-in
615 User::Leave(KErrCompletion);
622 void CModifierPlugin::FsFileReadL(TFsPluginRequest& aRequest)
629 TInt err = aRequest.FileName(filename);
631 iLineNumber = __LINE__;
633 User::Leave(err); //trapped in DoRequestL
635 err = aRequest.Read(TFsPluginRequest::ELength, length);
637 iLineNumber = __LINE__;
639 User::Leave(err); //trapped in DoRequestL
641 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
643 iLineNumber = __LINE__;
645 User::Leave(err); //trapped in DoRequestL
647 parse.Set(filename, NULL, NULL);
648 TPtrC extension(parse.Ext());
650 _LOG4(_L("CModifierPlugin::FsFileReadL, file: %S, pos: %d, length: %d"), &filename, pos, length);
652 if (aRequest.IsPostOperation())
654 _LOG(_L("CModifierPlugin::FsFileReadL, post intercept"));
658 _LOG(_L("CModifierPlugin::FsFileReadL, pre intercept"));
659 if (extension.CompareF(_L(".tst")) == 0)
662 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
663 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
665 _LOG(_L("CModifierPlugin::FsFileReadL, calling FileRead"));
667 RFilePlugin fileplugin(aRequest);
668 TInt err = fileplugin.AdoptFromClient();
670 iLineNumber = __LINE__;
672 User::Leave(err); //trapped in DoRequestL
674 err = fileplugin.Read(pos, tempBufPtr, length);
675 _LOG2(_L("CModifierPlugin::FsFileReadL, FileRead returned %d"), err);
677 iLineNumber = __LINE__;
679 User::Leave(err); //trapped in DoRequestL
681 err = aRequest.Write(TFsPluginRequest::EData, tempBufPtr);
682 _LOG2(_L("CModifierPlugin::FsFileReadL, ClientWrite returned %d"), err);
684 iLineNumber = __LINE__;
686 User::Leave(err); //trapped in DoRequestL
690 CleanupStack::PopAndDestroy(); //tempBuf
692 // request processed by plug-in
693 User::Leave(KErrCompletion);
696 // Intercepting a Read(has handle) and performing a ReadFileSection (lacks handle) instead
697 if (extension.CompareF(_L(".readfile")) == 0)
699 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
700 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
702 _LOG(_L("CModifierPlugin::FileRead, calling FsReadFileSection "));
704 RFsPlugin fsplugin(aRequest);
705 TInt err = fsplugin.Connect();
707 iLineNumber = __LINE__;
709 User::Leave(err); //trapped in DoRequestL
711 err = fsplugin.ReadFileSection(filename, pos, tempBufPtr, length);
712 _LOG2(_L("CModifierPlugin::FileRead, FileRead returned %d"), err);
714 iLineNumber = __LINE__;
716 User::Leave(err); //trapped in DoRequestL
719 err = aRequest.Write(TFsPluginRequest::EData, tempBufPtr);
720 _LOG2(_L("CModifierPlugin::FileRead, ClientWrite returned %d"), err);
722 iLineNumber = __LINE__;
724 User::Leave(err); //trapped in DoRequestL
727 CleanupStack::PopAndDestroy();
729 // request processed by plug-in
730 User::Leave(KErrCompletion);
740 void CModifierPlugin::FsFileWriteL(TFsPluginRequest& aRequest)
747 TBuf<256> testfilename1;
748 TBuf<256> testfilename2;
750 //setting up test files
751 testfilename1.Append(iDriveToTest);
752 testfilename1.Append(_L(":\\Data\\test.txt"));
754 testfilename2.Append(iDriveToTest);
755 testfilename2.Append(_L(":\\Data\\createcreate3.txt"));
757 TInt err = aRequest.FileName(filename);
759 iLineNumber = __LINE__;
761 User::Leave(err); //trapped in DoRequestL
763 err = aRequest.Read(TFsPluginRequest::ELength, length);
765 iLineNumber = __LINE__;
767 User::Leave(err); //trapped in DoRequestL
769 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
771 iLineNumber = __LINE__;
773 User::Leave(err); //trapped in DoRequestL
775 parse.Set(filename, NULL, NULL);
776 TPtrC extension(parse.Ext());
778 _LOG4(_L("CModifierPlugin::FsFileWriteL, file: %S, pos: %d, length: %d"), &filename, pos, length);
780 if (aRequest.IsPostOperation())
782 _LOG(_L("CModifierPlugin::FsFileWriteL, post intercept"));
786 _LOG(_L("CModifierPlugin::FsFileWriteL, pre intercept"));
788 if (extension.CompareF(_L(".tst")) == 0)
790 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
791 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
793 TInt err = aRequest.Read(TFsPluginRequest::EData, tempBufPtr);
794 _LOG2(_L("CModifierPlugin::FsFileWriteL, ClientRead returned %d"), err);
796 iLineNumber = __LINE__;
798 User::Leave(err); //trapped in DoRequestL
800 RFilePlugin fileplugin(aRequest);
801 err = fileplugin.AdoptFromClient();
803 iLineNumber = __LINE__;
805 User::Leave(err); //trapped in DoRequestL
808 err = fileplugin.Lock(0,2);
810 iLineNumber = __LINE__;
812 User::Leave(err); //trapped in DoRequestL
814 err = fileplugin.UnLock(0,2);
816 iLineNumber = __LINE__;
818 User::Leave(err); //trapped in DoRequestL
821 err = fileplugin.Write(pos, tempBufPtr);
822 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Write returned %d"), err);
824 iLineNumber = __LINE__;
826 User::Leave(err); //trapped in DoRequestL
828 //Test sending multiple plugin requests using the RFilePlugin class
829 HBufC8* tempBuf2 = HBufC8::NewMaxLC(length);
830 TPtr8 tempBufPtr2((TUint8 *)tempBuf2->Des().Ptr(), length, length);
831 err = fileplugin.Read(pos, tempBufPtr2);
832 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Read returned %d"), err);
834 iLineNumber = __LINE__;
836 User::Leave(err); //trapped in DoRequestL
838 //testing the correct thing has been written to the drive
839 err = tempBufPtr.Compare(tempBufPtr2);
841 iLineNumber = __LINE__;
843 User::Leave(err); //trapped in DoRequestL
845 RFilePlugin fileplugin2(aRequest);
849 err = fileplugin2.Open(testfilename1, EFileWrite);
850 _LOG3(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
852 iLineNumber = __LINE__;
854 User::Leave(err); //trapped in DoRequestL
857 //write to the second file
858 err = fileplugin2.Write(pos, tempBufPtr2);
859 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Write to the second file returned %d"), err);
861 iLineNumber = __LINE__;
863 User::Leave(err); //trapped in DoRequestL
865 //close the second file
867 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Close to the second file returned %d"), err);
869 //read from the first file
870 HBufC8* tempBuf3 = HBufC8::NewMaxLC(length);
871 TPtr8 tempBufPtr3((TUint8 *)tempBuf3->Des().Ptr(), length, length);
872 err = fileplugin.Read(pos, tempBufPtr3);
873 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Read returned %d"), err);
875 iLineNumber = __LINE__;
877 User::Leave(err); //trapped in DoRequestL
879 RFsPlugin fsplugin(aRequest);
880 err = fsplugin.Connect();
882 iLineNumber = __LINE__;
884 User::Leave(err); //trapped in DoRequestL
886 err = fsplugin.Delete(testfilename2);
887 if(err == KErrNone || err == KErrNotFound)
891 iLineNumber = __LINE__;
893 User::Leave(err); //trapped in DoRequestL
895 //close the first file.
899 err = fileplugin.Create(testfilename2, EFileWrite);
901 iLineNumber = __LINE__;
903 User::Leave(err); //trapped in DoRequestL
904 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Create returned %d"), err);
906 //write to the newly created file
907 err = fileplugin.Write(pos, tempBufPtr2);
908 _LOG2(_L("CModifierPlugin::FsFileWriteL, RFilePlugin::Write to the newly created file returned %d"), err);
910 iLineNumber = __LINE__;
912 User::Leave(err); //trapped in DoRequestL
914 //close the newly created file
917 //delete the newly created file
918 err = fsplugin.Delete(testfilename2);
920 iLineNumber = __LINE__;
922 User::Leave(err); //trapped in DoRequestL
926 CleanupStack::PopAndDestroy();
928 // request processed by plug-in
929 User::Leave(KErrCompletion);
939 void CModifierPlugin::FsFileRenameL(TFsPluginRequest& aRequest)
941 TFileName oldfilename, newfilename;
944 oldfilename = aRequest.Src().FullName();
945 newfilename = aRequest.Dest().FullName();
947 parse.Set(oldfilename, NULL, NULL);
948 TPtrC extension(parse.Ext());
950 _LOG3(_L("CModifierPlugin::FsFileRenameL, old name: %S, new name: %S"), &oldfilename, &newfilename);
952 if (aRequest.IsPostOperation())
954 _LOG(_L("CModifierPlugin::FsFileRenameL, post intercept"));
956 if (extension.CompareF(_L(".tst")) == 0)
958 TBuf8<32> tempBuf = (_L8("Rename Post Intercept"));
959 RFilePlugin fileplugin(aRequest);
960 TInt err = fileplugin.AdoptFromClient();
962 iLineNumber = __LINE__;
964 User::Leave(err); //trapped in DoRequestL
966 err = fileplugin.Write(20, tempBuf);
967 _LOG2(_L("CModifierPlugin::FsFileRenameL, FileWrite returned %d"), err);
970 iLineNumber = __LINE__;
972 User::Leave(err); //trapped in DoRequestL
978 _LOG(_L("CModifierPlugin::FsFileRenameL, pre intercept"));
980 if (extension.CompareF(_L(".tst")) == 0)
982 TBuf8<32> tempBuf = (_L8("Rename Pre Intercept"));
983 RFilePlugin fileplugin(aRequest);
984 TInt err = fileplugin.AdoptFromClient();
986 iLineNumber = __LINE__;
988 User::Leave(err); //trapped in DoRequestL
990 err = fileplugin.Write(0, tempBuf);
991 _LOG2(_L("CModifierPlugin::FsFileRenameL, FileWrite returned %d"), err);
993 iLineNumber = __LINE__;
995 User::Leave(err); //trapped in DoRequestL
997 err = fileplugin.Rename(newfilename);
998 _LOG2(_L("CModifierPlugin::FsFileRenameL, FilePlugin::Rename returned %d"), err);
1000 iLineNumber = __LINE__;
1002 User::Leave(err); //trapped in DoRequestL
1005 User::Leave(KErrCompletion);
1011 void CModifierPlugin::FsFileCreateL(TFsPluginRequest& aRequest)
1016 filename = aRequest.Src().FullName();
1019 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1021 iLineNumber = __LINE__;
1023 User::Leave(err); //trapped in DoRequestL
1025 parse.Set(filename, NULL, NULL);
1026 TPtrC extension(parse.Ext());
1028 if (aRequest.IsPostOperation())
1030 _LOG(_L("CModifierPlugin::FsFileCreateL, post intercept"));
1032 if (extension.CompareF(_L(".tst")) == 0)
1034 RFilePlugin fileplugin(aRequest);
1035 TInt err = fileplugin.AdoptFromClient();
1037 iLineNumber = __LINE__;
1039 User::Leave(err); //trapped in DoRequestL
1041 //write to the newly created file
1043 wbuffer.Copy(_L8("TestTestTest"));
1044 err = fileplugin.Write(0, wbuffer);
1045 _LOG2(_L("CModifierPlugin::FsFileCreateL, RFilePlugin::Write to the newly created file returned %d"), err);
1047 iLineNumber = __LINE__;
1049 User::Leave(err); //trapped in DoRequestL
1051 TInt length = wbuffer.Length();
1052 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1053 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1054 err = fileplugin.Read(0, tempBufPtr);
1055 _LOG2(_L("CModifierPlugin::FsFileCreateL, RFilePlugin::Read returned %d"), err);
1057 iLineNumber = __LINE__;
1059 User::Leave(err); //trapped in DoRequestL
1061 //testing the correct thing has been written to the drive
1062 err = wbuffer.Compare(tempBufPtr);
1064 iLineNumber = __LINE__;
1066 User::Leave(err); //trapped in DoRequestL
1069 CleanupStack::PopAndDestroy(); //tempBuf
1074 _LOG(_L("CModifierPlugin::FsFileCreateL, pre intercept"));
1076 RFilePlugin fileplugin(aRequest);
1078 TInt err = fileplugin.Create(filename, mode);
1080 _LOG2(_L("CModifierPlugin::FsFileCreateL, RFilePlugin::Create returned %d"), err);
1082 iLineNumber = __LINE__;
1084 User::Leave(err); //trapped in DoRequestL
1086 err = fileplugin.TransferToClient();
1088 iLineNumber = __LINE__;
1090 User::Leave(err); //trapped in DoRequestL
1093 User::Leave(KErrCompletion);
1097 void CModifierPlugin::FsFileOpenL(TFsPluginRequest& aRequest)
1103 filename = aRequest.Src().FullName();
1106 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1108 iLineNumber = __LINE__;
1110 User::Leave(err); //trapped in DoRequestL
1112 parse.Set(filename, NULL, NULL);
1113 TPtrC extension(parse.Ext());
1115 _LOG2(_L("CModifierPlugin::FsFileOpenL, file: %S"), &filename);
1117 // Check that FileName can't be used in pre-operation (as the handle doesn't exist yet!)
1118 TFileName shareName;
1119 err = aRequest.FileName(shareName);
1120 if (aRequest.IsPostOperation())
1122 err = filename.Compare(shareName);
1124 iLineNumber = __LINE__;
1126 User::Leave(err); //trapped in DoRequestL
1128 else if(err != KErrNotSupported)
1131 iLineNumber = __LINE__;
1133 User::Leave(err); //trapped in DoRequestL
1136 if (aRequest.IsPostOperation())
1138 _LOG(_L("CModifierPlugin::FsFileOpenL, post intercept"));
1139 if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0) && (mode & EFileWrite))
1142 RFilePlugin fileplugin(aRequest);
1143 err = fileplugin.AdoptFromClient();
1145 iLineNumber = __LINE__;
1147 User::Leave(err); //trapped in DoRequestL
1149 //write to the newly opened file
1151 wbuffer.Copy(_L8("TestTestTest"));
1152 err = fileplugin.Write(0, wbuffer);
1153 _LOG2(_L("CModifierPlugin::FsFileOpenL, RFilePlugin::Write to the newly opened file returned %d"), err);
1155 iLineNumber = __LINE__;
1157 User::Leave(err); //trapped in DoRequestL
1159 TInt length = wbuffer.Length();
1160 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1161 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1162 err = fileplugin.Read(0, tempBufPtr);
1163 _LOG2(_L("CModifierPlugin::FsFileOpenL, RFilePlugin::Read returned %d"), err);
1165 iLineNumber = __LINE__;
1167 User::Leave(err); //trapped in DoRequestL
1169 //testing the correct thing has been written to the drive
1170 err = wbuffer.Compare(tempBufPtr);
1172 iLineNumber = __LINE__;
1174 User::Leave(err); //trapped in DoRequestL
1178 CleanupStack::PopAndDestroy(); //tempbuf
1183 _LOG(_L("CModifierPlugin::FsFileOpenL, pre intercept"));
1185 RFilePlugin fileplugin(aRequest);
1186 err = fileplugin.Open(filename, mode);
1187 _LOG3(_L("CModifierPlugin::FsFileOpenL, RFilePlugin::Open for %S returned %d"), &filename, err);
1189 iLineNumber = __LINE__;
1191 User::Leave(err); //trapped in DoRequestL
1193 err = fileplugin.TransferToClient();
1195 iLineNumber = __LINE__;
1197 User::Leave(err); //trapped in DoRequestL
1199 User::Leave(KErrCompletion); // STF : Completing and not setting the handle of the original request?
1204 void CModifierPlugin::FsFileTempL(TFsPluginRequest& aRequest)
1206 TBuf<256> testfilename1;
1208 //setting up test files
1209 testfilename1.Append(iDriveToTest);
1210 testfilename1.Append(_L(":\\Data\\"));
1212 if (aRequest.IsPostOperation())
1214 _LOG(_L("CModifierPlugin::FsFileTempL, post intercept"));
1216 RFilePlugin fileplugin(aRequest);
1217 TInt err = fileplugin.AdoptFromClient();
1219 iLineNumber = __LINE__;
1221 User::Leave(err); //trapped in DoRequestL
1223 //write to the newly created temp file
1225 wbuffer.Copy(_L8("TestTestTest"));
1226 err = fileplugin.Write(0, wbuffer);
1227 _LOG2(_L("CModifierPlugin::FsFileTempL, RFilePlugin::Write to the newly created temp file returned %d"), err);
1229 iLineNumber = __LINE__;
1231 User::Leave(err); //trapped in DoRequestL
1233 TInt length = wbuffer.Length();
1234 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1235 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1236 err = fileplugin.Read(0, tempBufPtr);
1237 _LOG2(_L("CModifierPlugin::FsFileTempL, RFilePlugin::Read returned %d"), err);
1239 iLineNumber = __LINE__;
1241 User::Leave(err); //trapped in DoRequestL
1245 //testing the correct thing has been written to the drive
1246 err = wbuffer.Compare(tempBufPtr);
1248 iLineNumber = __LINE__;
1250 User::Leave(err); //trapped in DoRequestL
1252 CleanupStack::PopAndDestroy();
1256 _LOG(_L("CModifierPlugin::FsFileTempL, pre intercept"));
1259 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1261 iLineNumber = __LINE__;
1263 User::Leave(err); //trapped in DoRequestL
1266 RFilePlugin fileplugin(aRequest);
1267 err = fileplugin.Temp(testfilename1, fn, mode);
1268 _LOG2(_L("CModifierPlugin::FsFileTempL, RFilePlugin::Temp returned %d"), err);
1270 iLineNumber = __LINE__;
1272 User::Leave(err); //trapped in DoRequestL
1274 err = aRequest.Write(TFsPluginRequest::ENewName, fn);
1275 _LOG2(_L("CModifierPlugin::FsFileTempL, ClientWrite returned %d"), err);
1277 iLineNumber = __LINE__;
1279 User::Leave(err); //trapped in DoRequestL
1281 err = fileplugin.TransferToClient();
1283 iLineNumber = __LINE__;
1285 User::Leave(err); //trapped in DoRequestL
1289 User::Leave(KErrCompletion);
1294 void CModifierPlugin::FsFileReplaceL(TFsPluginRequest& aRequest)
1299 filename = aRequest.Src().FullName();
1302 TInt err = aRequest.Read(TFsPluginRequest::EMode, mode);
1304 iLineNumber = __LINE__;
1306 User::Leave(err); //trapped in DoRequestL
1308 parse.Set(filename, NULL, NULL);
1309 TPtrC extension(parse.Ext());
1311 _LOG2(_L("CModifierPlugin::FsFileReplaceL, file: %S"), &filename);
1313 if (aRequest.IsPostOperation())
1315 _LOG(_L("CModifierPlugin::FsFileReplaceL, post intercept"));
1316 if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0))
1318 //write to the newly replaced file
1320 wbuffer.Copy(_L8("TestTestTest"));
1322 RFilePlugin fileplugin(aRequest);
1323 TInt err = fileplugin.AdoptFromClient();
1325 iLineNumber = __LINE__;
1327 User::Leave(err); //trapped in DoRequestL
1329 err = fileplugin.Write(0, wbuffer);
1330 _LOG2(_L("CModifierPlugin::FsFileReplaceL, RFilePlugin::Write to the newly created file returned %d"), err);
1332 iLineNumber = __LINE__;
1334 User::Leave(err); //trapped in DoRequestL
1336 TInt length = wbuffer.Length();
1337 HBufC8* tempBuf = HBufC8::NewMaxLC(length);
1338 TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length);
1339 err = fileplugin.Read(0, tempBufPtr);
1340 _LOG2(_L("CModifierPlugin::FsFileReplaceL, RFilePlugin::Read returned %d"), err);
1342 iLineNumber = __LINE__;
1344 User::Leave(err); //trapped in DoRequestL
1346 //testing the correct thing has been written to the drive
1347 err = wbuffer.Compare(tempBufPtr);
1349 iLineNumber = __LINE__;
1351 User::Leave(err); //trapped in DoRequestL
1353 CleanupStack::PopAndDestroy();
1358 RFilePlugin fileplugin(aRequest);
1360 TInt err = fileplugin.Replace(filename, mode);
1361 _LOG2(_L("CModifierPlugin::FsFileReplaceL, RFilePlugin::Replace returned %d"), err);
1363 iLineNumber = __LINE__;
1365 User::Leave(err); //trapped in DoRequestL
1367 err = fileplugin.TransferToClient();
1369 iLineNumber = __LINE__;
1371 User::Leave(err); //trapped in DoRequestL
1374 User::Leave(KErrCompletion);
1380 void CModifierPlugin::FsReadFileSectionL(TFsPluginRequest& aRequest)
1382 TInt err = KErrNone;
1387 TBuf<256> testfilename1;
1389 //setting up test files
1390 testfilename1.Append(iDriveToTest);
1391 testfilename1.Append(_L(":\\Data\\test.txt"));
1393 filename = aRequest.Src().FullName();
1395 err = aRequest.Read(TFsPluginRequest::ELength, length);
1397 iLineNumber = __LINE__;
1399 User::Leave(err); //trapped in DoRequestL
1401 err = aRequest.Read(TFsPluginRequest::EPosition, pos);
1403 iLineNumber = __LINE__;
1405 User::Leave(err); //trapped in DoRequestL
1407 parse.Set(filename, NULL, NULL);
1408 TPtrC extension(parse.Ext());
1410 _LOG2(_L("CModifierPlugin::FsReadFileSectionL, file: %S"), &filename);
1412 if (aRequest.IsPostOperation())
1414 _LOG(_L("CModifierPlugin::FsReadFileSectionL, post intercept"));
1416 _LOG(_L("CModifierPlugin::FsReadFileSectionL - Exit"));
1420 _LOG(_L("CModifierPlugin::FsReadFileSectionL, pre intercept - enter"));
1422 if (extension.CompareF(_L(".tst")) == 0)
1425 RFilePlugin fileplugin2(aRequest);
1426 //open a second file
1427 err = fileplugin2.Open(testfilename1, EFileWrite);
1428 _LOG3(_L("CModifierPlugin::FsReadFileSectionL - RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1430 iLineNumber = __LINE__;
1432 User::Leave(err); //trapped in DoRequestL
1435 err = fileplugin2.Size(size);
1437 iLineNumber = __LINE__;
1439 User::Leave(err); //trapped in DoRequestL
1441 //close the second file
1442 fileplugin2.Close();
1443 _LOG(_L("CModifierPlugin::FsReadFileSectionL - fileplugin2.Close()"));
1447 RFsPlugin fsplugin(aRequest);
1448 err = fsplugin.Connect();
1450 iLineNumber = __LINE__;
1452 User::Leave(err); //trapped in DoRequestL
1454 err = fsplugin.ReadFileSection(filename, pos, temp, length);
1455 _LOG3(_L("CModifierPlugin::FsReadFileSectionL - RFsPlugin::ReadFilePlugin for %S returned %d"), &testfilename1, err);
1457 iLineNumber = __LINE__;
1459 User::Leave(err); //trapped in DoRequestL
1463 temp_wide.Copy(temp);
1466 _LOG2(_L("CModifierPlugin::FsReadFileSectionL - wanted to read length = %d\n"),length);
1467 _LOG2(_L("CModifierPlugin::FsReadFileSectionL - data read length = %d\n"),temp.Length());
1468 _LOG2(_L("CModifierPlugin::FsReadFileSectionL - data read = %S\n"),&temp_wide);
1472 err = aRequest.Write(TFsPluginRequest::EData, temp);
1473 _LOG3(_L("CModifierPlugin::FsReadFileSectionL - RFilePlugin::Write for %S returned %d"), &testfilename1, err);
1475 iLineNumber = __LINE__;
1477 User::Leave(err); //trapped in DoRequestL
1479 // request processed by plug-in
1480 User::Leave(KErrCompletion);
1482 _LOG(_L("CModifierPlugin::FsReadFileSectionL, pre intercept - exit"));
1487 void CModifierPlugin::FsDeleteL(TFsPluginRequest& aRequest)
1489 TInt err = KErrNone;
1492 TBuf<256> testfilename1;
1494 //setting up test files
1495 testfilename1.Append(iDriveToTest);
1496 testfilename1.Append(_L(":\\Data\\test.txt"));
1498 filename = aRequest.Src().FullName();
1500 if (aRequest.IsPostOperation())
1502 _LOG(_L("CModifierPlugin::FsDeleteL, post intercept"));
1504 RFilePlugin fileplugin2(aRequest);
1505 //open a second file
1506 err = fileplugin2.Open(testfilename1, EFileWrite);
1507 _LOG3(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1509 iLineNumber = __LINE__;
1511 User::Leave(err); //trapped in DoRequestL
1514 err = fileplugin2.Size(size);
1516 iLineNumber = __LINE__;
1518 User::Leave(err); //trapped in DoRequestL
1520 //close the second file
1521 fileplugin2.Close();
1522 _LOG2(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Close to the second file returned %d"), err);
1526 _LOG(_L("CModifierPlugin::FsDeleteL, pre intercept"));
1528 _LOG(_L("CModifierPlugin::FsDeleteL, calling RFsPlugin::Delete"));
1529 RFilePlugin fileplugin2(aRequest);
1530 //open a second file
1531 err = fileplugin2.Open(testfilename1, EFileWrite);
1532 _LOG3(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1534 iLineNumber = __LINE__;
1536 User::Leave(err); //trapped in DoRequestL
1539 err = fileplugin2.Size(size);
1541 iLineNumber = __LINE__;
1543 User::Leave(err); //trapped in DoRequestL
1545 //close the second file
1546 fileplugin2.Close();
1547 _LOG2(_L("CModifierPlugin::FsDeleteL, RFilePlugin::Close to the second file returned %d"), err);
1549 RFsPlugin fsplugin(aRequest);
1550 err = fsplugin.Connect();
1552 iLineNumber = __LINE__;
1554 User::Leave(err); //trapped in DoRequestL
1556 err = fsplugin.Delete(filename);
1557 _LOG2(_L("CModifierPlugin::FsDeleteL, RFsPlugin::Delete returned %d"), err);
1560 iLineNumber = __LINE__;
1562 User::Leave(err); //trapped in DoRequestL
1566 // request processed by plug-in
1567 User::Leave(KErrCompletion);
1572 void CModifierPlugin::FsReplaceL(TFsPluginRequest& aRequest)
1574 TInt err = KErrNone;
1575 TFileName oldfilename;
1576 TFileName newfilename;
1578 oldfilename = aRequest.Src().FullName();
1579 newfilename = aRequest.Dest().FullName();
1581 TBuf<256> testfilename1;
1583 //setting up test files
1584 testfilename1.Append(iDriveToTest);
1585 testfilename1.Append(_L(":\\Data\\test.txt"));
1588 if (aRequest.IsPostOperation())
1590 //STF: Is this code going to get called - the pre-operation completes early?
1592 _LOG(_L("CModifierPlugin::FsReplaceL, post intercept"));
1593 //We should check that the name has changed here.
1594 RFilePlugin file(aRequest);
1595 TInt err = file.AdoptFromClient();
1597 iLineNumber = __LINE__;
1599 User::Leave(err); //trapped in DoRequestL
1601 TInt compare = oldfilename.Compare(newfilename);
1602 if(compare != 0) //is equal
1604 //User::Leave(compare);
1605 //It wont be equal as the name is coming from the request aint it.
1606 //Bit of a pointless comparison in retrospect eh?
1611 RFilePlugin fileplugin2(aRequest);
1612 //open a second file
1613 err = fileplugin2.Open(testfilename1, EFileWrite);
1614 _LOG3(_L("CModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1616 iLineNumber = __LINE__;
1618 User::Leave(err); //trapped in DoRequestL
1621 err =fileplugin2.Size(size);
1623 iLineNumber = __LINE__;
1625 User::Leave(err); //trapped in DoRequestL
1627 //close the second file
1628 fileplugin2.Close();
1629 _LOG2(_L("CModifierPlugin::FsReplaceL, RFilePlugin::Close to the second file returned %d"), err);
1633 _LOG(_L("CModifierPlugin::FsReplaceL, pre intercept"));
1634 RFilePlugin fileplugin2(aRequest);
1635 //open a second file
1636 err = fileplugin2.Open(testfilename1, EFileWrite);
1637 _LOG3(_L("CModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1639 iLineNumber = __LINE__;
1641 User::Leave(err); //trapped in DoRequestL
1644 err =fileplugin2.Size(size);
1646 iLineNumber = __LINE__;
1648 User::Leave(err); //trapped in DoRequestL
1650 //close the second file
1651 fileplugin2.Close();
1652 _LOG2(_L("CModifierPlugin::FsReplaceL, FilePlugin::Close to the second file returned %d"), err);
1654 _LOG(_L("CModifierPlugin::FsReplaceL, calling RFsPlugin::Replace"));
1655 RFsPlugin fsplugin(aRequest);
1656 err = fsplugin.Connect();
1658 iLineNumber = __LINE__;
1660 User::Leave(err); //trapped in DoRequestL
1662 err = fsplugin.Replace(oldfilename, newfilename);
1663 _LOG2(_L("CModifierPlugin::FsReplaceL, RFsPlugin::Replace returned %d"), err);
1665 iLineNumber = __LINE__;
1667 User::Leave(err); //trapped in DoRequestL
1671 // request processed by plug-in
1672 User::Leave(KErrCompletion);
1677 void CModifierPlugin::FsRenameL(TFsPluginRequest& aRequest)
1679 TInt err = KErrNone;
1680 TFileName oldfilename;
1681 TFileName newfilename;
1683 oldfilename = aRequest.Src().FullName();
1684 newfilename = aRequest.Dest().FullName();
1686 TBuf<256> testfilename1;
1688 //setting up test files
1689 testfilename1.Append(iDriveToTest);
1690 testfilename1.Append(_L(":\\Data\\test.txt"));
1692 if (aRequest.IsPostOperation())
1694 _LOG(_L("CModifierPlugin::FsRenameL, post intercept"));
1695 RFilePlugin fileplugin2(aRequest);
1696 //open a second file
1697 err = fileplugin2.Open(testfilename1, EFileWrite);
1698 _LOG3(_L("RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1700 iLineNumber = __LINE__;
1702 User::Leave(err); //trapped in DoRequestL
1705 err = fileplugin2.Size(size);
1707 iLineNumber = __LINE__;
1709 User::Leave(err); //trapped in DoRequestL
1711 //close the second file
1712 fileplugin2.Close();
1713 _LOG2(_L("CModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err);
1717 _LOG(_L("CModifierPlugin::FsRenameL, pre intercept"));
1718 RFilePlugin fileplugin2(aRequest);
1719 //open a second file
1720 fileplugin2.Open(testfilename1, EFileWrite);
1721 _LOG3(_L("CModifierPlugin::FsRenameL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1723 iLineNumber = __LINE__;
1725 User::Leave(err); //trapped in DoRequestL
1728 err = fileplugin2.Size(size);
1730 iLineNumber = __LINE__;
1732 User::Leave(err); //trapped in DoRequestL
1734 //close the second file
1735 fileplugin2.Close();
1736 _LOG2(_L("CModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err);
1738 _LOG(_L("CModifierPlugin::FsRenameL, calling RFsPlugin::Rename"));
1739 RFsPlugin fsplugin(aRequest);
1740 err = fsplugin.Connect();
1742 iLineNumber = __LINE__;
1744 User::Leave(err); //trapped in DoRequestL
1746 err = fsplugin.Rename(oldfilename, newfilename);
1747 _LOG2(_L("CModifierPlugin::FsRenameL, RFsPlugin::Rename returned %d"), err);
1749 iLineNumber = __LINE__;
1751 User::Leave(err); //trapped in DoRequestL
1754 // request processed by plug-in
1755 User::Leave(KErrCompletion);
1759 void CModifierPlugin::FsEntryL(TFsPluginRequest& aRequest)
1761 TInt err = KErrNone;
1764 filename = aRequest.Src().FullName();
1766 TBuf<256> testfilename1;
1768 //setting up test files
1769 testfilename1.Append(iDriveToTest);
1770 testfilename1.Append(_L(":\\Data\\test.txt"));
1774 if (aRequest.IsPostOperation())
1776 _LOG(_L("CModifierPlugin::FsEntryL, post intercept"));
1777 RFilePlugin fileplugin2(aRequest);
1778 //open a second file
1779 err = fileplugin2.Open(testfilename1, EFileWrite);
1780 _LOG3(_L("CModifierPlugin::FsEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1782 iLineNumber = __LINE__;
1784 User::Leave(err); //trapped in DoRequestL
1787 err = fileplugin2.Size(size);
1789 iLineNumber = __LINE__;
1791 User::Leave(err); //trapped in DoRequestL
1793 //close the second file
1794 fileplugin2.Close();
1795 _LOG2(_L("CModifierPlugin::FsEntryL, RFilePlugin::Close to the second file returned %d"), err);
1799 _LOG(_L("CModifierPlugin::FsEntryL, pre intercept"));
1800 RFilePlugin fileplugin2(aRequest);
1801 //open a second file
1802 err = fileplugin2.Open(testfilename1, EFileWrite);
1803 _LOG3(_L("CModifierPlugin::FsEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1805 iLineNumber = __LINE__;
1807 User::Leave(err); //trapped in DoRequestL
1810 err = fileplugin2.Size(size);
1812 iLineNumber = __LINE__;
1814 User::Leave(err); //trapped in DoRequestL
1816 //close the second file
1817 fileplugin2.Close();
1818 _LOG2(_L("CModifierPlugin::FsEntryL, RFilePlugin::Close to the second file returned %d"), err);
1820 _LOG(_L("CModifierPlugin::FsEntryL, calling RFsPlugin::Entry"));
1821 RFsPlugin fsplugin(aRequest);
1822 err = fsplugin.Connect();
1824 iLineNumber = __LINE__;
1826 User::Leave(err); //trapped in DoRequestL
1829 err = fsplugin.Entry(filename, entry);
1830 _LOG2(_L("CModifierPlugin::FsEntryL, RFsPlugin::Entry returned %d"), err);
1832 iLineNumber = __LINE__;
1834 User::Leave(err); //trapped in DoRequestL
1838 TPckgC<TEntry> data(entry);
1839 err = aRequest.Write(TFsPluginRequest::EEntry, data);
1841 iLineNumber = __LINE__;
1843 User::Leave(err); //trapped in DoRequestL
1845 // request processed by plug-in
1846 User::Leave(KErrCompletion);
1851 void CModifierPlugin::FsSetEntryL(TFsPluginRequest& aRequest)
1853 TInt err = KErrNone;
1856 TBuf<256> testfilename1;
1858 //setting up test files
1859 testfilename1.Append(iDriveToTest);
1860 testfilename1.Append(_L(":\\Data\\test.txt"));
1862 if (aRequest.IsPostOperation())
1864 _LOG(_L("CModifierPlugin::FsSetEntryL, post intercept"));
1865 RFilePlugin fileplugin2(aRequest);
1866 //open a second file
1867 err = fileplugin2.Open(testfilename1, EFileWrite);
1868 _LOG3(_L("CModifierPlugin::FsSetEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1870 iLineNumber = __LINE__;
1872 User::Leave(err); //trapped in DoRequestL
1875 err = fileplugin2.Size(size);
1877 iLineNumber = __LINE__;
1879 User::Leave(err); //trapped in DoRequestL
1881 //close the second file
1882 fileplugin2.Close();
1883 _LOG2(_L("CModifierPlugin::FsSetEntryL, RFilePlugin::Close to the second file returned %d"), err);
1887 _LOG(_L("CModifierPlugin::FsSetEntryL, pre intercept"));
1888 RFilePlugin fileplugin2(aRequest);
1889 //open a second file
1890 err = fileplugin2.Open(testfilename1, EFileWrite);
1891 _LOG3(_L("CModifierPlugin::FsSetEntryL, RFilePlugin::Open for %S returned %d"), &testfilename1, err);
1893 iLineNumber = __LINE__;
1895 User::Leave(err); //trapped in DoRequestL
1898 err = fileplugin2.Size(size);
1900 iLineNumber = __LINE__;
1902 User::Leave(err); //trapped in DoRequestL
1904 //close the second file
1905 fileplugin2.Close();
1906 _LOG2(_L("CModifierPlugin::FsSetEntryL, FilePlugin::Close to the second file returned %d"), err);
1909 TPtr8 t((TUint8*)&time,sizeof(TTime));
1910 err = aRequest.Read(TFsPluginRequest::ETime, t);
1912 iLineNumber = __LINE__;
1914 User::Leave(err); //trapped in DoRequestL
1916 filename = aRequest.Src().FullName();
1918 TInt setMode, clearMode;
1919 err = aRequest.Read(TFsPluginRequest::ESetAtt, setMode);
1921 iLineNumber = __LINE__;
1923 User::Leave(err); //trapped in DoRequestL
1925 err = aRequest.Read(TFsPluginRequest::EClearAtt, clearMode);
1927 iLineNumber = __LINE__;
1929 User::Leave(err); //trapped in DoRequestL
1931 RFsPlugin fsplugin(aRequest);
1932 err = fsplugin.Connect();
1934 iLineNumber = __LINE__;
1936 User::Leave(err); //trapped in DoRequestL
1938 err = fsplugin.SetEntry(filename, time, setMode, clearMode);
1939 _LOG2(_L("CModifierPlugin::FsSetEntryL, RFsPlugin::SetEntry returned %d"), err);
1941 iLineNumber = __LINE__;
1943 User::Leave(err); //trapped in DoRequestL
1946 // request processed by plug-in
1947 User::Leave(KErrCompletion);
1954 void CModifierPlugin::FsVolumeL(TFsPluginRequest& aRequest)
1956 if (aRequest.IsPostOperation())
1958 _LOG(_L("CModifierPlugin::FsVolumeL, post intercept"));
1962 _LOG(_L("CModifierPlugin::FsVolumeL, pre intercept"));
1963 RFsPlugin fsplugin(aRequest);
1964 CleanupClosePushL(fsplugin);
1966 TInt err = fsplugin.Connect();
1968 iLineNumber = __LINE__;
1970 User::Leave(err); // Trapped in DoRequestL
1972 TVolumeInfo volInfo;
1973 TInt drive = (TInt)(iDriveToTest - (TChar)'A');
1974 err = fsplugin.Volume(volInfo,drive);
1975 _LOG3(_L("CModifierPlugin::FsVolumeL, RFsPlugin::Volume(drive %d) returned %d"), drive, err);
1977 iLineNumber = __LINE__;
1979 User::Leave(err); // Trapped in DoRequestL
1981 // Check that the volume label is the same as what was set in t_plugin_v2
1982 _LIT(KVolumeLabel,"1Volume");
1983 err = volInfo.iName.Compare(KVolumeLabel);
1984 _LOG2(_L("CModifierPlugin::FsVolumeL, Compare volume label returned %d"), err);
1986 iLineNumber = __LINE__;
1988 User::Leave(err); // Trapped in DoRequestL
1990 // Modify volume name
1991 _LOG2(_L("CModifierPlugin::FsVolumeL, Old volume name = %S"), &volInfo.iName);
1992 TBuf<7> newVolumeName = volInfo.iName;
1993 newVolumeName[0] = '2';
1994 volInfo.iName = newVolumeName;
1995 _LOG2(_L("CModifierPlugin::FsVolumeL, New volume name = %S"), &volInfo.iName);
1997 // Send back volume info
1998 TPckgC<TVolumeInfo> volInfoPckg(volInfo);
1999 err = aRequest.Write(TFsPluginRequest::EVolumeInfo, volInfoPckg);
2001 iLineNumber = __LINE__;
2003 User::Leave(err); // Trapped in DoRequestL
2005 CleanupStack::PopAndDestroy();
2007 // Request processed by plug-in
2008 User::Leave(KErrCompletion);
2016 void CModifierPlugin::FsFileSubCloseL(TFsPluginRequest& aRequest)
2018 if (aRequest.IsPostOperation())
2020 _LOG(_L("CModifierPlugin::FsFileSubCloseL, post intercept"));
2024 _LOG(_L("CModifierPlugin::FsFileSubCloseL, pre intercept"));
2031 void CModifierPlugin::FsDirOpenL(TFsPluginRequest& aRequest)
2034 TBuf<256> testfilename1;
2037 TInt err = aRequest.FileName(testtemp);
2039 iLineNumber = __LINE__;
2041 User::Leave(err); //trapped in DoRequestL
2043 //setting up test files
2044 testfilename1.Append(iDriveToTest);
2045 testfilename1.Append(_L(":\\Data2\\"));
2047 if (aRequest.IsPostOperation())
2049 _LOG(_L("CModifierPlugin::FsDirOpenL, post intercept"));
2053 _LOG(_L("CModifierPlugin::FsDirOpenL, pre intercept"));
2055 _LOG(_L("CModifierPlugin::FsDirOpenL, calling RDirPlugin::Open"));
2057 TPckgBuf<TUidType> uidPckg;
2058 err = aRequest.Read(TFsPluginRequest::EUid, uidPckg);
2060 iLineNumber = __LINE__;
2062 User::Leave(err); //trapped in DoRequestL
2064 TUidType uidType = uidPckg();
2066 filename = iDirFullName;
2068 RDirPlugin dirplugin(aRequest);
2069 err = dirplugin.Open(filename, uidType);
2070 _LOG2(_L("CModifierPlugin::FsDirOpenL, RDirPlugin::Open returned %d"), err);
2072 iLineNumber = __LINE__;
2074 User::Leave(err); //trapped in DoRequestL
2077 err = dirplugin.Open(testfilename1, uidType);
2078 _LOG2(_L("CModifierPlugin::FsDirOpenL, RDirPlugin::Open returned %d"), err);
2080 iLineNumber = __LINE__;
2082 User::Leave(err); //trapped in DoRequestL
2088 void CModifierPlugin::FsDirReadOneL(TFsPluginRequest& aRequest)
2091 TInt err = aRequest.FileName(filename);
2093 iLineNumber = __LINE__;
2095 User::Leave(err); //trapped in DoRequestL
2097 TBuf<256> drivename;
2099 //setting up test files
2100 drivename.Append(iDriveToTest);
2101 drivename.Append(_L(":\\"));
2103 //filename = iDirFullName; //STF: Can this be policed by checking EParseSrc flag?
2105 if (aRequest.IsPostOperation())
2107 _LOG(_L("CModifierPlugin::FsDirReadL, post intercept"));
2111 _LOG(_L("CModifierPlugin::FsDirReadL, pre intercept"));
2113 TInt x = filename.CompareF(drivename);
2116 RDirPlugin dir(aRequest);
2117 err = dir.Open(filename, KEntryAttMatchMask);
2119 iLineNumber = __LINE__;
2121 User::Leave(err); //trapped in DoRequestL
2124 err = dir.Read(entry);
2126 iLineNumber = __LINE__;
2128 User::Leave(err); //trapped in DoRequestL
2130 _LOG2(_L("CModifierPlugin::FsDirReadL, Read returned %S (first entry)"), &entry.iName);
2132 TPckgC<TEntry> data(entry);
2133 err = aRequest.Write(TFsPluginRequest::EEntry, data);
2135 iLineNumber = __LINE__;
2137 User::Leave(err); //trapped in DoRequestL
2140 User::Leave(KErrCompletion);
2149 void CModifierPlugin::FsDirReadPackedL(TFsPluginRequest& aRequest)
2152 TInt err = aRequest.FileName(filename);
2154 iLineNumber = __LINE__;
2156 User::Leave(err); //trapped in DoRequestL
2159 parse.Set(filename, NULL, NULL);
2160 //TPtrC extension(parse.Ext());
2161 TBuf<256> drivename;
2163 //setting up test files
2164 drivename.Append(iDriveToTest);
2165 drivename.Append(_L(":\\"));
2167 //filename = iDirFullName;
2169 if (aRequest.IsPostOperation())
2171 _LOG(_L("CModifierPlugin::FsDirReadPackedL, post intercept"));
2175 _LOG(_L("CModifierPlugin::FsDirReadPackedL, pre intercept"));
2177 TInt x = filename.CompareF(drivename);
2180 RDirPlugin dir(aRequest);
2181 err = dir.Open(filename, KEntryAttMatchMask);
2183 iLineNumber = __LINE__;
2185 User::Leave(err); //trapped in DoRequestL
2187 TRawEntryArray aArray;
2188 err = dir.Read(aArray);
2190 iLineNumber = __LINE__;
2191 if(err!=KErrNone && err!=KErrEof)
2192 User::Leave(err); //trapped in DoRequestL
2194 TEntry entry = aArray[0];
2195 _LOG2(_L("CModifierPlugin::FsDirReadPackedL, Read returned %S (first entry)"), &entry.iName);
2199 err = aRequest.Write(TFsPluginRequest::EEntryArray,aArray.Buf()); // Careful not to overwrite the KErrEof
2201 iLineNumber = __LINE__;
2203 User::Leave(err); //trapped in DoRequestL
2205 User::Leave(KErrEof); //This is effectively a completion code for FSDirReadPacked
2210 CFsPluginConn* CModifierPlugin::NewPluginConnL()
2212 return new(ELeave) CModifierPluginConn();
2216 //Synchronous RPlugin::DoControl
2217 TInt CModifierPlugin::FsPluginDoControlL(CFsPluginConnRequest& aRequest)
2219 TInt err = KErrNone;
2221 //We can use this to set the drive
2222 //We can store this as a member of this class.
2224 TPckg<TInt> errCodeDes(iLastError);
2225 TPckg<TInt> lineNumberDes(iLineNumber);
2226 TPckg<TChar> drive(iDriveToTest);
2227 TPckg<TBool> interceptStatusDes(iInterceptsEnabled);
2228 typedef TBuf<256> TDirName;
2229 TPckg<TDirName> dirnamePckg(iDirFullName);
2231 TInt function = aRequest.Function();
2234 case KPluginSetDrive:
2236 TRAP(err,aRequest.ReadParam1L(drive));
2239 case KPluginGetError:
2241 TRAP(err,aRequest.WriteParam1L(errCodeDes));
2242 TRAP(err,aRequest.WriteParam2L(lineNumberDes));
2245 case KPluginToggleIntercepts:
2247 iInterceptsEnabled ^= 1; //toggle intercepts;
2248 TRAP(err,aRequest.WriteParam1L(interceptStatusDes));
2251 case KPluginSetDirFullName:
2253 //This is necessary as at present we have no way of getting the name of
2255 TRAP(err,aRequest.ReadParam1L(dirnamePckg));
2265 TInt CModifierPluginConn::DoControl(CFsPluginConnRequest& aRequest)
2267 return ((CModifierPlugin*)Plugin())->FsPluginDoControlL(aRequest);
2270 void CModifierPluginConn::DoRequest(CFsPluginConnRequest& aRequest)
2272 TInt r = DoControl(aRequest);
2273 aRequest.Complete(r);
2276 void CModifierPluginConn::DoCancel(TInt /*aReqMask*/)
2282 class CModifierPluginFactory : public CFsPluginFactory
2285 CModifierPluginFactory();
2286 virtual TInt Install();
2287 virtual CFsPlugin* NewPluginL();
2288 virtual CFsPlugin* NewPluginConnL();
2289 virtual TInt UniquePosition();
2293 Constructor for the plugin factory
2296 CModifierPluginFactory::CModifierPluginFactory()
2301 Install function for the plugin factory
2304 TInt CModifierPluginFactory::Install()
2306 SetSupportedDrives(KPluginSupportAllDrives);
2307 //iSupportedDrives = 1<<23;
2308 return(SetName(&KModifierPluginName));
2314 TInt CModifierPluginFactory::UniquePosition()
2316 return(KModifierPos);
2320 Plugin factory function
2323 CFsPlugin* CModifierPluginFactory::NewPluginL()
2326 return CModifierPlugin::NewL();
2330 Plugin factory function
2333 CFsPlugin* CModifierPluginFactory::NewPluginConnL()
2336 return CModifierPlugin::NewL();
2345 EXPORT_C CFsPluginFactory* CreateFileSystem()
2347 return(new CModifierPluginFactory());