--- a/kernel/eka/drivers/locmedia/locmedia.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/kernel/eka/drivers/locmedia/locmedia.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -553,6 +553,26 @@
#endif
/*
+Acquires ownership of the (already opened) client thread object stored in TheCurrentThread::iExtTempObj
+by retrieving and then clearing iExtTempObj
+
+On exit TheCurrentThread::iExtTempObj should be NULL
+
+@see EControlSetMountInfo
+*/
+DThread* AcquireRemoteThread()
+ {
+ NKern::ThreadEnterCS();
+
+ DThread& t = Kern::CurrentThread();
+ DThread* remoteThread = (DThread*)__e32_atomic_swp_ord_ptr(&t.iExtTempObj, 0);
+
+ NKern::ThreadLeaveCS();
+
+ return remoteThread;
+ }
+
+/*
* Requests are passed in message as follows:
* iValue = request ID
* iArg[0,1]= Position
@@ -744,6 +764,11 @@
if(!pM || r!=KErrNone)
break;
+#ifdef __DEMAND_PAGING__
+ // Clear existing mount info
+ UnlockMountInfo(*pM);
+#endif
+
if (pM->iMountInfo.iThread)
{
NKern::ThreadEnterCS();
@@ -758,17 +783,11 @@
break;
#endif
pM->iMountInfo.iInfo=(TDesC8*)m.RemoteDes();
- pM->iMountInfo.iThread=m.RemoteThread();
+ pM->iMountInfo.iThread = AcquireRemoteThread();
}
else
{
- //Clear existing mount info and close setting thread
-
-#ifdef __DEMAND_PAGING__
- // unlock the mount info if this is a data paging media
- UnlockMountInfo(*pM);
-#endif
-
+ // Close setting thread
pM->iMountInfo.iInfo=NULL;
pM->iMountInfo.iThread=NULL;
m.CloseRemoteThread();
@@ -794,7 +813,8 @@
#endif
pM->iMountInfo.iInfo=(TDesC8*)m.RemoteDes();
- pM->iMountInfo.iThread=m.RemoteThread();
+ pM->iMountInfo.iThread = AcquireRemoteThread();
+
NKern::ThreadLeaveCS();
r=KErrNone;
}
--- a/kerneltest/f32test/group/bld.inf Tue Oct 26 12:49:20 2010 +0100
+++ b/kerneltest/f32test/group/bld.inf Mon Nov 01 20:11:36 2010 +0000
@@ -99,6 +99,7 @@
t_misc
t_nmbs
t_notify
+t_tfsys_notify support
t_dspace
t_open
t_parse
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/group/t_tfsys_notify.mmp Mon Nov 01 20:11:36 2010 +0000
@@ -0,0 +1,40 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// f32test/group/t_tfsys.mmp
+//
+//
+
+TARGET t_tfsys_notify.fsy
+TARGETTYPE fsy
+
+SOURCEPATH ../testfsys
+SOURCE t_tfsys_notify.cpp
+
+USERINCLUDE ../../../userlibandfileserver/fileserver/inc // assumes f32test and f32 components in same directory
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib efile.lib
+
+
+START WINS
+BASEADDRESS 0x61000000
+END
+
+
+UID 0x100039df 0x10000CEE
+VENDORID 0x70000001
+
+#include "../../../userlibandfileserver/fileserver/group/f32caps.mmh" // Capabilities of File Server process
+
+SMPSAFE
--- a/kerneltest/f32test/server/t_notifier.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/kerneltest/f32test/server/t_notifier.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -23,6 +23,7 @@
#include "t_server.h"
#include "t_chlffs.h"
#include "t_notify_plugin.h"
+#include "f32_test_utils.h"
const TInt KNotificationHeaderSize = (sizeof(TUint16)*2)+(sizeof(TUint));
const TInt KMinNotificationBufferSize = 2*KNotificationHeaderSize + 2*KMaxFileName;
@@ -31,6 +32,9 @@
RTest test(_L("T_NOTIFIER"));
const TInt KMaxHeapSize = 0x800000;
TInt globalDriveNum;
+TBuf<50> filesystem; //storing original file system name
+_LIT(KTestNotifyFileSystemExeName,"t_tfsys_notify.fsy");
+_LIT(KNotifyTestFileSystem,"CNotifyTestFileSystem");
void DismountPlugin()
{
@@ -38,6 +42,24 @@
TheFs.RemovePlugin(KNotifyPluginFileName);
}
+void RemountOriginalFileSystem()
+ {
+ //Replace old FS.
+ TheFs.DismountFileSystem(KNotifyTestFileSystem,globalDriveNum);
+ TheFs.MountFileSystem(filesystem,globalDriveNum);
+ TheFs.RemoveFileSystem(KNotifyTestFileSystem);
+ }
+
+inline void safe_external_test(RTest& aTest, TInt aError, TInt aLine, TText* aName)
+ {
+ if(aError!=KErrNone)
+ {
+ test.Printf(_L(": ERROR : %d received on line %d\n"),aError,aLine);
+ RemountOriginalFileSystem();
+ aTest.operator()(aError==KErrNone,aLine,(TText*)aName);
+ }
+ }
+
inline void safe_test(RTest& aTest, TInt aError, TInt aLine, TText* aName)
{
if(aError!=KErrNone)
@@ -519,7 +541,7 @@
if(_path.Match(fullname)!=KErrNone)
safe_test(simpleTestWatcher,KErrBadName,__LINE__,(TText*)Expand("t_notifier.cpp"));
- /*
+
TInt driveNumber = 0;
TInt gDriveNum = -1;
notification->DriveNumber(driveNumber);
@@ -528,11 +550,11 @@
safe_test(simpleTestWatcher,KErrBadHandle,__LINE__,(TText*)Expand("t_notifier.cpp"));
TUid uid;
- TUint32 realUID = 0x76543210;
+ TInt32 realUID = 0x76543210;
r = notification->UID(uid);
safe_test(simpleTestWatcher,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
- safe_test(simpleTestWatcher,(realUID == uid.iUid)==1,__LINE__,(TText*)Expand("t_notifier.cpp"));
- */
+ safe_test(simpleTestWatcher,((realUID == uid.iUid)?KErrNone:KErrNotFound),__LINE__,(TText*)Expand("t_notifier.cpp"));
+
delete notify;
fs.Close();
simpleTestWatcher.End();
@@ -3621,6 +3643,138 @@
return KErrNone;
}
+_LIT(KPhantomExtendedReplace,"?:\\PhantomExtended_Replaced.txt");
+_LIT(KPhantomExtendedRenamed,"?:\\PhantomExtended_Renamed.txt");
+_LIT(KPhantomExtendedRenameMe,"?:\\PhantomExtended_RenameMe.txt");
+
+TInt DoTestExternalNotificationL()
+ {
+ TRequestStatus statusN, statusT;
+ RTimer timer1;
+ TTimeIntervalMicroSeconds32 time = 10000000;
+
+ test.Printf(_L("DoTestExternalNotification"));
+ CFsNotify* notify = CFsNotify::NewL(TheFs,1024);
+ TInt r = notify->AddNotification(TFsNotification::ECreate, _L("?:\\"),_L("PhantomExtended_Replaced.txt"));
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = notify->RequestNotifications(statusN);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ RFile file;
+ r = file.Replace(TheFs,_L("\\Extended_Replaced.txt"),EFileWrite);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ file.Close();
+
+ r = timer1.CreateLocal();
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ timer1.After(statusT,time);
+ User::WaitForRequest(statusN,statusT);
+ test_Compare(statusN.Int(),!=,KRequestPending)
+ timer1.Cancel();
+ timer1.Close();
+ User::WaitForRequest(statusT);
+
+ const TFsNotification* notification = notify->NextNotification();
+ if(!notification)
+ safe_external_test(test,KErrUnderflow,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ //Check Path
+ TPtrC path;
+ r = notification->Path(path);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ if(path.Match(KPhantomExtendedReplace)==KErrNotFound)
+ {
+ safe_external_test(test,KErrNotFound,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ }
+
+ //Check NewName
+ TPtrC newName;
+ r = notification->NewName(newName);
+ safe_external_test(test,(r==KErrNotSupported) ? KErrNone : r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ notify->CancelNotifications(statusN);
+ delete notify;
+
+ //*************************************************************
+ // Rename:
+ //*************************************************************
+
+ notify = CFsNotify::NewL(TheFs,1024);
+ r = notify->AddNotification(TFsNotification::ERename, _L("?:\\"),_L("PhantomExtended_Renamed.txt"));
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = notify->RequestNotifications(statusN);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ r = file.Replace(TheFs,_L("\\Extended_RenameMe.txt"),EFileWrite);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ file.Close();
+
+ r = timer1.CreateLocal();
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ timer1.After(statusT,time);
+ User::WaitForRequest(statusN,statusT);
+ test_Compare(statusN.Int(),!=,KRequestPending)
+ timer1.Cancel();
+ timer1.Close();
+ User::WaitForRequest(statusT);
+
+ notification = notify->NextNotification();
+ if(!notification)
+ safe_external_test(test,KErrUnderflow,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ r = notification->Path(path);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ if(path.Match(KPhantomExtendedRenameMe)==KErrNotFound)
+ {
+ safe_external_test(test,KErrNotFound,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ }
+
+ //Check NewName
+ r = notification->NewName(newName);
+ if(newName.Match(KPhantomExtendedRenamed)==KErrNotFound)
+ {
+ safe_external_test(test,KErrNotFound,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ }
+
+ notify->CancelNotifications(statusN);
+ delete notify;
+
+ return KErrNone;
+ }
+
+void TestExternalNotifications()
+ {
+ test.Printf(_L("Test External Notifications (Load test file system)"));
+
+ if(F32_Test_Utils::Is_SimulatedSystemDrive(TheFs,globalDriveNum))
+ {
+ test.Printf(_L("Not testing External Notifications on SimulatedSystemDrive"));
+ return;
+ }
+
+ TInt r = TheFs.FileSystemName(filesystem,globalDriveNum);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = TheFs.DismountFileSystem(filesystem,globalDriveNum);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = TheFs.AddFileSystem(KTestNotifyFileSystemExeName);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = TheFs.MountFileSystem(KNotifyTestFileSystem,globalDriveNum);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ TRAP(r,DoTestExternalNotificationL());
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+
+ //Replace old FS.
+ r = TheFs.DismountFileSystem(KNotifyTestFileSystem,globalDriveNum);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = TheFs.MountFileSystem(filesystem,globalDriveNum);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ r = TheFs.RemoveFileSystem(KNotifyTestFileSystem);
+ safe_external_test(test,r,__LINE__,(TText*)Expand("t_notifier.cpp"));
+ }
+
/*
* This test is testing the use cases
* and for negative testing of SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
@@ -4515,6 +4669,10 @@
test_KErrNone(r);
test.Printf(_L("------- End of Data-Caging Tests -------------------------------------\n"));
+ PrintLine();
+ test.Next(_L("Test TestExternalNotifications()"));
+ TestExternalNotifications();
+ test.Printf(_L("------- End of TestExternalNotifications Tests -------------------------------------\n"));
test.End();
test.Close();
--- a/kerneltest/f32test/server/t_notify.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/kerneltest/f32test/server/t_notify.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -31,6 +31,8 @@
const TInt KNotifyChangeAfter=100000;
const TInt KMediaRemountForceMediaChange = 0x00000001;
+TInt gDriveNum = -1;
+
RTest test(_L("T_NOTIFY"));
RSemaphore gSleepThread;
TInt gSocketNumber=0;
@@ -4233,7 +4235,212 @@
}
-
+_LIT(KTestNotifyFileSystemExeName,"t_tfsys_notify.fsy");
+_LIT(KNotifyTestFileSystem,"CNotifyTestFileSystem");
+
+TInt TestExternalNotificationsWellformedness()
+ {
+ //Do Something to cause a notification:
+
+ //********************************************
+ //
+ // Opening(Replacing) \\Wellformed_functionWrite,
+ // will issue a create notification on file \PhantomFile_functionWrite.txt
+ TRequestStatus status1, status2;
+ TheFs.NotifyChange(ENotifyFile,status1,_L("\\PhantomFile_functionReplace.txt"));
+ RFile file;
+ TInt r = file.Replace(TheFs,_L("\\Wellformed_functionReplace.txt"),EFileWrite);
+ test_KErrNone(r);
+
+
+ RTimer timer1;
+ r = timer1.CreateLocal();
+ test_KErrNone(r);
+ TTimeIntervalMicroSeconds32 time = 10000000;
+ timer1.After(status2,time);
+ User::WaitForRequest(status1,status2);
+ test_Compare(status1.Int(),!=,KRequestPending)
+ timer1.Cancel();
+ timer1.Close();
+ User::WaitForRequest(status2);
+
+ //********************************************
+ //
+ // Rename \Wellformed_functionWrite.txt --> \Wellformed_functionRename.txt,
+ // will issue a rename notification on \PhantomFile_functionWrite.txt --> \PhantomFile_functionRename.txt
+ TheFs.NotifyChange(ENotifyEntry,status1,_L("\\PhantomFile_functionRename.txt"));
+ r = file.Rename(_L("\\Wellformed_functionWrite.txt"));
+ test_KErrNone(r);
+
+ r = timer1.CreateLocal();
+ test_KErrNone(r);
+ timer1.After(status2,time);
+ User::WaitForRequest(status1,status2);
+ test_Compare(status1.Int(),!=,KRequestPending);
+ timer1.Cancel();
+ timer1.Close();
+ User::WaitForRequest(status2);
+ file.Close();
+
+ //********************************************
+ //
+ // SetAttributes
+ //
+ TheFs.NotifyChange(ENotifyAttributes,status1,_L("\\PhantomFile_functionAttributes.txt"));
+ r = file.Open(TheFs,_L("\\Wellformed_functionAttributes.txt"),EFileWrite);
+ test_KErrNone(r);
+ r = file.SetAtt(KEntryAttHidden,KEntryAttSystem);
+ test_KErrNone(r);
+
+ {
+ r = timer1.CreateLocal();
+ test_KErrNone(r);
+ timer1.After(status2,time);
+ User::WaitForRequest(status1,status2);
+ test_Compare(status1.Int(),!=,KRequestPending);
+ timer1.Cancel();
+ timer1.Close();
+ User::WaitForRequest(status2);
+ }
+ file.Close();
+
+ //********************************************
+ //
+ // File Write
+ // \\Wellformed_functionWrite.txt -> \\PhantomFile_functionWrite.txt
+ //
+ TheFs.NotifyChange(ENotifyWrite,status1,_L("\\PhantomFile_functionWrite.txt"));
+ r = file.Replace(TheFs,_L("\\Wellformed_functionWrite.txt"),EFileWrite);
+ test_KErrNone(r);
+ TBuf8<4> blah;
+ blah.Append(_L("Blah"));
+ r = file.Write(blah);
+ test_KErrNone(r);
+ {
+ r = timer1.CreateLocal();
+ test_KErrNone(r);
+ timer1.After(status2,time);
+ User::WaitForRequest(status1,status2);
+ test_Compare(status1.Int(),!=,KRequestPending);
+ timer1.Cancel();
+ timer1.Close();
+ User::WaitForRequest(status2);
+ }
+
+ file.Close();
+ return KErrNone;
+ }
+
+TInt TestExternalNotificationsMalformed()
+ {
+
+ TRequestStatus status1, status2;
+ RTimer timer1;
+ TInt r = timer1.CreateLocal();
+ test_KErrNone(r);
+ TTimeIntervalMicroSeconds32 time = 5000000;
+
+ //********************************************
+ //
+ // Don't set file size
+ //
+ TheFs.NotifyChange(ENotifyWrite,status1,_L("\\PhantomFileMalformed_functionWrite.txt"));
+ RFile file;
+ r = file.Open(TheFs,_L("\\Malformed_functionWrite.txt"),EFileWrite);
+ test_KErrNone(r);
+ r = file.Write(_L8("abcd"));
+ test_Value(KErrArgument,r);
+ {
+ r = timer1.CreateLocal();
+ test_KErrNone(r);
+ timer1.After(status2,time);
+ test.Printf(_L("Wait for timeout.."));
+ User::WaitForRequest(status1,status2);
+ test_Compare(status1.Int(),==,KRequestPending);
+ timer1.Cancel();
+ timer1.Close();
+ TheFs.NotifyChangeCancel(status1);
+ User::WaitForRequest(status1);
+ }
+
+ //********************************************
+ //
+ // Set new name incorrectly
+ //
+ TheFs.NotifyChange(ENotifyFile,status1,_L("\\PhantomFileMalformed_functionRename.txt"));
+ r = file.Rename(_L("\\Malformed_functionRename.txt"));
+ test_Value(KErrArgument,r);
+ {
+ r = timer1.CreateLocal();
+ test_KErrNone(r);
+ timer1.After(status2,time);
+ test.Printf(_L("Wait for timeout.."));
+ User::WaitForRequest(status1,status2);
+ test_Compare(status1.Int(),==,KRequestPending)
+ timer1.Cancel();
+ timer1.Close();
+ TheFs.NotifyChangeCancel(status1);
+ User::WaitForRequest(status1);
+ }
+
+
+ file.Close();
+ return KErrNone;
+ }
+
+void TestExternalNotifications()
+ {
+ test.Printf(_L("Test External Notifications (Load test file system)"));
+
+ if(F32_Test_Utils::Is_SimulatedSystemDrive(TheFs,gDriveNum))
+ {
+ test.Printf(_L("Not testing External Notifications on SimulatedSystemDrive"));
+ return;
+ }
+
+ test.Printf(_L("Test External Notifications (get file system name)"));
+ TBuf<50> filesystem;
+ TInt r = TheFs.FileSystemName(filesystem,gDriveNum);
+ test_KErrNone(r);
+ test.Printf(_L("Test External Notifications (add new file system)"));
+ r = TheFs.AddFileSystem(KTestNotifyFileSystemExeName);
+ if(r != KErrNone && r!=KErrAlreadyExists)
+ {
+ test_KErrNone(r);
+ }
+ test.Printf(_L("Test External Notifications (dismount existing file system)"));
+ r = TheFs.DismountFileSystem(filesystem,gDriveNum);
+ test_KErrNone(r);
+ test.Printf(_L("Test External Notifications (mount new file system)"));
+ r = TheFs.MountFileSystem(KNotifyTestFileSystem,gDriveNum);
+ test_KErrNone(r);
+
+ CHECK_NO_PENDING_REQUESTS;
+
+ test.Printf(_L("Test External Notifications (Perform tests)"));
+ r = TestExternalNotificationsWellformedness();
+ test_KErrNone(r);
+
+ CHECK_NO_PENDING_REQUESTS;
+
+// only test this in UREL
+// as in DEBUG it PANICS.
+#if !defined _DEBUG
+ test.Printf(_L("Test External Notifications (Perform malformed tests (UREL only))"));
+ r = TestExternalNotificationsMalformed();
+ test_KErrNone(r);
+ CHECK_NO_PENDING_REQUESTS;
+#endif
+
+ test.Printf(_L("Test External Notifications (Replace FS)"));
+ //Replace old FS.
+ r = TheFs.DismountFileSystem(KNotifyTestFileSystem,gDriveNum);
+ test_KErrNone(r);
+ r = TheFs.MountFileSystem(filesystem,gDriveNum);
+ test_KErrNone(r);
+ r = TheFs.RemoveFileSystem(KNotifyTestFileSystem);
+ test_KErrNone(r);
+ }
//-----------------------------------------------------------------------
@@ -4242,7 +4449,9 @@
//
GLDEF_C void CallTestsL()
{
-
+ TInt nRes=TheFs.CharToDrive(gDriveToTest, gDriveNum);
+ test_KErrNone(nRes);
+
CreateTestDirectory(_L("\\F32-TST\\NOTIFY\\"));
// Test RFs::NotifyChange()
@@ -4358,4 +4567,6 @@
CHECK_NO_PENDING_REQUESTS;
TestRootDirNotifyChange();
CHECK_NO_PENDING_REQUESTS;
+ TestExternalNotifications();
+ CHECK_NO_PENDING_REQUESTS;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/testfsys/t_tfsys_notify.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -0,0 +1,310 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// f32test\testfsys\t_tfsys.cpp
+//
+//
+
+#include "t_tfsys_notify.h"
+
+
+const TInt KMajorVersionNumber=1;
+const TInt KMinorVersionNumber=0;
+
+void CTestNotificationMountCB::FileOpenL(const TDesC& aName,TUint /*aMode*/,TFileOpen /*anOpen*/,CFileCB* /*aFile*/)
+ {
+ RDebug::Print(_L("CTestMountCB::FileOpenL - aName = %S"),&aName);
+
+ if(aName.Match(_L("\\Wellformed_functionReplace.txt"))!= KErrNotFound) //PhantomFile_functionWrite.txt
+ {
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(*this,EFsFileReplace);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomFile_functionReplace.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+ else if(aName.Match(_L("\\Extended_Replaced.txt"))!= KErrNotFound) //\\Extended_Replaced.txt
+ {
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(*this,EFsFileReplace);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomExtended_Replaced.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+ else if(aName.Match(_L("\\Extended_RenameMe.txt"))!= KErrNotFound) //\\PhantomExtended_Renamed.txt
+ {
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(*this,EFsRename);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomExtended_RenameMe.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ TBuf<KMaxFileName> phantomRename;
+ phantomRename.Append(_L("\\"));
+ phantomRename.Append(_L("PhantomExtended_Renamed.txt"));
+ r = notificationInfo->SetNewName(phantomRename);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+
+
+ }
+
+void CTestNotificationFileCB::RenameL(const TDesC& /*aNewName*/)
+ {
+ RDebug::Print(_L("CTestNotificationFileCB::RenameL - aName = %S"),iFileName);
+
+ if(iFileName->Match(_L("\\Wellformed_functionReplace.txt"))!= KErrNotFound) //PhantomFile_functionWrite.txt
+ {
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(Mount(),EFsFileRename);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomFile_functionReplace.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ TBuf<KMaxFileName> phantomNewName;
+ phantomNewName.Append(_L("\\"));
+ phantomNewName.Append(_L("PhantomFile_functionRename.txt"));
+ r = notificationInfo->SetNewName(phantomNewName);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = Mount().IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+
+ //MALFORMED
+ if(iFileName->Match(_L("\\Malformed_functionWrite.txt"))!=KErrNotFound)
+ {
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(Mount(),EFsFileRename);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("Malformed_functionWrite.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ // Don't set NewName - Should cause error.
+ // SetNewName(phantomNewName);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = Mount().IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+ }
+
+void CTestNotificationFileCB::WriteL(TInt /*aPos*/,TInt& /*aLength*/,const TAny* /*aDes*/,const RMessagePtr2& /*aMessage*/)
+ {
+ if(iFileName->Match(_L("\\Wellformed_functionWrite.txt"))!= KErrNotFound) //PhantomFile_functionWrite.txt
+ {
+ RDebug::Printf("CTestNotificationFileCB::WriteL - wellformed_functionWrite.txt");
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(Mount(),EFsFileWrite);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomFile_functionWrite.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetFilesize((TInt64)4);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = Mount().IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+
+ //MALFORMED
+ if(iFileName->Match(_L("\\Malformed_functionWrite.txt"))!=KErrNotFound)
+ {
+ RDebug::Printf("CTestNotificationFileCB::WriteL - malformed_functionWrite.txt");
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(Mount(),EFsFileWrite);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomFileMalformed_functionWrite.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ //We won't set filesize - which should result in an error.
+ // SetFilesize((TInt64)4);
+ //
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = Mount().IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+
+ }
+
+void CTestNotificationFileCB::SetEntryL(const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/)
+ {
+ if(iFileName->Match(_L("\\Wellformed_functionAttributes.txt"))!= KErrNotFound) //PhantomFile_functionWrite.txt
+ {
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(Mount(),EFsFileSetAtt);
+ TBuf<KMaxFileName> phantomName;
+ phantomName.Append(_L("\\"));
+ phantomName.Append(_L("PhantomFile_functionAttributes.txt"));
+ TInt r = notificationInfo->SetSourceName(phantomName);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetAttributes(KEntryAttSystem,KEntryAttHidden);
+ User::LeaveIfError(r);
+ r = notificationInfo->SetUid(TUid::Uid(KErrUnknown));
+ User::LeaveIfError(r);
+ r = Mount().IssueNotification(notificationInfo);
+ User::LeaveIfError(r);
+ CFsNotificationInfo::Free(notificationInfo);
+ return;
+ }
+ }
+
+CTestFileSystem::CTestFileSystem()
+//
+// Constructor
+//
+ {
+ __DECLARE_NAME(_S("CNotifyTestFileSystem"));
+ }
+
+CTestFileSystem::~CTestFileSystem()
+//
+// Destructor
+//
+ {}
+
+TInt CTestFileSystem::Install()
+//
+// Install the file system
+//
+ {
+ iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KF32BuildVersionNumber);
+ TPtrC name=_L("CNotifyTestFileSystem");
+ return(SetName(&name));
+ }
+
+CMountCB* CTestFileSystem::NewMountL() const
+//
+// Create a new mount control block
+//
+ {
+ return (new(ELeave) CTestNotificationMountCB);
+ }
+
+CFileCB* CTestFileSystem::NewFileL() const
+//
+// Create a new file
+//
+ {
+ return (new(ELeave) CTestNotificationFileCB);
+ }
+
+CDirCB* CTestFileSystem::NewDirL() const
+//
+// create a new directory lister
+//
+ {
+ return (new(ELeave) CTestDirCB);
+ }
+
+CFormatCB* CTestFileSystem::NewFormatL() const
+//
+// Create a new media formatter
+//
+ {
+ return (new(ELeave) CTestFormatCB);
+ }
+
+TInt CTestFileSystem::DefaultPath(TDes& aPath) const
+//
+// Return the intial default path
+//
+ {
+ aPath=_L("C:\\");
+ return (KErrNone);
+ }
+
+
+/**
+Reports whether the specified interface is supported - if it is,
+the supplied interface object is modified to it
+
+@param aInterfaceId The interface of interest
+@param aInterface The interface object
+@return KErrNone if the interface is supported, otherwise KErrNotFound
+
+@see CFileSystem::GetInterface()
+*/
+TInt CTestFileSystem::GetInterface(TInt aInterfaceId, TAny*& aInterface,TAny* aInput)
+ {
+ switch(aInterfaceId)
+ {
+ case CFileSystem::EProxyDriveSupport: // The FAT Filesystem supports proxy drives
+ return KErrNone;
+
+ default:
+ return(CFileSystem::GetInterface(aInterfaceId, aInterface, aInput));
+ }
+ }
+
+CFileSystem* CTestFileSystem::NewL()
+//
+//
+//
+ {
+ CFileSystem* testFSys = new(ELeave) CTestFileSystem;
+ return testFSys;
+ }
+
+
+CTestNotificationMountCB::CTestNotificationMountCB(){};
+CTestNotificationMountCB::~CTestNotificationMountCB(){};
+CTestDirCB::CTestDirCB(){};
+CTestDirCB::~CTestDirCB(){};
+CTestNotificationFileCB::CTestNotificationFileCB(){};
+CTestNotificationFileCB::~CTestNotificationFileCB(){};
+CTestFormatCB::CTestFormatCB(){};
+CTestFormatCB::~CTestFormatCB(){};
+
+
+extern "C" {
+
+EXPORT_C CFileSystem* CreateFileSystem()
+//
+// Create a new file system
+//
+ {
+ return(CTestFileSystem::NewL());
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/testfsys/t_tfsys_notify.h Mon Nov 01 20:11:36 2010 +0000
@@ -0,0 +1,110 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// f32test\testfsys\t_tfsys.h
+//
+//
+
+#include <f32file.h>
+#include "common.h"
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <f32dbg.h>
+#include <e32svr.h>
+#include <f32plugin.h>
+
+class CTestNotificationMountCB : public CMountCB
+ {
+public:
+ CTestNotificationMountCB();
+ ~CTestNotificationMountCB();
+ void MountL(TBool /*aForceMount*/){
+ iUniqueID=0;
+ iSize=(TUint)2 << 30; //2GB
+ SetVolumeName(_L("TestNotificationFS").AllocL());
+ }
+ TInt ReMount(){return KErrNone;}
+ void Dismounted(){}
+ void VolumeL(TVolumeInfo& aVolume) const{
+ aVolume.iFree = 1 << 30;
+ }
+ void SetVolumeL(TDes& /*aName*/){ }
+ void MkDirL(const TDesC& /*aName*/){}
+ void RmDirL(const TDesC& /*aName*/){}
+ void DeleteL(const TDesC& /*aName*/){}
+ void RenameL(const TDesC& /*aName*/,const TDesC& /*aNewName*/){}
+ void ReplaceL(const TDesC& /*anOldName*/,const TDesC& /*anNewName*/){}
+ void EntryL(const TDesC& /*aName*/,TEntry& /*anEntry*/) const{}
+ void SetEntryL(const TDesC& /*aName*/,const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/){}
+ void FileOpenL(const TDesC& /*aName*/,TUint /*aMode*/,TFileOpen /*anOpen*/,CFileCB* /*aFile*/);
+ void DirOpenL(const TDesC& /*aName*/,CDirCB* /*aDir*/){}
+ void RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const{}
+ void RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/){}
+ void ReadUidL(const TDesC& /*aName*/,TEntry& /*anEntry*/) const{}
+ void GetShortNameL(const TDesC& /*aLongName*/,TDes& /*aShortName*/){}
+ void GetLongNameL(const TDesC& /*aShortName*/,TDes& /*aLongName*/){}
+ void IsFileInRom(const TDesC& /*aFileName*/,TUint8*& /*aFileStart*/){}
+ void ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/){}
+ };
+
+
+
+class CTestNotificationFileCB : public CFileCB
+ {
+public:
+ CTestNotificationFileCB();
+ ~CTestNotificationFileCB();
+ void RenameL(const TDesC& /*aNewName*/);
+ void ReadL(TInt /*aPos*/,TInt& /*aLength*/,const TAny* /*aDes*/,const RMessagePtr2& /*aMessage*/){}
+ void WriteL(TInt /*aPos*/,TInt& /*aLength*/,const TAny* /*aDes*/,const RMessagePtr2& /*aMessage*/);
+ TInt Address(TInt& /*aPos*/) const{return 0;}
+ void SetSizeL(TInt /*aSize*/){}
+ void SetEntryL(const TTime& /*aTime*/,TUint /*aSetAttMask*/,TUint /*aClearAttMask*/);
+ void FlushDataL(){}
+ void FlushAllL(){}
+ void CheckPos(TInt /*aPos*/){}
+ };
+
+class CTestDirCB : public CDirCB
+ {
+public:
+ CTestDirCB();
+ ~CTestDirCB();
+ void ReadL(TEntry& /*anEntry*/){}
+ };
+
+class CTestFormatCB : public CFormatCB
+ {
+public:
+ CTestFormatCB();
+ ~CTestFormatCB();
+ void DoFormatStepL(){}
+ };
+
+class CTestFileSystem : public CFileSystem
+ {
+public:
+ CTestFileSystem();
+ ~CTestFileSystem();
+ TInt Install();
+ TInt DefaultPath(TDes& aPath) const;
+ TBusLocalDrive& DriveNumberToLocalDrive(TInt aDriveNumber);
+ TInt GetInterface(TInt aInterfaceId, TAny*& aInterface,TAny* aInput);
+private:
+ CMountCB* NewMountL() const;
+ CFileCB* NewFileL() const;
+ CDirCB* NewDirL() const;
+ CFormatCB* NewFormatL() const;
+public:
+ static CFileSystem* NewL();
+ };
--- a/userlibandfileserver/fileserver/bmarm/efileu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/bmarm/efileu.def Mon Nov 01 20:11:36 2010 +0000
@@ -242,3 +242,12 @@
Volume__C9RFsPluginR11TVolumeInfoi @ 241 NONAME R3UNUSED ; RFsPlugin::Volume(TVolumeInfo &, int) const
IsSequentialMode__C7CFileCB @ 242 NONAME R3UNUSED ; CFileCB::IsSequentialMode(void) const
DirectIOMode__7CFileCBRC12RMessagePtr2 @ 243 NONAME R3UNUSED ; CFileCB::DirectIOMode(RMessagePtr2 const &)
+ Allocate__19CFsNotificationInfoRC8CMountCBi @ 244 NONAME R3UNUSED ; CFsNotificationInfo::Allocate(CMountCB const &, int)
+ Free__19CFsNotificationInfoRP19CFsNotificationInfo @ 245 NONAME R3UNUSED ; CFsNotificationInfo::Free(CFsNotificationInfo *&)
+ IssueNotification__8CMountCBP19CFsNotificationInfo @ 246 NONAME R3UNUSED ; CMountCB::IssueNotification(CFsNotificationInfo *)
+ SetAttributes__19CFsNotificationInfoUiUi @ 247 NONAME R3UNUSED ; CFsNotificationInfo::SetAttributes(unsigned int, unsigned int)
+ SetFilesize__19CFsNotificationInfox @ 248 NONAME ; CFsNotificationInfo::SetFilesize(long long)
+ SetNewName__19CFsNotificationInfoRC7TDesC16 @ 249 NONAME R3UNUSED ; CFsNotificationInfo::SetNewName(TDesC16 const &)
+ SetSourceName__19CFsNotificationInfoRC7TDesC16 @ 250 NONAME R3UNUSED ; CFsNotificationInfo::SetSourceName(TDesC16 const &)
+ SetUid__19CFsNotificationInfoRC4TUid @ 251 NONAME R3UNUSED ; CFsNotificationInfo::SetUid(TUid const &)
+
--- a/userlibandfileserver/fileserver/bmarm/efsrvu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/bmarm/efsrvu.def Mon Nov 01 20:11:36 2010 +0000
@@ -375,4 +375,6 @@
MountFileSystem__C14CFsMountHelper @ 374 NONAME R3UNUSED ; CFsMountHelper::MountFileSystem(void) const
New__14CFsMountHelperR3RFsi @ 375 NONAME R3UNUSED ; CFsMountHelper::New(RFs &, int)
"_._14CFsMountHelper" @ 376 NONAME R3UNUSED ; CFsMountHelper::~CFsMountHelper(void)
+ DriveNumber__C15TFsNotificationRi @ 377 NONAME R3UNUSED ; TFsNotification::DriveNumber(int &) const
+ UID__C15TFsNotificationR4TUid @ 378 NONAME R3UNUSED ; TFsNotification::UID(TUid &) const
--- a/userlibandfileserver/fileserver/bwins/efileu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/bwins/efileu.def Mon Nov 01 20:11:36 2010 +0000
@@ -243,3 +243,12 @@
?Volume@RFsPlugin@@QBEHAAVTVolumeInfo@@H@Z @ 242 NONAME ; int RFsPlugin::Volume(class TVolumeInfo &, int) const
?IsSequentialMode@CFileCB@@QBEHXZ @ 243 NONAME ; int CFileCB::IsSequentialMode(void) const
?DirectIOMode@CFileCB@@QAEHABVRMessagePtr2@@@Z @ 244 NONAME ; int CFileCB::DirectIOMode(class RMessagePtr2 const &)
+ ?Allocate@CFsNotificationInfo@@SAPAV1@ABVCMountCB@@H@Z @ 245 NONAME ; class CFsNotificationInfo * CFsNotificationInfo::Allocate(class CMountCB const &, int)
+ ?SetNewName@CFsNotificationInfo@@QAEHABVTDesC16@@@Z @ 246 NONAME ; int CFsNotificationInfo::SetNewName(class TDesC16 const &)
+ ?IssueNotification@CMountCB@@QAEHPAVCFsNotificationInfo@@@Z @ 247 NONAME ; int CMountCB::IssueNotification(class CFsNotificationInfo *)
+ ?SetUid@CFsNotificationInfo@@QAEHABVTUid@@@Z @ 248 NONAME ; int CFsNotificationInfo::SetUid(class TUid const &)
+ ?Free@CFsNotificationInfo@@SAXAAPAV1@@Z @ 249 NONAME ; void CFsNotificationInfo::Free(class CFsNotificationInfo * &)
+ ?SetFilesize@CFsNotificationInfo@@QAEH_J@Z @ 250 NONAME ; int CFsNotificationInfo::SetFilesize(long long)
+ ?SetSourceName@CFsNotificationInfo@@QAEHABVTDesC16@@@Z @ 251 NONAME ; int CFsNotificationInfo::SetSourceName(class TDesC16 const &)
+ ?SetAttributes@CFsNotificationInfo@@QAEHII@Z @ 252 NONAME ; int CFsNotificationInfo::SetAttributes(unsigned int, unsigned int)
+
--- a/userlibandfileserver/fileserver/bwins/efsrvu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/bwins/efsrvu.def Mon Nov 01 20:11:36 2010 +0000
@@ -375,4 +375,6 @@
?GetMountProperties@CFsMountHelper@@QAEHXZ @ 374 NONAME ; public: int __thiscall CFsMountHelper::GetMountProperties(void)
?MountFileSystem@CFsMountHelper@@QBEHXZ @ 375 NONAME ; public: int __thiscall CFsMountHelper::MountFileSystem(void)const
?New@CFsMountHelper@@SAPAV1@AAVRFs@@H@Z @ 376 NONAME ; public: static class CFsMountHelper * __cdecl CFsMountHelper::New(class RFs &,int)
+ ?DriveNumber@TFsNotification@@QBEHAAH@Z @ 377 NONAME ; int TFsNotification::DriveNumber(int &) const
+ ?UID@TFsNotification@@QBEHAAVTUid@@@Z @ 378 NONAME ; int TFsNotification::UID(class TUid &) const
--- a/userlibandfileserver/fileserver/bx86/efileu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/bx86/efileu.def Mon Nov 01 20:11:36 2010 +0000
@@ -243,4 +243,12 @@
?Volume@RFsPlugin@@QBEHAAVTVolumeInfo@@H@Z @ 242 NONAME ; public: int __thiscall RFsPlugin::Volume(class TVolumeInfo &,int)const
?IsSequentialMode@CFileCB@@QBEHXZ @ 243 NONAME ; public: int __thiscall CFileCB::IsSequentialMode(void)const
?DirectIOMode@CFileCB@@QAEHABVRMessagePtr2@@@Z @ 244 NONAME ; int CFileCB::DirectIOMode(class RMessagePtr2 const &)
+ ?Allocate@CFsNotificationInfo@@SAPAV1@ABVCMountCB@@H@Z @ 245 NONAME ; public: static class CFsNotificationInfo * __cdecl CFsNotificationInfo::Allocate(class CMountCB const &,int)
+ ?Free@CFsNotificationInfo@@SAXAAPAV1@@Z @ 246 NONAME ; public: static void __cdecl CFsNotificationInfo::Free(class CFsNotificationInfo * &)
+ ?IssueNotification@CMountCB@@QAEHPAVCFsNotificationInfo@@@Z @ 247 NONAME ; public: int __thiscall CMountCB::IssueNotification(class CFsNotificationInfo *)
+ ?SetAttributes@CFsNotificationInfo@@QAEHII@Z @ 248 NONAME ; public: int __thiscall CFsNotificationInfo::SetAttributes(unsigned int,unsigned int)
+ ?SetFilesize@CFsNotificationInfo@@QAEH_J@Z @ 249 NONAME ; public: int __thiscall CFsNotificationInfo::SetFilesize(__int64)
+ ?SetNewName@CFsNotificationInfo@@QAEHABVTDesC16@@@Z @ 250 NONAME ; public: int __thiscall CFsNotificationInfo::SetNewName(class TDesC16 const &)
+ ?SetSourceName@CFsNotificationInfo@@QAEHABVTDesC16@@@Z @ 251 NONAME ; public: int __thiscall CFsNotificationInfo::SetSourceName(class TDesC16 const &)
+ ?SetUid@CFsNotificationInfo@@QAEHABVTUid@@@Z @ 252 NONAME ; public: int __thiscall CFsNotificationInfo::SetUid(class TUid const &)
--- a/userlibandfileserver/fileserver/bx86/efsrvu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/bx86/efsrvu.def Mon Nov 01 20:11:36 2010 +0000
@@ -1,378 +1,380 @@
EXPORTS
- ??0CDir@@IAE@XZ @ 1 NONAME ; protected: __thiscall CDir::CDir(void)
- ??0CFileBase@@IAE@AAVRFs@@@Z @ 2 NONAME ; protected: __thiscall CFileBase::CFileBase(class RFs &)
- ??0TDriveUnit@@QAE@ABVTDesC16@@@Z @ 3 NONAME ; public: __thiscall TDriveUnit::TDriveUnit(class TDesC16 const &)
- ??0TDriveUnit@@QAE@H@Z @ 4 NONAME ; public: __thiscall TDriveUnit::TDriveUnit(int)
- ??0TEntryArray@@QAE@XZ @ 5 NONAME ; public: __thiscall TEntryArray::TEntryArray(void)
- ??0TFileText@@QAE@XZ @ 6 NONAME ; public: __thiscall TFileText::TFileText(void)
- ??0TFindFile@@QAE@AAVRFs@@@Z @ 7 NONAME ; public: __thiscall TFindFile::TFindFile(class RFs &)
- ??0TOpenFileScan@@QAE@AAVRFs@@@Z @ 8 NONAME ; public: __thiscall TOpenFileScan::TOpenFileScan(class RFs &)
- ??0TParseBase@@QAE@XZ @ 9 NONAME ; public: __thiscall TParseBase::TParseBase(void)
- ??0TParsePtr@@QAE@AAVTDes16@@@Z @ 10 NONAME ; public: __thiscall TParsePtr::TParsePtr(class TDes16 &)
- ??0TParsePtrC@@QAE@ABVTDesC16@@@Z @ 11 NONAME ; public: __thiscall TParsePtrC::TParsePtrC(class TDesC16 const &)
- ??0TVolumeInfo@@QAE@XZ @ 12 NONAME ; public: __thiscall TVolumeInfo::TVolumeInfo(void)
- ??1CDir@@UAE@XZ @ 13 NONAME ; public: virtual __thiscall CDir::~CDir(void)
- ??1CDirScan@@UAE@XZ @ 14 NONAME ; public: virtual __thiscall CDirScan::~CDirScan(void)
- ??1CFileBase@@MAE@XZ @ 15 NONAME ; protected: virtual __thiscall CFileBase::~CFileBase(void)
- ??4TDriveUnit@@QAEAAV0@ABVTDesC16@@@Z @ 16 NONAME ; public: class TDriveUnit & __thiscall TDriveUnit::operator=(class TDesC16 const &)
- ??4TDriveUnit@@QAEAAV0@H@Z @ 17 NONAME ; public: class TDriveUnit & __thiscall TDriveUnit::operator=(int)
- ??ACDir@@QBEABVTEntry@@H@Z @ 18 NONAME ; public: class TEntry const & __thiscall CDir::operator[](int)const
- ??ATEntryArray@@QBEABVTEntry@@H@Z @ 19 NONAME ; public: class TEntry const & __thiscall TEntryArray::operator[](int)const
- ?AbbreviatedPath@CDirScan@@QAE?AVTPtrC16@@XZ @ 20 NONAME ; public: class TPtrC16 __thiscall CDirScan::AbbreviatedPath(void)
- ?AbbreviatedPath@CFileBase@@QAE?AVTPtrC16@@XZ @ 21 NONAME ; public: class TPtrC16 __thiscall CFileBase::AbbreviatedPath(void)
- ?AddDir@TParseBase@@QAEHABVTDesC16@@@Z @ 22 NONAME ; public: int __thiscall TParseBase::AddDir(class TDesC16 const &)
- ?AddFileSystem@RFs@@QBEHABVTDesC16@@@Z @ 23 NONAME ; public: int __thiscall RFs::AddFileSystem(class TDesC16 const &)const
- ?AddL@CDir@@IAEXABVTEntry@@@Z @ 24 NONAME ; protected: void __thiscall CDir::AddL(class TEntry const &)
- ?Att@RFile@@QBEHAAI@Z @ 25 NONAME ; public: int __thiscall RFile::Att(unsigned int &)const
- ?Att@RFs@@QBEHABVTDesC16@@AAI@Z @ 26 NONAME ; public: int __thiscall RFs::Att(class TDesC16 const &,unsigned int &)const
- ?Attribs@CFileMan@@QAEHABVTDesC16@@IIABVTTime@@I@Z @ 27 NONAME ; public: int __thiscall CFileMan::Attribs(class TDesC16 const &,unsigned int,unsigned int,class TTime const &,unsigned int)
- ?Attribs@CFileMan@@QAEHABVTDesC16@@IIABVTTime@@IAAVTRequestStatus@@@Z @ 28 NONAME ; public: int __thiscall CFileMan::Attribs(class TDesC16 const &,unsigned int,unsigned int,class TTime const &,unsigned int,class TRequestStatus &)
- ?BytesTransferredByCopyStep@CFileMan@@QAEHXZ @ 29 NONAME ; public: int __thiscall CFileMan::BytesTransferredByCopyStep(void)
- ?ChangeMode@RFile@@QAEHW4TFileMode@@@Z @ 30 NONAME ; public: int __thiscall RFile::ChangeMode(enum TFileMode)
- ?CharToDrive@RFs@@SAHVTChar@@AAH@Z @ 31 NONAME ; public: static int __cdecl RFs::CharToDrive(class TChar,int &)
- ?CheckDisk@RFs@@QBEHABVTDesC16@@@Z @ 32 NONAME ; public: int __thiscall RFs::CheckDisk(class TDesC16 const &)const
- ?ClearPassword@RFs@@QAEHHABV?$TBuf8@$0BA@@@@Z @ 33 NONAME ; public: int __thiscall RFs::ClearPassword(int,class TBuf8<16> const &)
- ?Duplicate@RFile@@QAEHABV1@W4TOwnerType@@@Z @ 34 NONAME ; public: int __thiscall RFile::Duplicate(class RFile const &,enum TOwnerType)
- ?Close@RRawDisk@@QAEXXZ @ 35 NONAME ; public: void __thiscall RRawDisk::Close(void)
- ?Compress@CDir@@IAEXXZ @ 36 NONAME ; protected: void __thiscall CDir::Compress(void)
- ?Connect@RFs@@QAEHH@Z @ 37 NONAME ; public: int __thiscall RFs::Connect(int)
- ?ConstructL@CFileBase@@IAEXXZ @ 38 NONAME ; protected: void __thiscall CFileBase::ConstructL(void)
- ?ControlIo@RFs@@QAEHHHPAX0@Z @ 39 NONAME ; public: int __thiscall RFs::ControlIo(int,int,void *,void *)
- ?Copy@CFileMan@@QAEHABVTDesC16@@0I@Z @ 40 NONAME ; public: int __thiscall CFileMan::Copy(class TDesC16 const &,class TDesC16 const &,unsigned int)
- ?Copy@CFileMan@@QAEHABVTDesC16@@0IAAVTRequestStatus@@@Z @ 41 NONAME ; public: int __thiscall CFileMan::Copy(class TDesC16 const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
- ?Count@CDir@@QBEHXZ @ 42 NONAME ; public: int __thiscall CDir::Count(void)const
- ?Count@TEntryArray@@QBEHXZ @ 43 NONAME ; public: int __thiscall TEntryArray::Count(void)const
- ?Create@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 44 NONAME ; public: int __thiscall RFile::Create(class RFs &,class TDesC16 const &,unsigned int)
- ?CurrentAction@CFileMan@@QAE?AW4TAction@1@XZ @ 45 NONAME ; public: enum CFileMan::TAction __thiscall CFileMan::CurrentAction(void)
- ?CurrentEntry@CFileBase@@QAEABVTEntry@@XZ @ 46 NONAME ; public: class TEntry const & __thiscall CFileBase::CurrentEntry(void)
- ?DefaultPath@RFs@@QBEHAAVTDes16@@@Z @ 47 NONAME ; public: int __thiscall RFs::DefaultPath(class TDes16 &)const
- ?Delete@CFileMan@@QAEHABVTDesC16@@I@Z @ 48 NONAME ; public: int __thiscall CFileMan::Delete(class TDesC16 const &,unsigned int)
- ?Delete@CFileMan@@QAEHABVTDesC16@@IAAVTRequestStatus@@@Z @ 49 NONAME ; public: int __thiscall CFileMan::Delete(class TDesC16 const &,unsigned int,class TRequestStatus &)
- ?Delete@RFs@@QAEHABVTDesC16@@@Z @ 50 NONAME ; public: int __thiscall RFs::Delete(class TDesC16 const &)
- ?DismountFileSystem@RFs@@QBEHABVTDesC16@@H@Z @ 51 NONAME ; public: int __thiscall RFs::DismountFileSystem(class TDesC16 const &,int)const
- ?Drive@RFs@@QBEHAAVTDriveInfo@@H@Z @ 52 NONAME ; public: int __thiscall RFs::Drive(class TDriveInfo &,int)const
- ?Drive@TParseBase@@QBE?AVTPtrC16@@XZ @ 53 NONAME ; public: class TPtrC16 __thiscall TParseBase::Drive(void)const
- ?DriveAndPath@TParseBase@@QBE?AVTPtrC16@@XZ @ 54 NONAME ; public: class TPtrC16 __thiscall TParseBase::DriveAndPath(void)const
- ?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z @ 55 NONAME ; public: int __thiscall RFs::DriveList(class TBuf8<26> &)const
- ?DrivePresent@TParseBase@@QBEHXZ @ 56 NONAME ; public: int __thiscall TParseBase::DrivePresent(void)const
- ?DriveToChar@RFs@@SAHHAAVTChar@@@Z @ 57 NONAME ; public: static int __cdecl RFs::DriveToChar(int,class TChar &)
- ?Entry@RFs@@QBEHABVTDesC16@@AAVTEntry@@@Z @ 58 NONAME ; public: int __thiscall RFs::Entry(class TDesC16 const &,class TEntry &)const
- ?Ext@TParseBase@@QBE?AVTPtrC16@@XZ @ 59 NONAME ; public: class TPtrC16 __thiscall TParseBase::Ext(void)const
- ?ExtPresent@TParseBase@@QBEHXZ @ 60 NONAME ; public: int __thiscall TParseBase::ExtPresent(void)const
- ?ExtractL@CDir@@IAEXHAAPAV1@@Z @ 61 NONAME ; protected: void __thiscall CDir::ExtractL(int,class CDir * &)
- ?FileSystemName@RFs@@QBEHAAVTDes16@@H@Z @ 62 NONAME ; public: int __thiscall RFs::FileSystemName(class TDes16 &,int)const
- ?Find@TFindFile@@QAEHXZ @ 63 NONAME ; public: int __thiscall TFindFile::Find(void)
- ?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z @ 64 NONAME ; public: int __thiscall TFindFile::FindByDir(class TDesC16 const &,class TDesC16 const &)
- ?FindByPath@TFindFile@@QAEHABVTDesC16@@PBV2@@Z @ 65 NONAME ; public: int __thiscall TFindFile::FindByPath(class TDesC16 const &,class TDesC16 const *)
- ?FindWild@TFindFile@@QAEHAAPAVCDir@@@Z @ 66 NONAME ; public: int __thiscall TFindFile::FindWild(class CDir * &)
- ?FindWildByDir@TFindFile@@QAEHABVTDesC16@@0AAPAVCDir@@@Z @ 67 NONAME ; public: int __thiscall TFindFile::FindWildByDir(class TDesC16 const &,class TDesC16 const &,class CDir * &)
- ?FindWildByPath@TFindFile@@QAEHABVTDesC16@@PBV2@AAPAVCDir@@@Z @ 68 NONAME ; public: int __thiscall TFindFile::FindWildByPath(class TDesC16 const &,class TDesC16 const *,class CDir * &)
- ?Flush@RFile@@QAEHXZ @ 69 NONAME ; public: int __thiscall RFile::Flush(void)
- ?FullName@TParseBase@@QBEABVTDesC16@@XZ @ 70 NONAME ; public: class TDesC16 const & __thiscall TParseBase::FullName(void)const
- ?FullPath@CDirScan@@QAE?AVTPtrC16@@XZ @ 71 NONAME ; public: class TPtrC16 __thiscall CDirScan::FullPath(void)
- ?FullPath@CFileBase@@QAE?AVTPtrC16@@XZ @ 72 NONAME ; public: class TPtrC16 __thiscall CFileBase::FullPath(void)
- ?GetCurrentSource@CFileMan@@QAEXAAV?$TBuf@$0BAA@@@@Z @ 73 NONAME ; public: void __thiscall CFileMan::GetCurrentSource(class TBuf<256> &)
- ?GetCurrentTarget@CFileMan@@QAEXAAV?$TBuf@$0BAA@@@@Z @ 74 NONAME ; public: void __thiscall CFileMan::GetCurrentTarget(class TBuf<256> &)
- ?GetDir@RFs@@QBEHABVTDesC16@@ABVTUidType@@IAAPAVCDir@@@Z @ 75 NONAME ; public: int __thiscall RFs::GetDir(class TDesC16 const &,class TUidType const &,unsigned int,class CDir * &)const
- ?GetDir@RFs@@QBEHABVTDesC16@@IIAAPAVCDir@@1@Z @ 76 NONAME ; public: int __thiscall RFs::GetDir(class TDesC16 const &,unsigned int,unsigned int,class CDir * &,class CDir * &)const
- ?GetDir@RFs@@QBEHABVTDesC16@@IIAAPAVCDir@@@Z @ 77 NONAME ; public: int __thiscall RFs::GetDir(class TDesC16 const &,unsigned int,unsigned int,class CDir * &)const
- ?GetDriveName@RFs@@QBEHHAAVTDes16@@@Z @ 78 NONAME ; public: int __thiscall RFs::GetDriveName(int,class TDes16 &)const
- ?GetLastError@CFileBase@@QAEHXZ @ 79 NONAME ; public: int __thiscall CFileBase::GetLastError(void)
- ?GetLongName@RFs@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 80 NONAME ; public: int __thiscall RFs::GetLongName(class TDesC16 const &,class TDes16 &)const
- ?GetMoreInfoAboutError@CFileBase@@QAE?AW4TFileManError@@XZ @ 81 NONAME ; public: enum TFileManError __thiscall CFileBase::GetMoreInfoAboutError(void)
- ?GetNotifyUser@RFs@@QAEHXZ @ 82 NONAME ; public: int __thiscall RFs::GetNotifyUser(void)
- ?GetShortName@RFs@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 83 NONAME ; public: int __thiscall RFs::GetShortName(class TDesC16 const &,class TDes16 &)const
- ?IsArchive@TEntry@@QBEHXZ @ 84 NONAME ; public: int __thiscall TEntry::IsArchive(void)const
- ?IsDir@TEntry@@QBEHXZ @ 85 NONAME ; public: int __thiscall TEntry::IsDir(void)const
- ?IsExtWild@TParseBase@@QBEHXZ @ 86 NONAME ; public: int __thiscall TParseBase::IsExtWild(void)const
- ?IsFileInRom@RFs@@QBEPAEABVTDesC16@@@Z @ 87 NONAME ; public: unsigned char * __thiscall RFs::IsFileInRom(class TDesC16 const &)const
- ?IsFileOpen@RFs@@QBEHABVTDesC16@@AAH@Z @ 88 NONAME ; public: int __thiscall RFs::IsFileOpen(class TDesC16 const &,int &)const
- ?IsHidden@TEntry@@QBEHXZ @ 89 NONAME ; public: int __thiscall TEntry::IsHidden(void)const
- ?IsKMatchAny@TParseBase@@QBEHXZ @ 90 NONAME ; public: int __thiscall TParseBase::IsKMatchAny(void)const
- ?IsKMatchOne@TParseBase@@QBEHXZ @ 91 NONAME ; public: int __thiscall TParseBase::IsKMatchOne(void)const
- ?IsNameWild@TParseBase@@QBEHXZ @ 92 NONAME ; public: int __thiscall TParseBase::IsNameWild(void)const
- ?IsReadOnly@TEntry@@QBEHXZ @ 93 NONAME ; public: int __thiscall TEntry::IsReadOnly(void)const
- ?IsRomAddress@RFs@@SAHPAX@Z @ 94 NONAME ; public: static int __cdecl RFs::IsRomAddress(void *)
- ?IsRoot@TParseBase@@QBEHXZ @ 95 NONAME ; public: int __thiscall TParseBase::IsRoot(void)const
- ?IsSystem@TEntry@@QBEHXZ @ 96 NONAME ; public: int __thiscall TEntry::IsSystem(void)const
- ?IsValidDrive@RFs@@SAHH@Z @ 97 NONAME ; public: static int __cdecl RFs::IsValidDrive(int)
- ?IsValidName@RFs@@QBEHABVTDesC16@@@Z @ 98 NONAME ; public: int __thiscall RFs::IsValidName(class TDesC16 const &)const
- ?IsValidName@RFs@@QBEHABVTDesC16@@AAG@Z @ 99 NONAME ; public: int __thiscall RFs::IsValidName(class TDesC16 const &,unsigned short &)const
- ?IsWild@TParseBase@@QBEHXZ @ 100 NONAME ; public: int __thiscall TParseBase::IsWild(void)const
- ?LoaderHeapFunction@RFs@@QAEHHPAX0@Z @ 101 NONAME ; public: int __thiscall RFs::LoaderHeapFunction(int,void *,void *)
- ?Lock@RFile@@QBEHHH@Z @ 102 NONAME ; public: int __thiscall RFile::Lock(int,int)const
- ?LockDrive@RFs@@QAEHHABV?$TBuf8@$0BA@@@0H@Z @ 103 NONAME ; public: int __thiscall RFs::LockDrive(int,class TBuf8<16> const &,class TBuf8<16> const &,int)
- ?MkDir@RFs@@QAEHABVTDesC16@@@Z @ 104 NONAME ; public: int __thiscall RFs::MkDir(class TDesC16 const &)
- ?MkDirAll@RFs@@QAEHABVTDesC16@@@Z @ 105 NONAME ; public: int __thiscall RFs::MkDirAll(class TDesC16 const &)
- ?Modified@RFile@@QBEHAAVTTime@@@Z @ 106 NONAME ; public: int __thiscall RFile::Modified(class TTime &)const
- ?Modified@RFs@@QBEHABVTDesC16@@AAVTTime@@@Z @ 107 NONAME ; public: int __thiscall RFs::Modified(class TDesC16 const &,class TTime &)const
- ?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z @ 108 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,int)const
- ?Move@CFileMan@@QAEHABVTDesC16@@0I@Z @ 109 NONAME ; public: int __thiscall CFileMan::Move(class TDesC16 const &,class TDesC16 const &,unsigned int)
- ?Move@CFileMan@@QAEHABVTDesC16@@0IAAVTRequestStatus@@@Z @ 110 NONAME ; public: int __thiscall CFileMan::Move(class TDesC16 const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
- ?Name@TDriveUnit@@QBE?AV?$TBuf@$01@@XZ @ 111 NONAME ; public: class TBuf<2> __thiscall TDriveUnit::Name(void)const
- ?Name@TParseBase@@QBE?AVTPtrC16@@XZ @ 112 NONAME ; public: class TPtrC16 __thiscall TParseBase::Name(void)const
- ?NameAndExt@TParseBase@@QBE?AVTPtrC16@@XZ @ 113 NONAME ; public: class TPtrC16 __thiscall TParseBase::NameAndExt(void)const
- ?NameBuf@TParse@@MAEAAVTDes16@@XZ @ 114 NONAME ; protected: virtual class TDes16 & __thiscall TParse::NameBuf(void)
- ?NameBuf@TParsePtr@@MAEAAVTDes16@@XZ @ 115 NONAME ; protected: virtual class TDes16 & __thiscall TParsePtr::NameBuf(void)
- ?NameBuf@TParsePtrC@@MAEAAVTDes16@@XZ @ 116 NONAME ; protected: virtual class TDes16 & __thiscall TParsePtrC::NameBuf(void)
- ?NameBufC@TParse@@MBEABVTDesC16@@XZ @ 117 NONAME ; protected: virtual class TDesC16 const & __thiscall TParse::NameBufC(void)const
- ?NameBufC@TParsePtr@@MBEABVTDesC16@@XZ @ 118 NONAME ; protected: virtual class TDesC16 const & __thiscall TParsePtr::NameBufC(void)const
- ?NameBufC@TParsePtrC@@MBEABVTDesC16@@XZ @ 119 NONAME ; protected: virtual class TDesC16 const & __thiscall TParsePtrC::NameBufC(void)const
- ?NameOrExtPresent@TParseBase@@QBEHXZ @ 120 NONAME ; public: int __thiscall TParseBase::NameOrExtPresent(void)const
- ?NamePresent@TParseBase@@QBEHXZ @ 121 NONAME ; public: int __thiscall TParseBase::NamePresent(void)const
- ?NewL@CDir@@KAPAV1@XZ @ 122 NONAME ; protected: static class CDir * __cdecl CDir::NewL(void)
- ?NewL@CDirScan@@SAPAV1@AAVRFs@@@Z @ 123 NONAME ; public: static class CDirScan * __cdecl CDirScan::NewL(class RFs &)
- ?NewL@CFileMan@@SAPAV1@AAVRFs@@@Z @ 124 NONAME ; public: static class CFileMan * __cdecl CFileMan::NewL(class RFs &)
- ?NewL@CFileMan@@SAPAV1@AAVRFs@@PAVMFileManObserver@@@Z @ 125 NONAME ; public: static class CFileMan * __cdecl CFileMan::NewL(class RFs &,class MFileManObserver *)
- ?NewLC@CDirScan@@SAPAV1@AAVRFs@@@Z @ 126 NONAME ; public: static class CDirScan * __cdecl CDirScan::NewLC(class RFs &)
- ?Next@RFormat@@QAEHAAH@Z @ 127 NONAME ; public: int __thiscall RFormat::Next(int &)
- ?Next@RFormat@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 128 NONAME ; public: void __thiscall RFormat::Next(class TPckgBuf<int> &,class TRequestStatus &)
- ?NextL@CDirScan@@QAEXAAPAVCDir@@@Z @ 129 NONAME ; public: void __thiscall CDirScan::NextL(class CDir * &)
- ?NextL@TOpenFileScan@@QAEXAAPAVCDir@@@Z @ 130 NONAME ; public: void __thiscall TOpenFileScan::NextL(class CDir * &)
- ?NotifyChange@RFs@@QAEXW4TNotifyType@@AAVTRequestStatus@@@Z @ 131 NONAME ; public: void __thiscall RFs::NotifyChange(enum TNotifyType,class TRequestStatus &)
- ?NotifyChange@RFs@@QAEXW4TNotifyType@@AAVTRequestStatus@@ABVTDesC16@@@Z @ 132 NONAME ; public: void __thiscall RFs::NotifyChange(enum TNotifyType,class TRequestStatus &,class TDesC16 const &)
- ?NotifyChangeCancel@RFs@@QAEXAAVTRequestStatus@@@Z @ 133 NONAME ; public: void __thiscall RFs::NotifyChangeCancel(class TRequestStatus &)
- ?NotifyChangeCancel@RFs@@QAEXXZ @ 134 NONAME ; public: void __thiscall RFs::NotifyChangeCancel(void)
- ?NotifyFileManEnded@MFileManObserver@@UAE?AW4TControl@1@XZ @ 135 NONAME ; public: virtual enum MFileManObserver::TControl __thiscall MFileManObserver::NotifyFileManEnded(void)
- ?NotifyFileManOperation@MFileManObserver@@UAE?AW4TControl@1@XZ @ 136 NONAME ; public: virtual enum MFileManObserver::TControl __thiscall MFileManObserver::NotifyFileManOperation(void)
- ?NotifyFileManStarted@MFileManObserver@@UAE?AW4TControl@1@XZ @ 137 NONAME ; public: virtual enum MFileManObserver::TControl __thiscall MFileManObserver::NotifyFileManStarted(void)
- ?Open@RDir@@QAEHAAVRFs@@ABVTDesC16@@ABVTUidType@@@Z @ 138 NONAME ; public: int __thiscall RDir::Open(class RFs &,class TDesC16 const &,class TUidType const &)
- ?Open@RDir@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 139 NONAME ; public: int __thiscall RDir::Open(class RFs &,class TDesC16 const &,unsigned int)
- ?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 140 NONAME ; public: int __thiscall RFile::Open(class RFs &,class TDesC16 const &,unsigned int)
- ?Open@RFormat@@QAEHAAVRFs@@ABVTDesC16@@IAAH@Z @ 141 NONAME ; public: int __thiscall RFormat::Open(class RFs &,class TDesC16 const &,unsigned int,int &)
- ?Open@RRawDisk@@QAEHAAVRFs@@H@Z @ 142 NONAME ; public: int __thiscall RRawDisk::Open(class RFs &,int)
- ?Parse@RFs@@QBEHABVTDesC16@@0AAVTParse@@@Z @ 143 NONAME ; public: int __thiscall RFs::Parse(class TDesC16 const &,class TDesC16 const &,class TParse &)const
- ?Parse@RFs@@QBEHABVTDesC16@@AAVTParse@@@Z @ 144 NONAME ; public: int __thiscall RFs::Parse(class TDesC16 const &,class TParse &)const
- ?Path@TParseBase@@QBE?AVTPtrC16@@XZ @ 145 NONAME ; public: class TPtrC16 __thiscall TParseBase::Path(void)const
- ?PathPresent@TParseBase@@QBEHXZ @ 146 NONAME ; public: int __thiscall TParseBase::PathPresent(void)const
- ?PopDir@TParseBase@@QAEHXZ @ 147 NONAME ; public: int __thiscall TParseBase::PopDir(void)
- ?Read@RDir@@QBEHAAVTEntry@@@Z @ 148 NONAME ; public: int __thiscall RDir::Read(class TEntry &)const
- ?Read@RDir@@QBEHAAVTEntryArray@@@Z @ 149 NONAME ; public: int __thiscall RDir::Read(class TEntryArray &)const
- ?Read@RDir@@QBEXAAV?$TPckg@VTEntry@@@@AAVTRequestStatus@@@Z @ 150 NONAME ; public: void __thiscall RDir::Read(class TPckg<class TEntry> &,class TRequestStatus &)const
- ?Read@RDir@@QBEXAAVTEntryArray@@AAVTRequestStatus@@@Z @ 151 NONAME ; public: void __thiscall RDir::Read(class TEntryArray &,class TRequestStatus &)const
- ?Read@RFile@@QBEHAAVTDes8@@@Z @ 152 NONAME ; public: int __thiscall RFile::Read(class TDes8 &)const
- ?Read@RFile@@QBEHAAVTDes8@@H@Z @ 153 NONAME ; public: int __thiscall RFile::Read(class TDes8 &,int)const
- ?Read@RFile@@QBEHHAAVTDes8@@@Z @ 154 NONAME ; public: int __thiscall RFile::Read(int,class TDes8 &)const
- ?Read@RFile@@QBEHHAAVTDes8@@H@Z @ 155 NONAME ; public: int __thiscall RFile::Read(int,class TDes8 &,int)const
- ?Read@RFile@@QBEXAAVTDes8@@AAVTRequestStatus@@@Z @ 156 NONAME ; public: void __thiscall RFile::Read(class TDes8 &,class TRequestStatus &)const
- ?Read@RFile@@QBEXAAVTDes8@@HAAVTRequestStatus@@@Z @ 157 NONAME ; public: void __thiscall RFile::Read(class TDes8 &,int,class TRequestStatus &)const
- ?Read@RFile@@QBEXHAAVTDes8@@AAVTRequestStatus@@@Z @ 158 NONAME ; public: void __thiscall RFile::Read(int,class TDes8 &,class TRequestStatus &)const
- ?Read@RFile@@QBEXHAAVTDes8@@HAAVTRequestStatus@@@Z @ 159 NONAME ; public: void __thiscall RFile::Read(int,class TDes8 &,int,class TRequestStatus &)const
- ?Read@_RRawDisk@@QAEHHAAVTDes8@@@Z @ 160 NONAME ; public: int __thiscall _RRawDisk::Read(int,class TDes8 &)
- ?Read@TFileText@@QAEHAAVTDes16@@@Z @ 161 NONAME ; public: int __thiscall TFileText::Read(class TDes16 &)
- ?ReadFileSection_RESERVED@RFs@@ABEHABVTDesC16@@HAAVTDes8@@H@Z @ 162 NONAME ; public: int __thiscall RFs::ReadFileSection_RESERVED(class TDesC16 const &,int,class TDes8 &,int)const
- ?RealName@RFs@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 163 NONAME ; public: int __thiscall RFs::RealName(class TDesC16 const &,class TDes16 &)const
- ?RemoveFileSystem@RFs@@QBEHABVTDesC16@@@Z @ 164 NONAME ; public: int __thiscall RFs::RemoveFileSystem(class TDesC16 const &)const
- ?Rename@CFileMan@@QAEHABVTDesC16@@0I@Z @ 165 NONAME ; public: int __thiscall CFileMan::Rename(class TDesC16 const &,class TDesC16 const &,unsigned int)
- ?Rename@CFileMan@@QAEHABVTDesC16@@0IAAVTRequestStatus@@@Z @ 166 NONAME ; public: int __thiscall CFileMan::Rename(class TDesC16 const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
- ?Rename@RFile@@QAEHABVTDesC16@@@Z @ 167 NONAME ; public: int __thiscall RFile::Rename(class TDesC16 const &)
- ?Rename@RFs@@QAEHABVTDesC16@@0@Z @ 168 NONAME ; public: int __thiscall RFs::Rename(class TDesC16 const &,class TDesC16 const &)
- ?Replace@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 169 NONAME ; public: int __thiscall RFile::Replace(class RFs &,class TDesC16 const &,unsigned int)
- ?Replace@RFs@@QAEHABVTDesC16@@0@Z @ 170 NONAME ; public: int __thiscall RFs::Replace(class TDesC16 const &,class TDesC16 const &)
- ?ResourceCount@RFs@@QBEHXZ @ 171 NONAME ; public: int __thiscall RFs::ResourceCount(void)const
- ?ResourceCountMarkEnd@RFs@@QBEXXZ @ 172 NONAME ; public: void __thiscall RFs::ResourceCountMarkEnd(void)const
- ?ResourceCountMarkStart@RFs@@QBEXXZ @ 173 NONAME ; public: void __thiscall RFs::ResourceCountMarkStart(void)const
- ?RmDir@CFileMan@@QAEHABVTDesC16@@@Z @ 174 NONAME ; public: int __thiscall CFileMan::RmDir(class TDesC16 const &)
- ?RmDir@CFileMan@@QAEHABVTDesC16@@AAVTRequestStatus@@@Z @ 175 NONAME ; public: int __thiscall CFileMan::RmDir(class TDesC16 const &,class TRequestStatus &)
- ?RmDir@RFs@@QAEHABVTDesC16@@@Z @ 176 NONAME ; public: int __thiscall RFs::RmDir(class TDesC16 const &)
- ?RunInSeparateThreadL@CFileBase@@IAEXP6AHPAX@Z@Z @ 177 NONAME ; protected: void __thiscall CFileBase::RunInSeparateThreadL(int (__cdecl*)(void *))
- ?RunL@CFileBase@@IAEXXZ @ 178 NONAME ; protected: void __thiscall CFileBase::RunL(void)
- ?ScanDrive@RFs@@QBEHABVTDesC16@@@Z @ 179 NONAME ; public: int __thiscall RFs::ScanDrive(class TDesC16 const &)const
- ?Seek@RFile@@QBEHW4TSeek@@AAH@Z @ 180 NONAME ; public: int __thiscall RFile::Seek(enum TSeek,int &)const
- ?Seek@TFileText@@QAEHW4TSeek@@@Z @ 181 NONAME ; public: int __thiscall TFileText::Seek(enum TSeek)
- ?SessionPath@RFs@@QBEHAAVTDes16@@@Z @ 182 NONAME ; public: int __thiscall RFs::SessionPath(class TDes16 &)const
- ?Set@RFile@@QAEHABVTTime@@II@Z @ 183 NONAME ; public: int __thiscall RFile::Set(class TTime const &,unsigned int,unsigned int)
- ?Set@TFileText@@QAEXAAVRFile@@@Z @ 184 NONAME ; public: void __thiscall TFileText::Set(class RFile &)
- ?Set@TParse@@QAEHABVTDesC16@@PBV2@1@Z @ 185 NONAME ; public: int __thiscall TParse::Set(class TDesC16 const &,class TDesC16 const *,class TDesC16 const *)
- ?SetAllocFailure@RFs@@QAEHH@Z @ 186 NONAME ; public: int __thiscall RFs::SetAllocFailure(int)
- ?SetAtt@RFile@@QAEHII@Z @ 187 NONAME ; public: int __thiscall RFile::SetAtt(unsigned int,unsigned int)
- ?SetAtt@RFs@@QAEHABVTDesC16@@II@Z @ 188 NONAME ; public: int __thiscall RFs::SetAtt(class TDesC16 const &,unsigned int,unsigned int)
- ?SetDebugRegister@RFs@@QAEHH@Z @ 189 NONAME ; public: int __thiscall RFs::SetDebugRegister(int)
- ?SetDefaultPath@RFs@@QAEHABVTDesC16@@@Z @ 190 NONAME ; public: int __thiscall RFs::SetDefaultPath(class TDesC16 const &)
- ?SetDriveName@RFs@@QAEHHABVTDesC16@@@Z @ 191 NONAME ; public: int __thiscall RFs::SetDriveName(int,class TDesC16 const &)
- ?SetEntry@RFs@@QAEHABVTDesC16@@ABVTTime@@II@Z @ 192 NONAME ; public: int __thiscall RFs::SetEntry(class TDesC16 const &,class TTime const &,unsigned int,unsigned int)
- ?SetErrorCondition@RFs@@QAEHHH@Z @ 193 NONAME ; public: int __thiscall RFs::SetErrorCondition(int,int)
- ?SetModified@RFile@@QAEHABVTTime@@@Z @ 194 NONAME ; public: int __thiscall RFile::SetModified(class TTime const &)
- ?SetModified@RFs@@QAEHABVTDesC16@@ABVTTime@@@Z @ 195 NONAME ; public: int __thiscall RFs::SetModified(class TDesC16 const &,class TTime const &)
- ?SetNoWild@TParse@@QAEHABVTDesC16@@PBV2@1@Z @ 196 NONAME ; public: int __thiscall TParse::SetNoWild(class TDesC16 const &,class TDesC16 const *,class TDesC16 const *)
- ?SetNotifyUser@RFs@@QAEXH@Z @ 197 NONAME ; public: void __thiscall RFs::SetNotifyUser(int)
- ?SetObserver@CFileBase@@QAEXPAVMFileManObserver@@@Z @ 198 NONAME ; public: void __thiscall CFileBase::SetObserver(class MFileManObserver *)
- ?SetScanDataL@CDirScan@@QAEXABVTDesC16@@IIW4TScanDirection@1@@Z @ 199 NONAME ; public: void __thiscall CDirScan::SetScanDataL(class TDesC16 const &,unsigned int,unsigned int,enum CDirScan::TScanDirection)
- ?SetSessionPath@RFs@@QAEHABVTDesC16@@@Z @ 200 NONAME ; public: int __thiscall RFs::SetSessionPath(class TDesC16 const &)
- ?SetSize@RFile@@QAEHH@Z @ 201 NONAME ; public: int __thiscall RFile::SetSize(int)
- ?SetSubst@RFs@@QAEHABVTDesC16@@H@Z @ 202 NONAME ; public: int __thiscall RFs::SetSubst(class TDesC16 const &,int)
- ?SetVolumeLabel@RFs@@QAEHABVTDesC16@@H@Z @ 203 NONAME ; public: int __thiscall RFs::SetVolumeLabel(class TDesC16 const &,int)
- ?Size@RFile@@QBEHAAH@Z @ 204 NONAME ; public: int __thiscall RFile::Size(int &)const
- ?Sort@CDir@@QAEHI@Z @ 205 NONAME ; public: int __thiscall CDir::Sort(unsigned int)
- ?Subst@RFs@@QBEHAAVTDes16@@H@Z @ 206 NONAME ; public: int __thiscall RFs::Subst(class TDes16 &,int)const
- ?Temp@RFile@@QAEHAAVRFs@@ABVTDesC16@@AAV?$TBuf@$0BAA@@@I@Z @ 207 NONAME ; public: int __thiscall RFile::Temp(class RFs &,class TDesC16 const &,class TBuf<256> &,unsigned int)
- ?ThreadId@TOpenFileScan@@QBE?AVTThreadId@@XZ @ 208 NONAME ; public: class TThreadId __thiscall TOpenFileScan::ThreadId(void)const
- ?UnLock@RFile@@QBEHHH@Z @ 209 NONAME ; public: int __thiscall RFile::UnLock(int,int)const
- ?UnlockDrive@RFs@@QAEHHABV?$TBuf8@$0BA@@@H@Z @ 210 NONAME ; public: int __thiscall RFs::UnlockDrive(int,class TBuf8<16> const &,int)
- ?Version@RFs@@QBE?AVTVersion@@XZ @ 211 NONAME ; public: class TVersion __thiscall RFs::Version(void)const
- ?Volume@RFs@@QBEHAAVTVolumeInfo@@H@Z @ 212 NONAME ; public: int __thiscall RFs::Volume(class TVolumeInfo &,int)const
- ?Write@RFile@@QAEHABVTDesC8@@@Z @ 213 NONAME ; public: int __thiscall RFile::Write(class TDesC8 const &)
- ?Write@RFile@@QAEHABVTDesC8@@H@Z @ 214 NONAME ; public: int __thiscall RFile::Write(class TDesC8 const &,int)
- ?Write@RFile@@QAEHHABVTDesC8@@@Z @ 215 NONAME ; public: int __thiscall RFile::Write(int,class TDesC8 const &)
- ?Write@RFile@@QAEHHABVTDesC8@@H@Z @ 216 NONAME ; public: int __thiscall RFile::Write(int,class TDesC8 const &,int)
- ?Write@RFile@@QAEXABVTDesC8@@AAVTRequestStatus@@@Z @ 217 NONAME ; public: void __thiscall RFile::Write(class TDesC8 const &,class TRequestStatus &)
- ?Write@RFile@@QAEXABVTDesC8@@HAAVTRequestStatus@@@Z @ 218 NONAME ; public: void __thiscall RFile::Write(class TDesC8 const &,int,class TRequestStatus &)
- ?Write@RFile@@QAEXHABVTDesC8@@AAVTRequestStatus@@@Z @ 219 NONAME ; public: void __thiscall RFile::Write(int,class TDesC8 const &,class TRequestStatus &)
- ?Write@RFile@@QAEXHABVTDesC8@@HAAVTRequestStatus@@@Z @ 220 NONAME ; public: void __thiscall RFile::Write(int,class TDesC8 const &,int,class TRequestStatus &)
- ?Write@_RRawDisk@@QAEHHAAVTDesC8@@@Z @ 221 NONAME ; public: int __thiscall _RRawDisk::Write(int,class TDesC8 &)
- ?Write@TFileText@@QAEHABVTDesC16@@@Z @ 222 NONAME ; public: int __thiscall TFileText::Write(class TDesC16 const &)
- ?DebugNotify@RFs@@QAEXHIAAVTRequestStatus@@@Z @ 223 NONAME ; public: void __thiscall RFs::DebugNotify(int,unsigned int,class TRequestStatus &)
- ?NotifyDiskSpace@RFs@@QAEX_JHAAVTRequestStatus@@@Z @ 224 NONAME ; public: void __thiscall RFs::NotifyDiskSpace(__int64,int,class TRequestStatus &)
- ?NotifyDiskSpaceCancel@RFs@@QAEXAAVTRequestStatus@@@Z @ 225 NONAME ; public: void __thiscall RFs::NotifyDiskSpaceCancel(class TRequestStatus &)
- ?NotifyDiskSpaceCancel@RFs@@QAEXXZ @ 226 NONAME ; public: void __thiscall RFs::NotifyDiskSpaceCancel(void)
- ??0TEntry@@QAE@ABV0@@Z @ 227 NONAME ; public: __thiscall TEntry::TEntry(class TEntry const &)
- ??0TEntry@@QAE@XZ @ 228 NONAME ; public: __thiscall TEntry::TEntry(void)
- ??4TEntry@@QAEAAV0@ABV0@@Z @ 229 NONAME ; public: class TEntry & __thiscall TEntry::operator=(class TEntry const &)
- ??0TParse@@QAE@XZ @ 230 NONAME ; public: __thiscall TParse::TParse(void)
- ?Drive@RFile@@QBEHAAHAAVTDriveInfo@@@Z @ 231 NONAME ; public: int __thiscall RFile::Drive(int &,class TDriveInfo &)const
- ?RemountDrive@RFs@@QAEHHPBVTDesC8@@I@Z @ 232 NONAME ; public: int __thiscall RFs::RemountDrive(int,class TDesC8 const *,unsigned int)
- ?MountFileSystemAndScan@RFs@@QBEHABVTDesC16@@HAAH@Z @ 233 NONAME ; public: int __thiscall RFs::MountFileSystemAndScan(class TDesC16 const &,int,int &)const
- ?CreatePrivatePath@RFs@@QAEHH@Z @ 234 NONAME ; public: int __thiscall RFs::CreatePrivatePath(int)
- ?PrivatePath@RFs@@QAEHAAVTDes16@@@Z @ 235 NONAME ; public: int __thiscall RFs::PrivatePath(class TDes16 &)
- ?SetSessionToPrivate@RFs@@QAEHH@Z @ 236 NONAME ; public: int __thiscall RFs::SetSessionToPrivate(int)
- ?FileNamesIdentical@@YAHABVTDesC16@@0@Z @ 237 NONAME ; int __cdecl FileNamesIdentical(class TDesC16 const &,class TDesC16 const &)
- ?AddExtension@RFs@@QAEHABVTDesC16@@@Z @ 238 NONAME ; public: int __thiscall RFs::AddExtension(class TDesC16 const &)
- ?DismountExtension@RFs@@QAEHABVTDesC16@@H@Z @ 239 NONAME ; public: int __thiscall RFs::DismountExtension(class TDesC16 const &,int)
- ?ExtensionName@RFs@@QAEHAAVTDes16@@HH@Z @ 240 NONAME ; public: int __thiscall RFs::ExtensionName(class TDes16 &,int,int)
- ?MountExtension@RFs@@QAEHABVTDesC16@@H@Z @ 241 NONAME ; public: int __thiscall RFs::MountExtension(class TDesC16 const &,int)
- ?MountFileSystem@RFs@@QAEHABVTDesC16@@0H@Z @ 242 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,class TDesC16 const &,int)
- ?RemoveExtension@RFs@@QAEHABVTDesC16@@@Z @ 243 NONAME ; public: int __thiscall RFs::RemoveExtension(class TDesC16 const &)
- ?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z @ 244 NONAME ; public: void __thiscall RFs::StartupInitComplete(class TRequestStatus &)
- ?SetLocalDriveMapping@RFs@@QAEHABVTDesC8@@@Z @ 245 NONAME ; public: int __thiscall RFs::SetLocalDriveMapping(class TDesC8 const &)
- ?ControlIo@RFs@@QAEHHH@Z @ 246 NONAME ; public: int __thiscall RFs::ControlIo(int,int)
- ?ControlIo@RFs@@QAEHHHAAVTDes8@@@Z @ 247 NONAME ; public: int __thiscall RFs::ControlIo(int,int,class TDes8&) ?Adopt@RFile@@QAEHAAVRFs@@AAH@Z @ 246 NONAME ; public: int __thiscall RFile::Adopt(class RFs &,int &)
- ?ControlIo@RFs@@QAEHHHAAVTDes8@@0@Z @ 248 NONAME ; public: int __thiscall RFs::ControlIo(int,int,class TDes8&,class TDes8&)
- ?Adopt@RFile@@QAEHAAVRFs@@H@Z @ 249 NONAME ; public: int __thiscall RFile::Adopt(class RFs &,int)
- ?MountFileSystem@RFs@@QAEHABVTDesC16@@0HH@Z @ 250 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,class TDesC16 const &,int,int)
- ?MountFileSystem@RFs@@QBEHABVTDesC16@@HH@Z @ 251 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,int,int)const
- ?Read@RRawDisk@@QAEH_JAAVTDes8@@@Z @ 252 NONAME ; public: int __thiscall RRawDisk::Read(__int64,class TDes8 &)
- ?Write@RRawDisk@@QAEH_JAAVTDesC8@@@Z @ 253 NONAME ; public: int __thiscall RRawDisk::Write(__int64,class TDesC8 &)
- ?FinaliseDrives@RFs@@QAEHXZ @ 254 NONAME ; public: int __thiscall RFs::FinaliseDrives(void)
- ?SwapFileSystem@RFs@@QBEHABVTDesC16@@0H@Z @ 255 NONAME ; public: int __thiscall RFs::SwapFileSystem(class TDesC16 const &,class TDesC16 const &,int)const
- ?ErasePassword@RFs@@QAEHH@Z @ 256 NONAME ; public: int __thiscall RFs::ErasePassword(int)
- ?GetReserveAccess@RFs@@QAEHH@Z @ 257 NONAME ; public: int __thiscall RFs::GetReserveAccess(int)
- ?ReleaseReserveAccess@RFs@@QAEHH@Z @ 258 NONAME ; public: int __thiscall RFs::ReleaseReserveAccess(int)
- ?ReserveDriveSpace@RFs@@QAEHHH@Z @ 259 NONAME ; public: int __thiscall RFs::ReserveDriveSpace(int,int)
- ?AdoptFromClient@RFile@@QAEHABVRMessage2@@HH@Z @ 260 NONAME ; public: int __thiscall RFile::AdoptFromClient(class RMessage2 const &,int,int)
- ?AdoptFromCreator@RFile@@QAEHHH@Z @ 261 NONAME ; public: int __thiscall RFile::AdoptFromCreator(int,int)
- ?AdoptFromServer@RFile@@QAEHHH@Z @ 262 NONAME ; public: int __thiscall RFile::AdoptFromServer(int,int)
- ?TransferToClient@RFile@@QBEHABVRMessage2@@H@Z @ 263 NONAME ; public: int __thiscall RFile::TransferToClient(class RMessage2 const &,int)const
- ?TransferToProcess@RFile@@QBEHAAVRProcess@@HH@Z @ 264 NONAME ; public: int __thiscall RFile::TransferToProcess(class RProcess &,int,int)const
- ?TransferToServer@RFile@@QBEHAAVTIpcArgs@@HH@Z @ 265 NONAME ; public: int __thiscall RFile::TransferToServer(class TIpcArgs &,int,int)const
- ?Name@RFile@@QBEHAAVTDes16@@@Z @ 266 NONAME ; public: int __thiscall RFile::Name(class TDes16 &)const
- ?Close@RDir@@QAEXXZ @ 267 NONAME ; public: void __thiscall RDir::Close(void)
- ?Close@RFile@@QAEXXZ @ 268 NONAME ; public: void __thiscall RFile::Close(void)
- ?Close@RFormat@@QAEXXZ @ 269 NONAME ; public: void __thiscall RFormat::Close(void)
- ?GetMediaSerialNumber@RFs@@QAEHAAV?$TBuf8@$0EA@@@H@Z @ 270 NONAME ; public: int __thiscall RFs::GetMediaSerialNumber(class TBuf8<64> &,int)
- ?Copy@CFileMan@@QAEHABVRFile@@ABVTDesC16@@I@Z @ 271 NONAME ; public: int __thiscall CFileMan::Copy(class RFile const &,class TDesC16 const &,unsigned int)
- ?Copy@CFileMan@@QAEHABVRFile@@ABVTDesC16@@IAAVTRequestStatus@@@Z @ 272 NONAME ; public: int __thiscall CFileMan::Copy(class RFile const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
- ?FullName@RFile@@QBEHAAVTDes16@@@Z @ 273 NONAME ; public: int __thiscall RFile::FullName(class TDes16 &)const
- ?AddPlugin@RFs@@QBEHABVTDesC16@@@Z @ 274 NONAME ; public: int __thiscall RFs::AddPlugin(class TDesC16 const &)const
- ?Close@RPlugin@@QAEXXZ @ 275 NONAME ; public: void __thiscall RPlugin::Close(void)
- ?DismountPlugin@RFs@@QBEHABVTDesC16@@@Z @ 276 NONAME ; public: int __thiscall RFs::DismountPlugin(class TDesC16 const &)const
- ?DismountPlugin@RFs@@QBEHABVTDesC16@@H@Z @ 277 NONAME ; public: int __thiscall RFs::DismountPlugin(class TDesC16 const &,int)const
- ?DismountPlugin@RFs@@QBEHABVTDesC16@@HH@Z @ 278 NONAME ; public: int __thiscall RFs::DismountPlugin(class TDesC16 const &,int,int)const
- ?DoCancel@RPlugin@@IBEXI@Z @ 279 NONAME ; protected: void __thiscall RPlugin::DoCancel(unsigned int)const
- ?DoControl@RPlugin@@IBEHH@Z @ 280 NONAME ; protected: int __thiscall RPlugin::DoControl(int)const
- ?DoControl@RPlugin@@IBEHHAAVTDes8@@0@Z @ 281 NONAME ; protected: int __thiscall RPlugin::DoControl(int,class TDes8 &,class TDes8 &)const
- ?DoControl@RPlugin@@IBEHHAAVTDes8@@@Z @ 282 NONAME ; protected: int __thiscall RPlugin::DoControl(int,class TDes8 &)const
- ?DoRequest@RPlugin@@IBEXHAAVTRequestStatus@@@Z @ 283 NONAME ; protected: void __thiscall RPlugin::DoRequest(int,class TRequestStatus &)const
- ?DoRequest@RPlugin@@IBEXHAAVTRequestStatus@@AAVTDes8@@1@Z @ 284 NONAME ; protected: void __thiscall RPlugin::DoRequest(int,class TRequestStatus &,class TDes8 &,class TDes8 &)const
- ?DoRequest@RPlugin@@IBEXHAAVTRequestStatus@@AAVTDes8@@@Z @ 285 NONAME ; protected: void __thiscall RPlugin::DoRequest(int,class TRequestStatus &,class TDes8 &)const
- ?MountPlugin@RFs@@QBEHABVTDesC16@@@Z @ 286 NONAME ; public: int __thiscall RFs::MountPlugin(class TDesC16 const &)const
- ?MountPlugin@RFs@@QBEHABVTDesC16@@H@Z @ 287 NONAME ; public: int __thiscall RFs::MountPlugin(class TDesC16 const &,int)const
- ?MountPlugin@RFs@@QBEHABVTDesC16@@HH@Z @ 288 NONAME ; public: int __thiscall RFs::MountPlugin(class TDesC16 const &,int,int)const
- ?Open@RPlugin@@QAEHAAVRFs@@H@Z @ 289 NONAME ; public: int __thiscall RPlugin::Open(class RFs &,int)
- ?PluginName@RFs@@QAEHAAVTDes16@@HH@Z @ 290 NONAME ; public: int __thiscall RFs::PluginName(class TDes16 &,int,int)
- ?RemovePlugin@RFs@@QBEHABVTDesC16@@@Z @ 291 NONAME ; public: int __thiscall RFs::RemovePlugin(class TDesC16 const &)const
- ?AllowDismount@RFs@@QBEHH@Z @ 292 NONAME ; public: int __thiscall RFs::AllowDismount(int)const
- ?NotifyDismount@RFs@@QBEXHAAVTRequestStatus@@W4TNotifyDismountMode@@@Z @ 293 NONAME ; public: void __thiscall RFs::NotifyDismount(int,class TRequestStatus &,enum TNotifyDismountMode)const
- ?NotifyDismountCancel@RFs@@QBEXAAVTRequestStatus@@@Z @ 294 NONAME ; public: void __thiscall RFs::NotifyDismountCancel(class TRequestStatus &)const
- ?NotifyDismountCancel@RFs@@QBEXXZ @ 295 NONAME ; public: void __thiscall RFs::NotifyDismountCancel(void)const
- ?Open@RFormat@@QAEHAAVRFs@@ABVTDesC16@@IAAHABVTDesC8@@@Z @ 296 NONAME ; public: int __thiscall RFormat::Open(class RFs &,class TDesC16 const &,unsigned int,int &,class TDesC8 const &)
- ?SetStartupConfiguration@RFs@@QBEHHPAX0@Z @ 297 NONAME ; public: int __thiscall RFs::SetStartupConfiguration(int,void *,void *)const
- ?ReadCancel@RFile@@QBEXAAVTRequestStatus@@@Z @ 298 NONAME ; public: void __thiscall RFile::ReadCancel(class TRequestStatus &)const
- ?ReadCancel@RFile@@QBEXXZ @ 299 NONAME ; public: void __thiscall RFile::ReadCancel(void)const
- ?MountFileSystemAndScan@RFs@@QBEHABVTDesC16@@0HAAH@Z @ 300 NONAME ; public: int __thiscall RFs::MountFileSystemAndScan(class TDesC16 const &,class TDesC16 const &,int,int &)const
- ?SetNotifyChange@RFs@@QAEHH@Z @ 301 NONAME ; public: int __thiscall RFs::SetNotifyChange(int)
- ?AddCompositeMount@RFs@@QBEHABVTDesC16@@HHH@Z @ 302 NONAME ; int RFs::AddCompositeMount(class TDesC16 const &, int, int, int) const
- ?Flush@RFile@@QAEXAAVTRequestStatus@@@Z @ 303 NONAME ; public: void __thiscall RFile::Flush(class TRequestStatus &)
- ?GetSystemDrive@RFs@@SA?AW4TDriveNumber@@XZ @ 304 NONAME ; public: static enum TDriveNumber __cdecl RFs::GetSystemDrive(void)
- ??0TBlockMapEntry@@QAE@XZ @ 305 NONAME ; public: __thiscall TBlockMapEntry::TBlockMapEntry(void)
- ?BlockMap@RFile@@QBEHAAUSBlockMapInfo@@AA_J_JH@Z @ 306 NONAME ; public: int __thiscall RFile::BlockMap(struct SBlockMapInfo &,__int64 &,__int64,int)const
- ?SetNumberOfBlocks@TBlockMapEntry@@QAEXI@Z @ 307 NONAME ; public: void __thiscall TBlockMapEntry::SetNumberOfBlocks(unsigned int)
- ?SetStartBlock@TBlockMapEntry@@QAEXI@Z @ 308 NONAME ; public: void __thiscall TBlockMapEntry::SetStartBlock(unsigned int)
- ?Clamp@RFileClamp@@QAEHAAVRFile@@@Z @ 309 NONAME ; public: int __thiscall RFileClamp::Clamp(class RFile &)
- ?Close@RFileClamp@@QAEHAAVRFs@@@Z @ 310 NONAME ; public: int __thiscall RFileClamp::Close(class RFs &)
- ?FileSystemSubType@RFs@@QBEHHAAVTDes16@@@Z @ 311 NONAME ; public: int __thiscall RFs::FileSystemSubType(int,class TDes16 &)const
- ?InitialisePropertiesFile@RFs@@QBEHABVTPtrC8@@@Z @ 312 NONAME ; public: int __thiscall RFs::InitialisePropertiesFile(class TPtrC8 const &)const
- ?QueryVolumeInfoExt@RFs@@QBEHHW4TQueryVolumeInfoExtCmd@@AAVTDes8@@@Z @ 313 NONAME ; public: int __thiscall RFs::QueryVolumeInfoExt(int,enum TQueryVolumeInfoExtCmd,class TDes8 &)const
- ?VolumeIOParam@RFs@@QBEHHAAVTVolumeIOParamInfo@@@Z @ 314 NONAME ; public: int __thiscall RFs::VolumeIOParam(int,class TVolumeIOParamInfo &)const
- ?GetSystemDriveChar@RFs@@SA?AVTChar@@XZ @ 315 NONAME ; public: static class TChar __cdecl RFs::GetSystemDriveChar(void)
- ?SetSystemDrive@RFs@@QAEHW4TDriveNumber@@@Z @ 316 NONAME ; public: int __thiscall RFs::SetSystemDrive(enum TDriveNumber)
- ?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@I@Z @ 317 NONAME ; public: int __thiscall RFs::DriveList(class TBuf8<26> &,unsigned int)const
- ?SetFindMask@TFindFile@@QAEHI@Z @ 318 NONAME ; public: int __thiscall TFindFile::SetFindMask(unsigned int)
- ?FinaliseDrive@RFs@@QBEHHW4TFinaliseDrvMode@1@@Z @ 319 NONAME ; public: int __thiscall RFs::FinaliseDrive(int,enum RFs::TFinaliseDrvMode)const
- ?Volume@RFs@@QBEXAAVTVolumeInfo@@HAAVTRequestStatus@@@Z @ 320 NONAME ; public: void __thiscall RFs::Volume(class TVolumeInfo &,int,class TRequestStatus &)const
- ?AddProxyDrive@RFs@@QAEHABVTDesC16@@@Z @ 321 NONAME ; public: int __thiscall RFs::AddProxyDrive(class TDesC16 const &)
- ?Caps@RRawDisk@@QAEHAAVTDes8@@@Z @ 322 NONAME ABSENT ; public: int __thiscall RRawDisk::Caps(class TDes8 &)
- ?DismountProxyDrive@RFs@@QAEHI@Z @ 323 NONAME ; public: int __thiscall RFs::DismountProxyDrive(unsigned int)
- ?DoMountProxyDrive@RFs@@AAEHABVTIpcArgs@@@Z @ 324 NONAME ; private: int __thiscall RFs::DoMountProxyDrive(class TIpcArgs const &)
- ?RemoveProxyDrive@RFs@@QAEHABVTDesC16@@@Z @ 325 NONAME ; public: int __thiscall RFs::RemoveProxyDrive(class TDesC16 const &)
- ?ReadFileSection@RFs@@QBEHABVTDesC16@@_JAAVTDes8@@H@Z @ 326 NONAME ; public: int __thiscall RFs::ReadFileSection(class TDesC16 const &,__int64,class TDes8 &,int)const
- ?AdoptFromClient@RFile64@@QAEHABVRMessage2@@HH@Z @ 327 NONAME ; public: int __thiscall RFile64::AdoptFromClient(class RMessage2 const &,int,int)
- ?AdoptFromCreator@RFile64@@QAEHHH@Z @ 328 NONAME ; public: int __thiscall RFile64::AdoptFromCreator(int,int)
- ?AdoptFromServer@RFile64@@QAEHHH@Z @ 329 NONAME ; public: int __thiscall RFile64::AdoptFromServer(int,int)
- ?Create@RFile64@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 330 NONAME ; public: int __thiscall RFile64::Create(class RFs &,class TDesC16 const &,unsigned int)
- ?FileSize@TEntry@@QBE_JXZ @ 331 NONAME ; public: __int64 __thiscall TEntry::FileSize(void)const
- ?Lock@RFile64@@QBEH_J0@Z @ 332 NONAME ; public: int __thiscall RFile64::Lock(__int64,__int64)const
- ?Open@RFile64@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 333 NONAME ; public: int __thiscall RFile64::Open(class RFs &,class TDesC16 const &,unsigned int)
- ?Read@RFile64@@QBEHIAAVTDes8@@@Z @ 334 NONAME ; public: int __thiscall RFile64::Read(unsigned int,class TDes8 &)const
- ?Read@RFile64@@QBEHIAAVTDes8@@H@Z @ 335 NONAME ; public: int __thiscall RFile64::Read(unsigned int,class TDes8 &,int)const
- ?Read@RFile64@@QBEH_JAAVTDes8@@@Z @ 336 NONAME ; public: int __thiscall RFile64::Read(__int64,class TDes8 &)const
- ?Read@RFile64@@QBEH_JAAVTDes8@@H@Z @ 337 NONAME ; public: int __thiscall RFile64::Read(__int64,class TDes8 &,int)const
- ?Read@RFile64@@QBEXIAAVTDes8@@AAVTRequestStatus@@@Z @ 338 NONAME ; public: void __thiscall RFile64::Read(unsigned int,class TDes8 &,class TRequestStatus &)const
- ?Read@RFile64@@QBEXIAAVTDes8@@HAAVTRequestStatus@@@Z @ 339 NONAME ; public: void __thiscall RFile64::Read(unsigned int,class TDes8 &,int,class TRequestStatus &)const
- ?Read@RFile64@@QBEX_JAAVTDes8@@AAVTRequestStatus@@@Z @ 340 NONAME ; public: void __thiscall RFile64::Read(__int64,class TDes8 &,class TRequestStatus &)const
- ?Read@RFile64@@QBEX_JAAVTDes8@@HAAVTRequestStatus@@@Z @ 341 NONAME ; public: void __thiscall RFile64::Read(__int64,class TDes8 &,int,class TRequestStatus &)const
- ?Replace@RFile64@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 342 NONAME ; public: int __thiscall RFile64::Replace(class RFs &,class TDesC16 const &,unsigned int)
- ?Seek@RFile64@@QBEHW4TSeek@@AA_J@Z @ 343 NONAME ; public: int __thiscall RFile64::Seek(enum TSeek,__int64 &)const
- ?SetSize@RFile64@@QAEH_J@Z @ 344 NONAME ; public: int __thiscall RFile64::SetSize(__int64)
- ?Size@RFile64@@QBEHAA_J@Z @ 345 NONAME ; public: int __thiscall RFile64::Size(__int64 &)const
- ?Temp@RFile64@@QAEHAAVRFs@@ABVTDesC16@@AAV?$TBuf@$0BAA@@@I@Z @ 346 NONAME ; public: int __thiscall RFile64::Temp(class RFs &,class TDesC16 const &,class TBuf<256> &,unsigned int)
- ?UnLock@RFile64@@QBEH_J0@Z @ 347 NONAME ; public: int __thiscall RFile64::UnLock(__int64,__int64)const
- ?Write@RFile64@@QAEHIABVTDesC8@@@Z @ 348 NONAME ; public: int __thiscall RFile64::Write(unsigned int,class TDesC8 const &)
- ?Write@RFile64@@QAEHIABVTDesC8@@H@Z @ 349 NONAME ; public: int __thiscall RFile64::Write(unsigned int,class TDesC8 const &,int)
- ?Write@RFile64@@QAEH_JABVTDesC8@@@Z @ 350 NONAME ; public: int __thiscall RFile64::Write(__int64,class TDesC8 const &)
- ?Write@RFile64@@QAEH_JABVTDesC8@@H@Z @ 351 NONAME ; public: int __thiscall RFile64::Write(__int64,class TDesC8 const &,int)
- ?Write@RFile64@@QAEXIABVTDesC8@@AAVTRequestStatus@@@Z @ 352 NONAME ; public: void __thiscall RFile64::Write(unsigned int,class TDesC8 const &,class TRequestStatus &)
- ?Write@RFile64@@QAEXIABVTDesC8@@HAAVTRequestStatus@@@Z @ 353 NONAME ; public: void __thiscall RFile64::Write(unsigned int,class TDesC8 const &,int,class TRequestStatus &)
- ?Write@RFile64@@QAEX_JABVTDesC8@@AAVTRequestStatus@@@Z @ 354 NONAME ; public: void __thiscall RFile64::Write(__int64,class TDesC8 const &,class TRequestStatus &)
- ?Write@RFile64@@QAEX_JABVTDesC8@@HAAVTRequestStatus@@@Z @ 355 NONAME ; public: void __thiscall RFile64::Write(__int64,class TDesC8 const &,int,class TRequestStatus &)
- ?IsValidName@RFs@@QAEHABVTDesC16@@AAVTNameValidParam@1@@Z @ 356 NONAME ; public: int __thiscall RFs::IsValidName(class TDesC16 const &,class RFs::TNameValidParam &)
- ?Close@RFs@@QAEXXZ @ 357 NONAME ; public: void __thiscall RFs::Close(void)
- ??1CFsNotify@@UAE@XZ @ 358 NONAME ; public: virtual __thiscall CFsNotify::~CFsNotify(void)
- ?AddNotification@CFsNotify@@QAEHIABVTDesC16@@0@Z @ 359 NONAME ; public: int __thiscall CFsNotify::AddNotification(unsigned int,class TDesC16 const &,class TDesC16 const &)
- ?Attributes@TFsNotification@@QBEHAAI0@Z @ 360 NONAME ; public: int __thiscall TFsNotification::Attributes(unsigned int &,unsigned int &)const
- ?CancelNotifications@CFsNotify@@QAEHAAVTRequestStatus@@@Z @ 361 NONAME ; public: int __thiscall CFsNotify::CancelNotifications(class TRequestStatus &)
- ?FileSize@TFsNotification@@QBEHAA_J@Z @ 362 NONAME ; public: int __thiscall TFsNotification::FileSize(__int64 &)const
- ?NewL@CFsNotify@@SAPAV1@AAVRFs@@H@Z @ 363 NONAME ; public: static class CFsNotify * __cdecl CFsNotify::NewL(class RFs &,int)
- ?NewName@TFsNotification@@QBEHAAVTPtrC16@@@Z @ 364 NONAME ; public: int __thiscall TFsNotification::NewName(class TPtrC16 &)const
- ?NextNotification@CFsNotify@@QAEPBVTFsNotification@@XZ @ 365 NONAME ; public: class TFsNotification const * __thiscall CFsNotify::NextNotification(void)
- ?NotificationType@TFsNotification@@QBE?AW4TFsNotificationType@1@XZ @ 366 NONAME ; public: enum TFsNotification::TFsNotificationType __thiscall TFsNotification::NotificationType(void)const
- ?Path@TFsNotification@@QBEHAAVTPtrC16@@@Z @ 367 NONAME ; public: int __thiscall TFsNotification::Path(class TPtrC16 &)const
- ?RemoveNotifications@CFsNotify@@QAEHXZ @ 368 NONAME ; public: int __thiscall CFsNotify::RemoveNotifications(void)
- ?RequestNotifications@CFsNotify@@QAEHAAVTRequestStatus@@@Z @ 369 NONAME ; public: int __thiscall CFsNotify::RequestNotifications(class TRequestStatus &)
- ?SupportedFileSystemName@RFs@@QBEHAAVTDes16@@HH@Z @ 370 NONAME ; public: int __thiscall RFs::SupportedFileSystemName(class TDes16 &,int,int)const
+ ??0CDir@@IAE@XZ @ 1 NONAME ; protected: __thiscall CDir::CDir(void)
+ ??0CFileBase@@IAE@AAVRFs@@@Z @ 2 NONAME ; protected: __thiscall CFileBase::CFileBase(class RFs &)
+ ??0TDriveUnit@@QAE@ABVTDesC16@@@Z @ 3 NONAME ; public: __thiscall TDriveUnit::TDriveUnit(class TDesC16 const &)
+ ??0TDriveUnit@@QAE@H@Z @ 4 NONAME ; public: __thiscall TDriveUnit::TDriveUnit(int)
+ ??0TEntryArray@@QAE@XZ @ 5 NONAME ; public: __thiscall TEntryArray::TEntryArray(void)
+ ??0TFileText@@QAE@XZ @ 6 NONAME ; public: __thiscall TFileText::TFileText(void)
+ ??0TFindFile@@QAE@AAVRFs@@@Z @ 7 NONAME ; public: __thiscall TFindFile::TFindFile(class RFs &)
+ ??0TOpenFileScan@@QAE@AAVRFs@@@Z @ 8 NONAME ; public: __thiscall TOpenFileScan::TOpenFileScan(class RFs &)
+ ??0TParseBase@@QAE@XZ @ 9 NONAME ; public: __thiscall TParseBase::TParseBase(void)
+ ??0TParsePtr@@QAE@AAVTDes16@@@Z @ 10 NONAME ; public: __thiscall TParsePtr::TParsePtr(class TDes16 &)
+ ??0TParsePtrC@@QAE@ABVTDesC16@@@Z @ 11 NONAME ; public: __thiscall TParsePtrC::TParsePtrC(class TDesC16 const &)
+ ??0TVolumeInfo@@QAE@XZ @ 12 NONAME ; public: __thiscall TVolumeInfo::TVolumeInfo(void)
+ ??1CDir@@UAE@XZ @ 13 NONAME ; public: virtual __thiscall CDir::~CDir(void)
+ ??1CDirScan@@UAE@XZ @ 14 NONAME ; public: virtual __thiscall CDirScan::~CDirScan(void)
+ ??1CFileBase@@MAE@XZ @ 15 NONAME ; protected: virtual __thiscall CFileBase::~CFileBase(void)
+ ??4TDriveUnit@@QAEAAV0@ABVTDesC16@@@Z @ 16 NONAME ; public: class TDriveUnit & __thiscall TDriveUnit::operator=(class TDesC16 const &)
+ ??4TDriveUnit@@QAEAAV0@H@Z @ 17 NONAME ; public: class TDriveUnit & __thiscall TDriveUnit::operator=(int)
+ ??ACDir@@QBEABVTEntry@@H@Z @ 18 NONAME ; public: class TEntry const & __thiscall CDir::operator[](int)const
+ ??ATEntryArray@@QBEABVTEntry@@H@Z @ 19 NONAME ; public: class TEntry const & __thiscall TEntryArray::operator[](int)const
+ ?AbbreviatedPath@CDirScan@@QAE?AVTPtrC16@@XZ @ 20 NONAME ; public: class TPtrC16 __thiscall CDirScan::AbbreviatedPath(void)
+ ?AbbreviatedPath@CFileBase@@QAE?AVTPtrC16@@XZ @ 21 NONAME ; public: class TPtrC16 __thiscall CFileBase::AbbreviatedPath(void)
+ ?AddDir@TParseBase@@QAEHABVTDesC16@@@Z @ 22 NONAME ; public: int __thiscall TParseBase::AddDir(class TDesC16 const &)
+ ?AddFileSystem@RFs@@QBEHABVTDesC16@@@Z @ 23 NONAME ; public: int __thiscall RFs::AddFileSystem(class TDesC16 const &)const
+ ?AddL@CDir@@IAEXABVTEntry@@@Z @ 24 NONAME ; protected: void __thiscall CDir::AddL(class TEntry const &)
+ ?Att@RFile@@QBEHAAI@Z @ 25 NONAME ; public: int __thiscall RFile::Att(unsigned int &)const
+ ?Att@RFs@@QBEHABVTDesC16@@AAI@Z @ 26 NONAME ; public: int __thiscall RFs::Att(class TDesC16 const &,unsigned int &)const
+ ?Attribs@CFileMan@@QAEHABVTDesC16@@IIABVTTime@@I@Z @ 27 NONAME ; public: int __thiscall CFileMan::Attribs(class TDesC16 const &,unsigned int,unsigned int,class TTime const &,unsigned int)
+ ?Attribs@CFileMan@@QAEHABVTDesC16@@IIABVTTime@@IAAVTRequestStatus@@@Z @ 28 NONAME ; public: int __thiscall CFileMan::Attribs(class TDesC16 const &,unsigned int,unsigned int,class TTime const &,unsigned int,class TRequestStatus &)
+ ?BytesTransferredByCopyStep@CFileMan@@QAEHXZ @ 29 NONAME ; public: int __thiscall CFileMan::BytesTransferredByCopyStep(void)
+ ?ChangeMode@RFile@@QAEHW4TFileMode@@@Z @ 30 NONAME ; public: int __thiscall RFile::ChangeMode(enum TFileMode)
+ ?CharToDrive@RFs@@SAHVTChar@@AAH@Z @ 31 NONAME ; public: static int __cdecl RFs::CharToDrive(class TChar,int &)
+ ?CheckDisk@RFs@@QBEHABVTDesC16@@@Z @ 32 NONAME ; public: int __thiscall RFs::CheckDisk(class TDesC16 const &)const
+ ?ClearPassword@RFs@@QAEHHABV?$TBuf8@$0BA@@@@Z @ 33 NONAME ; public: int __thiscall RFs::ClearPassword(int,class TBuf8<16> const &)
+ ?Duplicate@RFile@@QAEHABV1@W4TOwnerType@@@Z @ 34 NONAME ; public: int __thiscall RFile::Duplicate(class RFile const &,enum TOwnerType)
+ ?Close@RRawDisk@@QAEXXZ @ 35 NONAME ; public: void __thiscall RRawDisk::Close(void)
+ ?Compress@CDir@@IAEXXZ @ 36 NONAME ; protected: void __thiscall CDir::Compress(void)
+ ?Connect@RFs@@QAEHH@Z @ 37 NONAME ; public: int __thiscall RFs::Connect(int)
+ ?ConstructL@CFileBase@@IAEXXZ @ 38 NONAME ; protected: void __thiscall CFileBase::ConstructL(void)
+ ?ControlIo@RFs@@QAEHHHPAX0@Z @ 39 NONAME ; public: int __thiscall RFs::ControlIo(int,int,void *,void *)
+ ?Copy@CFileMan@@QAEHABVTDesC16@@0I@Z @ 40 NONAME ; public: int __thiscall CFileMan::Copy(class TDesC16 const &,class TDesC16 const &,unsigned int)
+ ?Copy@CFileMan@@QAEHABVTDesC16@@0IAAVTRequestStatus@@@Z @ 41 NONAME ; public: int __thiscall CFileMan::Copy(class TDesC16 const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
+ ?Count@CDir@@QBEHXZ @ 42 NONAME ; public: int __thiscall CDir::Count(void)const
+ ?Count@TEntryArray@@QBEHXZ @ 43 NONAME ; public: int __thiscall TEntryArray::Count(void)const
+ ?Create@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 44 NONAME ; public: int __thiscall RFile::Create(class RFs &,class TDesC16 const &,unsigned int)
+ ?CurrentAction@CFileMan@@QAE?AW4TAction@1@XZ @ 45 NONAME ; public: enum CFileMan::TAction __thiscall CFileMan::CurrentAction(void)
+ ?CurrentEntry@CFileBase@@QAEABVTEntry@@XZ @ 46 NONAME ; public: class TEntry const & __thiscall CFileBase::CurrentEntry(void)
+ ?DefaultPath@RFs@@QBEHAAVTDes16@@@Z @ 47 NONAME ; public: int __thiscall RFs::DefaultPath(class TDes16 &)const
+ ?Delete@CFileMan@@QAEHABVTDesC16@@I@Z @ 48 NONAME ; public: int __thiscall CFileMan::Delete(class TDesC16 const &,unsigned int)
+ ?Delete@CFileMan@@QAEHABVTDesC16@@IAAVTRequestStatus@@@Z @ 49 NONAME ; public: int __thiscall CFileMan::Delete(class TDesC16 const &,unsigned int,class TRequestStatus &)
+ ?Delete@RFs@@QAEHABVTDesC16@@@Z @ 50 NONAME ; public: int __thiscall RFs::Delete(class TDesC16 const &)
+ ?DismountFileSystem@RFs@@QBEHABVTDesC16@@H@Z @ 51 NONAME ; public: int __thiscall RFs::DismountFileSystem(class TDesC16 const &,int)const
+ ?Drive@RFs@@QBEHAAVTDriveInfo@@H@Z @ 52 NONAME ; public: int __thiscall RFs::Drive(class TDriveInfo &,int)const
+ ?Drive@TParseBase@@QBE?AVTPtrC16@@XZ @ 53 NONAME ; public: class TPtrC16 __thiscall TParseBase::Drive(void)const
+ ?DriveAndPath@TParseBase@@QBE?AVTPtrC16@@XZ @ 54 NONAME ; public: class TPtrC16 __thiscall TParseBase::DriveAndPath(void)const
+ ?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@@Z @ 55 NONAME ; public: int __thiscall RFs::DriveList(class TBuf8<26> &)const
+ ?DrivePresent@TParseBase@@QBEHXZ @ 56 NONAME ; public: int __thiscall TParseBase::DrivePresent(void)const
+ ?DriveToChar@RFs@@SAHHAAVTChar@@@Z @ 57 NONAME ; public: static int __cdecl RFs::DriveToChar(int,class TChar &)
+ ?Entry@RFs@@QBEHABVTDesC16@@AAVTEntry@@@Z @ 58 NONAME ; public: int __thiscall RFs::Entry(class TDesC16 const &,class TEntry &)const
+ ?Ext@TParseBase@@QBE?AVTPtrC16@@XZ @ 59 NONAME ; public: class TPtrC16 __thiscall TParseBase::Ext(void)const
+ ?ExtPresent@TParseBase@@QBEHXZ @ 60 NONAME ; public: int __thiscall TParseBase::ExtPresent(void)const
+ ?ExtractL@CDir@@IAEXHAAPAV1@@Z @ 61 NONAME ; protected: void __thiscall CDir::ExtractL(int,class CDir * &)
+ ?FileSystemName@RFs@@QBEHAAVTDes16@@H@Z @ 62 NONAME ; public: int __thiscall RFs::FileSystemName(class TDes16 &,int)const
+ ?Find@TFindFile@@QAEHXZ @ 63 NONAME ; public: int __thiscall TFindFile::Find(void)
+ ?FindByDir@TFindFile@@QAEHABVTDesC16@@0@Z @ 64 NONAME ; public: int __thiscall TFindFile::FindByDir(class TDesC16 const &,class TDesC16 const &)
+ ?FindByPath@TFindFile@@QAEHABVTDesC16@@PBV2@@Z @ 65 NONAME ; public: int __thiscall TFindFile::FindByPath(class TDesC16 const &,class TDesC16 const *)
+ ?FindWild@TFindFile@@QAEHAAPAVCDir@@@Z @ 66 NONAME ; public: int __thiscall TFindFile::FindWild(class CDir * &)
+ ?FindWildByDir@TFindFile@@QAEHABVTDesC16@@0AAPAVCDir@@@Z @ 67 NONAME ; public: int __thiscall TFindFile::FindWildByDir(class TDesC16 const &,class TDesC16 const &,class CDir * &)
+ ?FindWildByPath@TFindFile@@QAEHABVTDesC16@@PBV2@AAPAVCDir@@@Z @ 68 NONAME ; public: int __thiscall TFindFile::FindWildByPath(class TDesC16 const &,class TDesC16 const *,class CDir * &)
+ ?Flush@RFile@@QAEHXZ @ 69 NONAME ; public: int __thiscall RFile::Flush(void)
+ ?FullName@TParseBase@@QBEABVTDesC16@@XZ @ 70 NONAME ; public: class TDesC16 const & __thiscall TParseBase::FullName(void)const
+ ?FullPath@CDirScan@@QAE?AVTPtrC16@@XZ @ 71 NONAME ; public: class TPtrC16 __thiscall CDirScan::FullPath(void)
+ ?FullPath@CFileBase@@QAE?AVTPtrC16@@XZ @ 72 NONAME ; public: class TPtrC16 __thiscall CFileBase::FullPath(void)
+ ?GetCurrentSource@CFileMan@@QAEXAAV?$TBuf@$0BAA@@@@Z @ 73 NONAME ; public: void __thiscall CFileMan::GetCurrentSource(class TBuf<256> &)
+ ?GetCurrentTarget@CFileMan@@QAEXAAV?$TBuf@$0BAA@@@@Z @ 74 NONAME ; public: void __thiscall CFileMan::GetCurrentTarget(class TBuf<256> &)
+ ?GetDir@RFs@@QBEHABVTDesC16@@ABVTUidType@@IAAPAVCDir@@@Z @ 75 NONAME ; public: int __thiscall RFs::GetDir(class TDesC16 const &,class TUidType const &,unsigned int,class CDir * &)const
+ ?GetDir@RFs@@QBEHABVTDesC16@@IIAAPAVCDir@@1@Z @ 76 NONAME ; public: int __thiscall RFs::GetDir(class TDesC16 const &,unsigned int,unsigned int,class CDir * &,class CDir * &)const
+ ?GetDir@RFs@@QBEHABVTDesC16@@IIAAPAVCDir@@@Z @ 77 NONAME ; public: int __thiscall RFs::GetDir(class TDesC16 const &,unsigned int,unsigned int,class CDir * &)const
+ ?GetDriveName@RFs@@QBEHHAAVTDes16@@@Z @ 78 NONAME ; public: int __thiscall RFs::GetDriveName(int,class TDes16 &)const
+ ?GetLastError@CFileBase@@QAEHXZ @ 79 NONAME ; public: int __thiscall CFileBase::GetLastError(void)
+ ?GetLongName@RFs@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 80 NONAME ; public: int __thiscall RFs::GetLongName(class TDesC16 const &,class TDes16 &)const
+ ?GetMoreInfoAboutError@CFileBase@@QAE?AW4TFileManError@@XZ @ 81 NONAME ; public: enum TFileManError __thiscall CFileBase::GetMoreInfoAboutError(void)
+ ?GetNotifyUser@RFs@@QAEHXZ @ 82 NONAME ; public: int __thiscall RFs::GetNotifyUser(void)
+ ?GetShortName@RFs@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 83 NONAME ; public: int __thiscall RFs::GetShortName(class TDesC16 const &,class TDes16 &)const
+ ?IsArchive@TEntry@@QBEHXZ @ 84 NONAME ; public: int __thiscall TEntry::IsArchive(void)const
+ ?IsDir@TEntry@@QBEHXZ @ 85 NONAME ; public: int __thiscall TEntry::IsDir(void)const
+ ?IsExtWild@TParseBase@@QBEHXZ @ 86 NONAME ; public: int __thiscall TParseBase::IsExtWild(void)const
+ ?IsFileInRom@RFs@@QBEPAEABVTDesC16@@@Z @ 87 NONAME ; public: unsigned char * __thiscall RFs::IsFileInRom(class TDesC16 const &)const
+ ?IsFileOpen@RFs@@QBEHABVTDesC16@@AAH@Z @ 88 NONAME ; public: int __thiscall RFs::IsFileOpen(class TDesC16 const &,int &)const
+ ?IsHidden@TEntry@@QBEHXZ @ 89 NONAME ; public: int __thiscall TEntry::IsHidden(void)const
+ ?IsKMatchAny@TParseBase@@QBEHXZ @ 90 NONAME ; public: int __thiscall TParseBase::IsKMatchAny(void)const
+ ?IsKMatchOne@TParseBase@@QBEHXZ @ 91 NONAME ; public: int __thiscall TParseBase::IsKMatchOne(void)const
+ ?IsNameWild@TParseBase@@QBEHXZ @ 92 NONAME ; public: int __thiscall TParseBase::IsNameWild(void)const
+ ?IsReadOnly@TEntry@@QBEHXZ @ 93 NONAME ; public: int __thiscall TEntry::IsReadOnly(void)const
+ ?IsRomAddress@RFs@@SAHPAX@Z @ 94 NONAME ; public: static int __cdecl RFs::IsRomAddress(void *)
+ ?IsRoot@TParseBase@@QBEHXZ @ 95 NONAME ; public: int __thiscall TParseBase::IsRoot(void)const
+ ?IsSystem@TEntry@@QBEHXZ @ 96 NONAME ; public: int __thiscall TEntry::IsSystem(void)const
+ ?IsValidDrive@RFs@@SAHH@Z @ 97 NONAME ; public: static int __cdecl RFs::IsValidDrive(int)
+ ?IsValidName@RFs@@QBEHABVTDesC16@@@Z @ 98 NONAME ; public: int __thiscall RFs::IsValidName(class TDesC16 const &)const
+ ?IsValidName@RFs@@QBEHABVTDesC16@@AAG@Z @ 99 NONAME ; public: int __thiscall RFs::IsValidName(class TDesC16 const &,unsigned short &)const
+ ?IsWild@TParseBase@@QBEHXZ @ 100 NONAME ; public: int __thiscall TParseBase::IsWild(void)const
+ ?LoaderHeapFunction@RFs@@QAEHHPAX0@Z @ 101 NONAME ; public: int __thiscall RFs::LoaderHeapFunction(int,void *,void *)
+ ?Lock@RFile@@QBEHHH@Z @ 102 NONAME ; public: int __thiscall RFile::Lock(int,int)const
+ ?LockDrive@RFs@@QAEHHABV?$TBuf8@$0BA@@@0H@Z @ 103 NONAME ; public: int __thiscall RFs::LockDrive(int,class TBuf8<16> const &,class TBuf8<16> const &,int)
+ ?MkDir@RFs@@QAEHABVTDesC16@@@Z @ 104 NONAME ; public: int __thiscall RFs::MkDir(class TDesC16 const &)
+ ?MkDirAll@RFs@@QAEHABVTDesC16@@@Z @ 105 NONAME ; public: int __thiscall RFs::MkDirAll(class TDesC16 const &)
+ ?Modified@RFile@@QBEHAAVTTime@@@Z @ 106 NONAME ; public: int __thiscall RFile::Modified(class TTime &)const
+ ?Modified@RFs@@QBEHABVTDesC16@@AAVTTime@@@Z @ 107 NONAME ; public: int __thiscall RFs::Modified(class TDesC16 const &,class TTime &)const
+ ?MountFileSystem@RFs@@QBEHABVTDesC16@@H@Z @ 108 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,int)const
+ ?Move@CFileMan@@QAEHABVTDesC16@@0I@Z @ 109 NONAME ; public: int __thiscall CFileMan::Move(class TDesC16 const &,class TDesC16 const &,unsigned int)
+ ?Move@CFileMan@@QAEHABVTDesC16@@0IAAVTRequestStatus@@@Z @ 110 NONAME ; public: int __thiscall CFileMan::Move(class TDesC16 const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
+ ?Name@TDriveUnit@@QBE?AV?$TBuf@$01@@XZ @ 111 NONAME ; public: class TBuf<2> __thiscall TDriveUnit::Name(void)const
+ ?Name@TParseBase@@QBE?AVTPtrC16@@XZ @ 112 NONAME ; public: class TPtrC16 __thiscall TParseBase::Name(void)const
+ ?NameAndExt@TParseBase@@QBE?AVTPtrC16@@XZ @ 113 NONAME ; public: class TPtrC16 __thiscall TParseBase::NameAndExt(void)const
+ ?NameBuf@TParse@@MAEAAVTDes16@@XZ @ 114 NONAME ; protected: virtual class TDes16 & __thiscall TParse::NameBuf(void)
+ ?NameBuf@TParsePtr@@MAEAAVTDes16@@XZ @ 115 NONAME ; protected: virtual class TDes16 & __thiscall TParsePtr::NameBuf(void)
+ ?NameBuf@TParsePtrC@@MAEAAVTDes16@@XZ @ 116 NONAME ; protected: virtual class TDes16 & __thiscall TParsePtrC::NameBuf(void)
+ ?NameBufC@TParse@@MBEABVTDesC16@@XZ @ 117 NONAME ; protected: virtual class TDesC16 const & __thiscall TParse::NameBufC(void)const
+ ?NameBufC@TParsePtr@@MBEABVTDesC16@@XZ @ 118 NONAME ; protected: virtual class TDesC16 const & __thiscall TParsePtr::NameBufC(void)const
+ ?NameBufC@TParsePtrC@@MBEABVTDesC16@@XZ @ 119 NONAME ; protected: virtual class TDesC16 const & __thiscall TParsePtrC::NameBufC(void)const
+ ?NameOrExtPresent@TParseBase@@QBEHXZ @ 120 NONAME ; public: int __thiscall TParseBase::NameOrExtPresent(void)const
+ ?NamePresent@TParseBase@@QBEHXZ @ 121 NONAME ; public: int __thiscall TParseBase::NamePresent(void)const
+ ?NewL@CDir@@KAPAV1@XZ @ 122 NONAME ; protected: static class CDir * __cdecl CDir::NewL(void)
+ ?NewL@CDirScan@@SAPAV1@AAVRFs@@@Z @ 123 NONAME ; public: static class CDirScan * __cdecl CDirScan::NewL(class RFs &)
+ ?NewL@CFileMan@@SAPAV1@AAVRFs@@@Z @ 124 NONAME ; public: static class CFileMan * __cdecl CFileMan::NewL(class RFs &)
+ ?NewL@CFileMan@@SAPAV1@AAVRFs@@PAVMFileManObserver@@@Z @ 125 NONAME ; public: static class CFileMan * __cdecl CFileMan::NewL(class RFs &,class MFileManObserver *)
+ ?NewLC@CDirScan@@SAPAV1@AAVRFs@@@Z @ 126 NONAME ; public: static class CDirScan * __cdecl CDirScan::NewLC(class RFs &)
+ ?Next@RFormat@@QAEHAAH@Z @ 127 NONAME ; public: int __thiscall RFormat::Next(int &)
+ ?Next@RFormat@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 128 NONAME ; public: void __thiscall RFormat::Next(class TPckgBuf<int> &,class TRequestStatus &)
+ ?NextL@CDirScan@@QAEXAAPAVCDir@@@Z @ 129 NONAME ; public: void __thiscall CDirScan::NextL(class CDir * &)
+ ?NextL@TOpenFileScan@@QAEXAAPAVCDir@@@Z @ 130 NONAME ; public: void __thiscall TOpenFileScan::NextL(class CDir * &)
+ ?NotifyChange@RFs@@QAEXW4TNotifyType@@AAVTRequestStatus@@@Z @ 131 NONAME ; public: void __thiscall RFs::NotifyChange(enum TNotifyType,class TRequestStatus &)
+ ?NotifyChange@RFs@@QAEXW4TNotifyType@@AAVTRequestStatus@@ABVTDesC16@@@Z @ 132 NONAME ; public: void __thiscall RFs::NotifyChange(enum TNotifyType,class TRequestStatus &,class TDesC16 const &)
+ ?NotifyChangeCancel@RFs@@QAEXAAVTRequestStatus@@@Z @ 133 NONAME ; public: void __thiscall RFs::NotifyChangeCancel(class TRequestStatus &)
+ ?NotifyChangeCancel@RFs@@QAEXXZ @ 134 NONAME ; public: void __thiscall RFs::NotifyChangeCancel(void)
+ ?NotifyFileManEnded@MFileManObserver@@UAE?AW4TControl@1@XZ @ 135 NONAME ; public: virtual enum MFileManObserver::TControl __thiscall MFileManObserver::NotifyFileManEnded(void)
+ ?NotifyFileManOperation@MFileManObserver@@UAE?AW4TControl@1@XZ @ 136 NONAME ; public: virtual enum MFileManObserver::TControl __thiscall MFileManObserver::NotifyFileManOperation(void)
+ ?NotifyFileManStarted@MFileManObserver@@UAE?AW4TControl@1@XZ @ 137 NONAME ; public: virtual enum MFileManObserver::TControl __thiscall MFileManObserver::NotifyFileManStarted(void)
+ ?Open@RDir@@QAEHAAVRFs@@ABVTDesC16@@ABVTUidType@@@Z @ 138 NONAME ; public: int __thiscall RDir::Open(class RFs &,class TDesC16 const &,class TUidType const &)
+ ?Open@RDir@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 139 NONAME ; public: int __thiscall RDir::Open(class RFs &,class TDesC16 const &,unsigned int)
+ ?Open@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 140 NONAME ; public: int __thiscall RFile::Open(class RFs &,class TDesC16 const &,unsigned int)
+ ?Open@RFormat@@QAEHAAVRFs@@ABVTDesC16@@IAAH@Z @ 141 NONAME ; public: int __thiscall RFormat::Open(class RFs &,class TDesC16 const &,unsigned int,int &)
+ ?Open@RRawDisk@@QAEHAAVRFs@@H@Z @ 142 NONAME ; public: int __thiscall RRawDisk::Open(class RFs &,int)
+ ?Parse@RFs@@QBEHABVTDesC16@@0AAVTParse@@@Z @ 143 NONAME ; public: int __thiscall RFs::Parse(class TDesC16 const &,class TDesC16 const &,class TParse &)const
+ ?Parse@RFs@@QBEHABVTDesC16@@AAVTParse@@@Z @ 144 NONAME ; public: int __thiscall RFs::Parse(class TDesC16 const &,class TParse &)const
+ ?Path@TParseBase@@QBE?AVTPtrC16@@XZ @ 145 NONAME ; public: class TPtrC16 __thiscall TParseBase::Path(void)const
+ ?PathPresent@TParseBase@@QBEHXZ @ 146 NONAME ; public: int __thiscall TParseBase::PathPresent(void)const
+ ?PopDir@TParseBase@@QAEHXZ @ 147 NONAME ; public: int __thiscall TParseBase::PopDir(void)
+ ?Read@RDir@@QBEHAAVTEntry@@@Z @ 148 NONAME ; public: int __thiscall RDir::Read(class TEntry &)const
+ ?Read@RDir@@QBEHAAVTEntryArray@@@Z @ 149 NONAME ; public: int __thiscall RDir::Read(class TEntryArray &)const
+ ?Read@RDir@@QBEXAAV?$TPckg@VTEntry@@@@AAVTRequestStatus@@@Z @ 150 NONAME ; public: void __thiscall RDir::Read(class TPckg<class TEntry> &,class TRequestStatus &)const
+ ?Read@RDir@@QBEXAAVTEntryArray@@AAVTRequestStatus@@@Z @ 151 NONAME ; public: void __thiscall RDir::Read(class TEntryArray &,class TRequestStatus &)const
+ ?Read@RFile@@QBEHAAVTDes8@@@Z @ 152 NONAME ; public: int __thiscall RFile::Read(class TDes8 &)const
+ ?Read@RFile@@QBEHAAVTDes8@@H@Z @ 153 NONAME ; public: int __thiscall RFile::Read(class TDes8 &,int)const
+ ?Read@RFile@@QBEHHAAVTDes8@@@Z @ 154 NONAME ; public: int __thiscall RFile::Read(int,class TDes8 &)const
+ ?Read@RFile@@QBEHHAAVTDes8@@H@Z @ 155 NONAME ; public: int __thiscall RFile::Read(int,class TDes8 &,int)const
+ ?Read@RFile@@QBEXAAVTDes8@@AAVTRequestStatus@@@Z @ 156 NONAME ; public: void __thiscall RFile::Read(class TDes8 &,class TRequestStatus &)const
+ ?Read@RFile@@QBEXAAVTDes8@@HAAVTRequestStatus@@@Z @ 157 NONAME ; public: void __thiscall RFile::Read(class TDes8 &,int,class TRequestStatus &)const
+ ?Read@RFile@@QBEXHAAVTDes8@@AAVTRequestStatus@@@Z @ 158 NONAME ; public: void __thiscall RFile::Read(int,class TDes8 &,class TRequestStatus &)const
+ ?Read@RFile@@QBEXHAAVTDes8@@HAAVTRequestStatus@@@Z @ 159 NONAME ; public: void __thiscall RFile::Read(int,class TDes8 &,int,class TRequestStatus &)const
+ ?Read@_RRawDisk@@QAEHHAAVTDes8@@@Z @ 160 NONAME ; public: int __thiscall _RRawDisk::Read(int,class TDes8 &)
+ ?Read@TFileText@@QAEHAAVTDes16@@@Z @ 161 NONAME ; public: int __thiscall TFileText::Read(class TDes16 &)
+ ?ReadFileSection_RESERVED@RFs@@ABEHABVTDesC16@@HAAVTDes8@@H@Z @ 162 NONAME ; public: int __thiscall RFs::ReadFileSection_RESERVED(class TDesC16 const &,int,class TDes8 &,int)const
+ ?RealName@RFs@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 163 NONAME ; public: int __thiscall RFs::RealName(class TDesC16 const &,class TDes16 &)const
+ ?RemoveFileSystem@RFs@@QBEHABVTDesC16@@@Z @ 164 NONAME ; public: int __thiscall RFs::RemoveFileSystem(class TDesC16 const &)const
+ ?Rename@CFileMan@@QAEHABVTDesC16@@0I@Z @ 165 NONAME ; public: int __thiscall CFileMan::Rename(class TDesC16 const &,class TDesC16 const &,unsigned int)
+ ?Rename@CFileMan@@QAEHABVTDesC16@@0IAAVTRequestStatus@@@Z @ 166 NONAME ; public: int __thiscall CFileMan::Rename(class TDesC16 const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
+ ?Rename@RFile@@QAEHABVTDesC16@@@Z @ 167 NONAME ; public: int __thiscall RFile::Rename(class TDesC16 const &)
+ ?Rename@RFs@@QAEHABVTDesC16@@0@Z @ 168 NONAME ; public: int __thiscall RFs::Rename(class TDesC16 const &,class TDesC16 const &)
+ ?Replace@RFile@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 169 NONAME ; public: int __thiscall RFile::Replace(class RFs &,class TDesC16 const &,unsigned int)
+ ?Replace@RFs@@QAEHABVTDesC16@@0@Z @ 170 NONAME ; public: int __thiscall RFs::Replace(class TDesC16 const &,class TDesC16 const &)
+ ?ResourceCount@RFs@@QBEHXZ @ 171 NONAME ; public: int __thiscall RFs::ResourceCount(void)const
+ ?ResourceCountMarkEnd@RFs@@QBEXXZ @ 172 NONAME ; public: void __thiscall RFs::ResourceCountMarkEnd(void)const
+ ?ResourceCountMarkStart@RFs@@QBEXXZ @ 173 NONAME ; public: void __thiscall RFs::ResourceCountMarkStart(void)const
+ ?RmDir@CFileMan@@QAEHABVTDesC16@@@Z @ 174 NONAME ; public: int __thiscall CFileMan::RmDir(class TDesC16 const &)
+ ?RmDir@CFileMan@@QAEHABVTDesC16@@AAVTRequestStatus@@@Z @ 175 NONAME ; public: int __thiscall CFileMan::RmDir(class TDesC16 const &,class TRequestStatus &)
+ ?RmDir@RFs@@QAEHABVTDesC16@@@Z @ 176 NONAME ; public: int __thiscall RFs::RmDir(class TDesC16 const &)
+ ?RunInSeparateThreadL@CFileBase@@IAEXP6AHPAX@Z@Z @ 177 NONAME ; protected: void __thiscall CFileBase::RunInSeparateThreadL(int (__cdecl*)(void *))
+ ?RunL@CFileBase@@IAEXXZ @ 178 NONAME ; protected: void __thiscall CFileBase::RunL(void)
+ ?ScanDrive@RFs@@QBEHABVTDesC16@@@Z @ 179 NONAME ; public: int __thiscall RFs::ScanDrive(class TDesC16 const &)const
+ ?Seek@RFile@@QBEHW4TSeek@@AAH@Z @ 180 NONAME ; public: int __thiscall RFile::Seek(enum TSeek,int &)const
+ ?Seek@TFileText@@QAEHW4TSeek@@@Z @ 181 NONAME ; public: int __thiscall TFileText::Seek(enum TSeek)
+ ?SessionPath@RFs@@QBEHAAVTDes16@@@Z @ 182 NONAME ; public: int __thiscall RFs::SessionPath(class TDes16 &)const
+ ?Set@RFile@@QAEHABVTTime@@II@Z @ 183 NONAME ; public: int __thiscall RFile::Set(class TTime const &,unsigned int,unsigned int)
+ ?Set@TFileText@@QAEXAAVRFile@@@Z @ 184 NONAME ; public: void __thiscall TFileText::Set(class RFile &)
+ ?Set@TParse@@QAEHABVTDesC16@@PBV2@1@Z @ 185 NONAME ; public: int __thiscall TParse::Set(class TDesC16 const &,class TDesC16 const *,class TDesC16 const *)
+ ?SetAllocFailure@RFs@@QAEHH@Z @ 186 NONAME ; public: int __thiscall RFs::SetAllocFailure(int)
+ ?SetAtt@RFile@@QAEHII@Z @ 187 NONAME ; public: int __thiscall RFile::SetAtt(unsigned int,unsigned int)
+ ?SetAtt@RFs@@QAEHABVTDesC16@@II@Z @ 188 NONAME ; public: int __thiscall RFs::SetAtt(class TDesC16 const &,unsigned int,unsigned int)
+ ?SetDebugRegister@RFs@@QAEHH@Z @ 189 NONAME ; public: int __thiscall RFs::SetDebugRegister(int)
+ ?SetDefaultPath@RFs@@QAEHABVTDesC16@@@Z @ 190 NONAME ; public: int __thiscall RFs::SetDefaultPath(class TDesC16 const &)
+ ?SetDriveName@RFs@@QAEHHABVTDesC16@@@Z @ 191 NONAME ; public: int __thiscall RFs::SetDriveName(int,class TDesC16 const &)
+ ?SetEntry@RFs@@QAEHABVTDesC16@@ABVTTime@@II@Z @ 192 NONAME ; public: int __thiscall RFs::SetEntry(class TDesC16 const &,class TTime const &,unsigned int,unsigned int)
+ ?SetErrorCondition@RFs@@QAEHHH@Z @ 193 NONAME ; public: int __thiscall RFs::SetErrorCondition(int,int)
+ ?SetModified@RFile@@QAEHABVTTime@@@Z @ 194 NONAME ; public: int __thiscall RFile::SetModified(class TTime const &)
+ ?SetModified@RFs@@QAEHABVTDesC16@@ABVTTime@@@Z @ 195 NONAME ; public: int __thiscall RFs::SetModified(class TDesC16 const &,class TTime const &)
+ ?SetNoWild@TParse@@QAEHABVTDesC16@@PBV2@1@Z @ 196 NONAME ; public: int __thiscall TParse::SetNoWild(class TDesC16 const &,class TDesC16 const *,class TDesC16 const *)
+ ?SetNotifyUser@RFs@@QAEXH@Z @ 197 NONAME ; public: void __thiscall RFs::SetNotifyUser(int)
+ ?SetObserver@CFileBase@@QAEXPAVMFileManObserver@@@Z @ 198 NONAME ; public: void __thiscall CFileBase::SetObserver(class MFileManObserver *)
+ ?SetScanDataL@CDirScan@@QAEXABVTDesC16@@IIW4TScanDirection@1@@Z @ 199 NONAME ; public: void __thiscall CDirScan::SetScanDataL(class TDesC16 const &,unsigned int,unsigned int,enum CDirScan::TScanDirection)
+ ?SetSessionPath@RFs@@QAEHABVTDesC16@@@Z @ 200 NONAME ; public: int __thiscall RFs::SetSessionPath(class TDesC16 const &)
+ ?SetSize@RFile@@QAEHH@Z @ 201 NONAME ; public: int __thiscall RFile::SetSize(int)
+ ?SetSubst@RFs@@QAEHABVTDesC16@@H@Z @ 202 NONAME ; public: int __thiscall RFs::SetSubst(class TDesC16 const &,int)
+ ?SetVolumeLabel@RFs@@QAEHABVTDesC16@@H@Z @ 203 NONAME ; public: int __thiscall RFs::SetVolumeLabel(class TDesC16 const &,int)
+ ?Size@RFile@@QBEHAAH@Z @ 204 NONAME ; public: int __thiscall RFile::Size(int &)const
+ ?Sort@CDir@@QAEHI@Z @ 205 NONAME ; public: int __thiscall CDir::Sort(unsigned int)
+ ?Subst@RFs@@QBEHAAVTDes16@@H@Z @ 206 NONAME ; public: int __thiscall RFs::Subst(class TDes16 &,int)const
+ ?Temp@RFile@@QAEHAAVRFs@@ABVTDesC16@@AAV?$TBuf@$0BAA@@@I@Z @ 207 NONAME ; public: int __thiscall RFile::Temp(class RFs &,class TDesC16 const &,class TBuf<256> &,unsigned int)
+ ?ThreadId@TOpenFileScan@@QBE?AVTThreadId@@XZ @ 208 NONAME ; public: class TThreadId __thiscall TOpenFileScan::ThreadId(void)const
+ ?UnLock@RFile@@QBEHHH@Z @ 209 NONAME ; public: int __thiscall RFile::UnLock(int,int)const
+ ?UnlockDrive@RFs@@QAEHHABV?$TBuf8@$0BA@@@H@Z @ 210 NONAME ; public: int __thiscall RFs::UnlockDrive(int,class TBuf8<16> const &,int)
+ ?Version@RFs@@QBE?AVTVersion@@XZ @ 211 NONAME ; public: class TVersion __thiscall RFs::Version(void)const
+ ?Volume@RFs@@QBEHAAVTVolumeInfo@@H@Z @ 212 NONAME ; public: int __thiscall RFs::Volume(class TVolumeInfo &,int)const
+ ?Write@RFile@@QAEHABVTDesC8@@@Z @ 213 NONAME ; public: int __thiscall RFile::Write(class TDesC8 const &)
+ ?Write@RFile@@QAEHABVTDesC8@@H@Z @ 214 NONAME ; public: int __thiscall RFile::Write(class TDesC8 const &,int)
+ ?Write@RFile@@QAEHHABVTDesC8@@@Z @ 215 NONAME ; public: int __thiscall RFile::Write(int,class TDesC8 const &)
+ ?Write@RFile@@QAEHHABVTDesC8@@H@Z @ 216 NONAME ; public: int __thiscall RFile::Write(int,class TDesC8 const &,int)
+ ?Write@RFile@@QAEXABVTDesC8@@AAVTRequestStatus@@@Z @ 217 NONAME ; public: void __thiscall RFile::Write(class TDesC8 const &,class TRequestStatus &)
+ ?Write@RFile@@QAEXABVTDesC8@@HAAVTRequestStatus@@@Z @ 218 NONAME ; public: void __thiscall RFile::Write(class TDesC8 const &,int,class TRequestStatus &)
+ ?Write@RFile@@QAEXHABVTDesC8@@AAVTRequestStatus@@@Z @ 219 NONAME ; public: void __thiscall RFile::Write(int,class TDesC8 const &,class TRequestStatus &)
+ ?Write@RFile@@QAEXHABVTDesC8@@HAAVTRequestStatus@@@Z @ 220 NONAME ; public: void __thiscall RFile::Write(int,class TDesC8 const &,int,class TRequestStatus &)
+ ?Write@_RRawDisk@@QAEHHAAVTDesC8@@@Z @ 221 NONAME ; public: int __thiscall _RRawDisk::Write(int,class TDesC8 &)
+ ?Write@TFileText@@QAEHABVTDesC16@@@Z @ 222 NONAME ; public: int __thiscall TFileText::Write(class TDesC16 const &)
+ ?DebugNotify@RFs@@QAEXHIAAVTRequestStatus@@@Z @ 223 NONAME ; public: void __thiscall RFs::DebugNotify(int,unsigned int,class TRequestStatus &)
+ ?NotifyDiskSpace@RFs@@QAEX_JHAAVTRequestStatus@@@Z @ 224 NONAME ; public: void __thiscall RFs::NotifyDiskSpace(__int64,int,class TRequestStatus &)
+ ?NotifyDiskSpaceCancel@RFs@@QAEXAAVTRequestStatus@@@Z @ 225 NONAME ; public: void __thiscall RFs::NotifyDiskSpaceCancel(class TRequestStatus &)
+ ?NotifyDiskSpaceCancel@RFs@@QAEXXZ @ 226 NONAME ; public: void __thiscall RFs::NotifyDiskSpaceCancel(void)
+ ??0TEntry@@QAE@ABV0@@Z @ 227 NONAME ; public: __thiscall TEntry::TEntry(class TEntry const &)
+ ??0TEntry@@QAE@XZ @ 228 NONAME ; public: __thiscall TEntry::TEntry(void)
+ ??4TEntry@@QAEAAV0@ABV0@@Z @ 229 NONAME ; public: class TEntry & __thiscall TEntry::operator=(class TEntry const &)
+ ??0TParse@@QAE@XZ @ 230 NONAME ; public: __thiscall TParse::TParse(void)
+ ?Drive@RFile@@QBEHAAHAAVTDriveInfo@@@Z @ 231 NONAME ; public: int __thiscall RFile::Drive(int &,class TDriveInfo &)const
+ ?RemountDrive@RFs@@QAEHHPBVTDesC8@@I@Z @ 232 NONAME ; public: int __thiscall RFs::RemountDrive(int,class TDesC8 const *,unsigned int)
+ ?MountFileSystemAndScan@RFs@@QBEHABVTDesC16@@HAAH@Z @ 233 NONAME ; public: int __thiscall RFs::MountFileSystemAndScan(class TDesC16 const &,int,int &)const
+ ?CreatePrivatePath@RFs@@QAEHH@Z @ 234 NONAME ; public: int __thiscall RFs::CreatePrivatePath(int)
+ ?PrivatePath@RFs@@QAEHAAVTDes16@@@Z @ 235 NONAME ; public: int __thiscall RFs::PrivatePath(class TDes16 &)
+ ?SetSessionToPrivate@RFs@@QAEHH@Z @ 236 NONAME ; public: int __thiscall RFs::SetSessionToPrivate(int)
+ ?FileNamesIdentical@@YAHABVTDesC16@@0@Z @ 237 NONAME ; int __cdecl FileNamesIdentical(class TDesC16 const &,class TDesC16 const &)
+ ?AddExtension@RFs@@QAEHABVTDesC16@@@Z @ 238 NONAME ; public: int __thiscall RFs::AddExtension(class TDesC16 const &)
+ ?DismountExtension@RFs@@QAEHABVTDesC16@@H@Z @ 239 NONAME ; public: int __thiscall RFs::DismountExtension(class TDesC16 const &,int)
+ ?ExtensionName@RFs@@QAEHAAVTDes16@@HH@Z @ 240 NONAME ; public: int __thiscall RFs::ExtensionName(class TDes16 &,int,int)
+ ?MountExtension@RFs@@QAEHABVTDesC16@@H@Z @ 241 NONAME ; public: int __thiscall RFs::MountExtension(class TDesC16 const &,int)
+ ?MountFileSystem@RFs@@QAEHABVTDesC16@@0H@Z @ 242 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,class TDesC16 const &,int)
+ ?RemoveExtension@RFs@@QAEHABVTDesC16@@@Z @ 243 NONAME ; public: int __thiscall RFs::RemoveExtension(class TDesC16 const &)
+ ?StartupInitComplete@RFs@@QAEXAAVTRequestStatus@@@Z @ 244 NONAME ; public: void __thiscall RFs::StartupInitComplete(class TRequestStatus &)
+ ?SetLocalDriveMapping@RFs@@QAEHABVTDesC8@@@Z @ 245 NONAME ; public: int __thiscall RFs::SetLocalDriveMapping(class TDesC8 const &)
+ ?ControlIo@RFs@@QAEHHH@Z @ 246 NONAME ; public: int __thiscall RFs::ControlIo(int,int)
+ ?ControlIo@RFs@@QAEHHHAAVTDes8@@@Z @ 247 NONAME ; public: int __thiscall RFs::ControlIo(int,int,class TDes8&) ?Adopt@RFile@@QAEHAAVRFs@@AAH@Z @ 246 NONAME ; public: int __thiscall RFile::Adopt(class RFs &,int &)
+ ?ControlIo@RFs@@QAEHHHAAVTDes8@@0@Z @ 248 NONAME ; public: int __thiscall RFs::ControlIo(int,int,class TDes8&,class TDes8&)
+ ?Adopt@RFile@@QAEHAAVRFs@@H@Z @ 249 NONAME ; public: int __thiscall RFile::Adopt(class RFs &,int)
+ ?MountFileSystem@RFs@@QAEHABVTDesC16@@0HH@Z @ 250 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,class TDesC16 const &,int,int)
+ ?MountFileSystem@RFs@@QBEHABVTDesC16@@HH@Z @ 251 NONAME ; public: int __thiscall RFs::MountFileSystem(class TDesC16 const &,int,int)const
+ ?Read@RRawDisk@@QAEH_JAAVTDes8@@@Z @ 252 NONAME ; public: int __thiscall RRawDisk::Read(__int64,class TDes8 &)
+ ?Write@RRawDisk@@QAEH_JAAVTDesC8@@@Z @ 253 NONAME ; public: int __thiscall RRawDisk::Write(__int64,class TDesC8 &)
+ ?FinaliseDrives@RFs@@QAEHXZ @ 254 NONAME ; public: int __thiscall RFs::FinaliseDrives(void)
+ ?SwapFileSystem@RFs@@QBEHABVTDesC16@@0H@Z @ 255 NONAME ; public: int __thiscall RFs::SwapFileSystem(class TDesC16 const &,class TDesC16 const &,int)const
+ ?ErasePassword@RFs@@QAEHH@Z @ 256 NONAME ; public: int __thiscall RFs::ErasePassword(int)
+ ?GetReserveAccess@RFs@@QAEHH@Z @ 257 NONAME ; public: int __thiscall RFs::GetReserveAccess(int)
+ ?ReleaseReserveAccess@RFs@@QAEHH@Z @ 258 NONAME ; public: int __thiscall RFs::ReleaseReserveAccess(int)
+ ?ReserveDriveSpace@RFs@@QAEHHH@Z @ 259 NONAME ; public: int __thiscall RFs::ReserveDriveSpace(int,int)
+ ?AdoptFromClient@RFile@@QAEHABVRMessage2@@HH@Z @ 260 NONAME ; public: int __thiscall RFile::AdoptFromClient(class RMessage2 const &,int,int)
+ ?AdoptFromCreator@RFile@@QAEHHH@Z @ 261 NONAME ; public: int __thiscall RFile::AdoptFromCreator(int,int)
+ ?AdoptFromServer@RFile@@QAEHHH@Z @ 262 NONAME ; public: int __thiscall RFile::AdoptFromServer(int,int)
+ ?TransferToClient@RFile@@QBEHABVRMessage2@@H@Z @ 263 NONAME ; public: int __thiscall RFile::TransferToClient(class RMessage2 const &,int)const
+ ?TransferToProcess@RFile@@QBEHAAVRProcess@@HH@Z @ 264 NONAME ; public: int __thiscall RFile::TransferToProcess(class RProcess &,int,int)const
+ ?TransferToServer@RFile@@QBEHAAVTIpcArgs@@HH@Z @ 265 NONAME ; public: int __thiscall RFile::TransferToServer(class TIpcArgs &,int,int)const
+ ?Name@RFile@@QBEHAAVTDes16@@@Z @ 266 NONAME ; public: int __thiscall RFile::Name(class TDes16 &)const
+ ?Close@RDir@@QAEXXZ @ 267 NONAME ; public: void __thiscall RDir::Close(void)
+ ?Close@RFile@@QAEXXZ @ 268 NONAME ; public: void __thiscall RFile::Close(void)
+ ?Close@RFormat@@QAEXXZ @ 269 NONAME ; public: void __thiscall RFormat::Close(void)
+ ?GetMediaSerialNumber@RFs@@QAEHAAV?$TBuf8@$0EA@@@H@Z @ 270 NONAME ; public: int __thiscall RFs::GetMediaSerialNumber(class TBuf8<64> &,int)
+ ?Copy@CFileMan@@QAEHABVRFile@@ABVTDesC16@@I@Z @ 271 NONAME ; public: int __thiscall CFileMan::Copy(class RFile const &,class TDesC16 const &,unsigned int)
+ ?Copy@CFileMan@@QAEHABVRFile@@ABVTDesC16@@IAAVTRequestStatus@@@Z @ 272 NONAME ; public: int __thiscall CFileMan::Copy(class RFile const &,class TDesC16 const &,unsigned int,class TRequestStatus &)
+ ?FullName@RFile@@QBEHAAVTDes16@@@Z @ 273 NONAME ; public: int __thiscall RFile::FullName(class TDes16 &)const
+ ?AddPlugin@RFs@@QBEHABVTDesC16@@@Z @ 274 NONAME ; public: int __thiscall RFs::AddPlugin(class TDesC16 const &)const
+ ?Close@RPlugin@@QAEXXZ @ 275 NONAME ; public: void __thiscall RPlugin::Close(void)
+ ?DismountPlugin@RFs@@QBEHABVTDesC16@@@Z @ 276 NONAME ; public: int __thiscall RFs::DismountPlugin(class TDesC16 const &)const
+ ?DismountPlugin@RFs@@QBEHABVTDesC16@@H@Z @ 277 NONAME ; public: int __thiscall RFs::DismountPlugin(class TDesC16 const &,int)const
+ ?DismountPlugin@RFs@@QBEHABVTDesC16@@HH@Z @ 278 NONAME ; public: int __thiscall RFs::DismountPlugin(class TDesC16 const &,int,int)const
+ ?DoCancel@RPlugin@@IBEXI@Z @ 279 NONAME ; protected: void __thiscall RPlugin::DoCancel(unsigned int)const
+ ?DoControl@RPlugin@@IBEHH@Z @ 280 NONAME ; protected: int __thiscall RPlugin::DoControl(int)const
+ ?DoControl@RPlugin@@IBEHHAAVTDes8@@0@Z @ 281 NONAME ; protected: int __thiscall RPlugin::DoControl(int,class TDes8 &,class TDes8 &)const
+ ?DoControl@RPlugin@@IBEHHAAVTDes8@@@Z @ 282 NONAME ; protected: int __thiscall RPlugin::DoControl(int,class TDes8 &)const
+ ?DoRequest@RPlugin@@IBEXHAAVTRequestStatus@@@Z @ 283 NONAME ; protected: void __thiscall RPlugin::DoRequest(int,class TRequestStatus &)const
+ ?DoRequest@RPlugin@@IBEXHAAVTRequestStatus@@AAVTDes8@@1@Z @ 284 NONAME ; protected: void __thiscall RPlugin::DoRequest(int,class TRequestStatus &,class TDes8 &,class TDes8 &)const
+ ?DoRequest@RPlugin@@IBEXHAAVTRequestStatus@@AAVTDes8@@@Z @ 285 NONAME ; protected: void __thiscall RPlugin::DoRequest(int,class TRequestStatus &,class TDes8 &)const
+ ?MountPlugin@RFs@@QBEHABVTDesC16@@@Z @ 286 NONAME ; public: int __thiscall RFs::MountPlugin(class TDesC16 const &)const
+ ?MountPlugin@RFs@@QBEHABVTDesC16@@H@Z @ 287 NONAME ; public: int __thiscall RFs::MountPlugin(class TDesC16 const &,int)const
+ ?MountPlugin@RFs@@QBEHABVTDesC16@@HH@Z @ 288 NONAME ; public: int __thiscall RFs::MountPlugin(class TDesC16 const &,int,int)const
+ ?Open@RPlugin@@QAEHAAVRFs@@H@Z @ 289 NONAME ; public: int __thiscall RPlugin::Open(class RFs &,int)
+ ?PluginName@RFs@@QAEHAAVTDes16@@HH@Z @ 290 NONAME ; public: int __thiscall RFs::PluginName(class TDes16 &,int,int)
+ ?RemovePlugin@RFs@@QBEHABVTDesC16@@@Z @ 291 NONAME ; public: int __thiscall RFs::RemovePlugin(class TDesC16 const &)const
+ ?AllowDismount@RFs@@QBEHH@Z @ 292 NONAME ; public: int __thiscall RFs::AllowDismount(int)const
+ ?NotifyDismount@RFs@@QBEXHAAVTRequestStatus@@W4TNotifyDismountMode@@@Z @ 293 NONAME ; public: void __thiscall RFs::NotifyDismount(int,class TRequestStatus &,enum TNotifyDismountMode)const
+ ?NotifyDismountCancel@RFs@@QBEXAAVTRequestStatus@@@Z @ 294 NONAME ; public: void __thiscall RFs::NotifyDismountCancel(class TRequestStatus &)const
+ ?NotifyDismountCancel@RFs@@QBEXXZ @ 295 NONAME ; public: void __thiscall RFs::NotifyDismountCancel(void)const
+ ?Open@RFormat@@QAEHAAVRFs@@ABVTDesC16@@IAAHABVTDesC8@@@Z @ 296 NONAME ; public: int __thiscall RFormat::Open(class RFs &,class TDesC16 const &,unsigned int,int &,class TDesC8 const &)
+ ?SetStartupConfiguration@RFs@@QBEHHPAX0@Z @ 297 NONAME ; public: int __thiscall RFs::SetStartupConfiguration(int,void *,void *)const
+ ?ReadCancel@RFile@@QBEXAAVTRequestStatus@@@Z @ 298 NONAME ; public: void __thiscall RFile::ReadCancel(class TRequestStatus &)const
+ ?ReadCancel@RFile@@QBEXXZ @ 299 NONAME ; public: void __thiscall RFile::ReadCancel(void)const
+ ?MountFileSystemAndScan@RFs@@QBEHABVTDesC16@@0HAAH@Z @ 300 NONAME ; public: int __thiscall RFs::MountFileSystemAndScan(class TDesC16 const &,class TDesC16 const &,int,int &)const
+ ?SetNotifyChange@RFs@@QAEHH@Z @ 301 NONAME ; public: int __thiscall RFs::SetNotifyChange(int)
+ ?AddCompositeMount@RFs@@QBEHABVTDesC16@@HHH@Z @ 302 NONAME ; int RFs::AddCompositeMount(class TDesC16 const &, int, int, int) const
+ ?Flush@RFile@@QAEXAAVTRequestStatus@@@Z @ 303 NONAME ; public: void __thiscall RFile::Flush(class TRequestStatus &)
+ ?GetSystemDrive@RFs@@SA?AW4TDriveNumber@@XZ @ 304 NONAME ; public: static enum TDriveNumber __cdecl RFs::GetSystemDrive(void)
+ ??0TBlockMapEntry@@QAE@XZ @ 305 NONAME ; public: __thiscall TBlockMapEntry::TBlockMapEntry(void)
+ ?BlockMap@RFile@@QBEHAAUSBlockMapInfo@@AA_J_JH@Z @ 306 NONAME ; public: int __thiscall RFile::BlockMap(struct SBlockMapInfo &,__int64 &,__int64,int)const
+ ?SetNumberOfBlocks@TBlockMapEntry@@QAEXI@Z @ 307 NONAME ; public: void __thiscall TBlockMapEntry::SetNumberOfBlocks(unsigned int)
+ ?SetStartBlock@TBlockMapEntry@@QAEXI@Z @ 308 NONAME ; public: void __thiscall TBlockMapEntry::SetStartBlock(unsigned int)
+ ?Clamp@RFileClamp@@QAEHAAVRFile@@@Z @ 309 NONAME ; public: int __thiscall RFileClamp::Clamp(class RFile &)
+ ?Close@RFileClamp@@QAEHAAVRFs@@@Z @ 310 NONAME ; public: int __thiscall RFileClamp::Close(class RFs &)
+ ?FileSystemSubType@RFs@@QBEHHAAVTDes16@@@Z @ 311 NONAME ; public: int __thiscall RFs::FileSystemSubType(int,class TDes16 &)const
+ ?InitialisePropertiesFile@RFs@@QBEHABVTPtrC8@@@Z @ 312 NONAME ; public: int __thiscall RFs::InitialisePropertiesFile(class TPtrC8 const &)const
+ ?QueryVolumeInfoExt@RFs@@QBEHHW4TQueryVolumeInfoExtCmd@@AAVTDes8@@@Z @ 313 NONAME ; public: int __thiscall RFs::QueryVolumeInfoExt(int,enum TQueryVolumeInfoExtCmd,class TDes8 &)const
+ ?VolumeIOParam@RFs@@QBEHHAAVTVolumeIOParamInfo@@@Z @ 314 NONAME ; public: int __thiscall RFs::VolumeIOParam(int,class TVolumeIOParamInfo &)const
+ ?GetSystemDriveChar@RFs@@SA?AVTChar@@XZ @ 315 NONAME ; public: static class TChar __cdecl RFs::GetSystemDriveChar(void)
+ ?SetSystemDrive@RFs@@QAEHW4TDriveNumber@@@Z @ 316 NONAME ; public: int __thiscall RFs::SetSystemDrive(enum TDriveNumber)
+ ?DriveList@RFs@@QBEHAAV?$TBuf8@$0BK@@@I@Z @ 317 NONAME ; public: int __thiscall RFs::DriveList(class TBuf8<26> &,unsigned int)const
+ ?SetFindMask@TFindFile@@QAEHI@Z @ 318 NONAME ; public: int __thiscall TFindFile::SetFindMask(unsigned int)
+ ?FinaliseDrive@RFs@@QBEHHW4TFinaliseDrvMode@1@@Z @ 319 NONAME ; public: int __thiscall RFs::FinaliseDrive(int,enum RFs::TFinaliseDrvMode)const
+ ?Volume@RFs@@QBEXAAVTVolumeInfo@@HAAVTRequestStatus@@@Z @ 320 NONAME ; public: void __thiscall RFs::Volume(class TVolumeInfo &,int,class TRequestStatus &)const
+ ?AddProxyDrive@RFs@@QAEHABVTDesC16@@@Z @ 321 NONAME ; public: int __thiscall RFs::AddProxyDrive(class TDesC16 const &)
+ ?Caps@RRawDisk@@QAEHAAVTDes8@@@Z @ 322 NONAME ABSENT ; public: int __thiscall RRawDisk::Caps(class TDes8 &)
+ ?DismountProxyDrive@RFs@@QAEHI@Z @ 323 NONAME ; public: int __thiscall RFs::DismountProxyDrive(unsigned int)
+ ?DoMountProxyDrive@RFs@@AAEHABVTIpcArgs@@@Z @ 324 NONAME ; private: int __thiscall RFs::DoMountProxyDrive(class TIpcArgs const &)
+ ?RemoveProxyDrive@RFs@@QAEHABVTDesC16@@@Z @ 325 NONAME ; public: int __thiscall RFs::RemoveProxyDrive(class TDesC16 const &)
+ ?ReadFileSection@RFs@@QBEHABVTDesC16@@_JAAVTDes8@@H@Z @ 326 NONAME ; public: int __thiscall RFs::ReadFileSection(class TDesC16 const &,__int64,class TDes8 &,int)const
+ ?AdoptFromClient@RFile64@@QAEHABVRMessage2@@HH@Z @ 327 NONAME ; public: int __thiscall RFile64::AdoptFromClient(class RMessage2 const &,int,int)
+ ?AdoptFromCreator@RFile64@@QAEHHH@Z @ 328 NONAME ; public: int __thiscall RFile64::AdoptFromCreator(int,int)
+ ?AdoptFromServer@RFile64@@QAEHHH@Z @ 329 NONAME ; public: int __thiscall RFile64::AdoptFromServer(int,int)
+ ?Create@RFile64@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 330 NONAME ; public: int __thiscall RFile64::Create(class RFs &,class TDesC16 const &,unsigned int)
+ ?FileSize@TEntry@@QBE_JXZ @ 331 NONAME ; public: __int64 __thiscall TEntry::FileSize(void)const
+ ?Lock@RFile64@@QBEH_J0@Z @ 332 NONAME ; public: int __thiscall RFile64::Lock(__int64,__int64)const
+ ?Open@RFile64@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 333 NONAME ; public: int __thiscall RFile64::Open(class RFs &,class TDesC16 const &,unsigned int)
+ ?Read@RFile64@@QBEHIAAVTDes8@@@Z @ 334 NONAME ; public: int __thiscall RFile64::Read(unsigned int,class TDes8 &)const
+ ?Read@RFile64@@QBEHIAAVTDes8@@H@Z @ 335 NONAME ; public: int __thiscall RFile64::Read(unsigned int,class TDes8 &,int)const
+ ?Read@RFile64@@QBEH_JAAVTDes8@@@Z @ 336 NONAME ; public: int __thiscall RFile64::Read(__int64,class TDes8 &)const
+ ?Read@RFile64@@QBEH_JAAVTDes8@@H@Z @ 337 NONAME ; public: int __thiscall RFile64::Read(__int64,class TDes8 &,int)const
+ ?Read@RFile64@@QBEXIAAVTDes8@@AAVTRequestStatus@@@Z @ 338 NONAME ; public: void __thiscall RFile64::Read(unsigned int,class TDes8 &,class TRequestStatus &)const
+ ?Read@RFile64@@QBEXIAAVTDes8@@HAAVTRequestStatus@@@Z @ 339 NONAME ; public: void __thiscall RFile64::Read(unsigned int,class TDes8 &,int,class TRequestStatus &)const
+ ?Read@RFile64@@QBEX_JAAVTDes8@@AAVTRequestStatus@@@Z @ 340 NONAME ; public: void __thiscall RFile64::Read(__int64,class TDes8 &,class TRequestStatus &)const
+ ?Read@RFile64@@QBEX_JAAVTDes8@@HAAVTRequestStatus@@@Z @ 341 NONAME ; public: void __thiscall RFile64::Read(__int64,class TDes8 &,int,class TRequestStatus &)const
+ ?Replace@RFile64@@QAEHAAVRFs@@ABVTDesC16@@I@Z @ 342 NONAME ; public: int __thiscall RFile64::Replace(class RFs &,class TDesC16 const &,unsigned int)
+ ?Seek@RFile64@@QBEHW4TSeek@@AA_J@Z @ 343 NONAME ; public: int __thiscall RFile64::Seek(enum TSeek,__int64 &)const
+ ?SetSize@RFile64@@QAEH_J@Z @ 344 NONAME ; public: int __thiscall RFile64::SetSize(__int64)
+ ?Size@RFile64@@QBEHAA_J@Z @ 345 NONAME ; public: int __thiscall RFile64::Size(__int64 &)const
+ ?Temp@RFile64@@QAEHAAVRFs@@ABVTDesC16@@AAV?$TBuf@$0BAA@@@I@Z @ 346 NONAME ; public: int __thiscall RFile64::Temp(class RFs &,class TDesC16 const &,class TBuf<256> &,unsigned int)
+ ?UnLock@RFile64@@QBEH_J0@Z @ 347 NONAME ; public: int __thiscall RFile64::UnLock(__int64,__int64)const
+ ?Write@RFile64@@QAEHIABVTDesC8@@@Z @ 348 NONAME ; public: int __thiscall RFile64::Write(unsigned int,class TDesC8 const &)
+ ?Write@RFile64@@QAEHIABVTDesC8@@H@Z @ 349 NONAME ; public: int __thiscall RFile64::Write(unsigned int,class TDesC8 const &,int)
+ ?Write@RFile64@@QAEH_JABVTDesC8@@@Z @ 350 NONAME ; public: int __thiscall RFile64::Write(__int64,class TDesC8 const &)
+ ?Write@RFile64@@QAEH_JABVTDesC8@@H@Z @ 351 NONAME ; public: int __thiscall RFile64::Write(__int64,class TDesC8 const &,int)
+ ?Write@RFile64@@QAEXIABVTDesC8@@AAVTRequestStatus@@@Z @ 352 NONAME ; public: void __thiscall RFile64::Write(unsigned int,class TDesC8 const &,class TRequestStatus &)
+ ?Write@RFile64@@QAEXIABVTDesC8@@HAAVTRequestStatus@@@Z @ 353 NONAME ; public: void __thiscall RFile64::Write(unsigned int,class TDesC8 const &,int,class TRequestStatus &)
+ ?Write@RFile64@@QAEX_JABVTDesC8@@AAVTRequestStatus@@@Z @ 354 NONAME ; public: void __thiscall RFile64::Write(__int64,class TDesC8 const &,class TRequestStatus &)
+ ?Write@RFile64@@QAEX_JABVTDesC8@@HAAVTRequestStatus@@@Z @ 355 NONAME ; public: void __thiscall RFile64::Write(__int64,class TDesC8 const &,int,class TRequestStatus &)
+ ?IsValidName@RFs@@QAEHABVTDesC16@@AAVTNameValidParam@1@@Z @ 356 NONAME ; public: int __thiscall RFs::IsValidName(class TDesC16 const &,class RFs::TNameValidParam &)
+ ?Close@RFs@@QAEXXZ @ 357 NONAME ; public: void __thiscall RFs::Close(void)
+ ??1CFsNotify@@UAE@XZ @ 358 NONAME ; public: virtual __thiscall CFsNotify::~CFsNotify(void)
+ ?AddNotification@CFsNotify@@QAEHIABVTDesC16@@0@Z @ 359 NONAME ; public: int __thiscall CFsNotify::AddNotification(unsigned int,class TDesC16 const &,class TDesC16 const &)
+ ?Attributes@TFsNotification@@QBEHAAI0@Z @ 360 NONAME ; public: int __thiscall TFsNotification::Attributes(unsigned int &,unsigned int &)const
+ ?CancelNotifications@CFsNotify@@QAEHAAVTRequestStatus@@@Z @ 361 NONAME ; public: int __thiscall CFsNotify::CancelNotifications(class TRequestStatus &)
+ ?FileSize@TFsNotification@@QBEHAA_J@Z @ 362 NONAME ; public: int __thiscall TFsNotification::FileSize(__int64 &)const
+ ?NewL@CFsNotify@@SAPAV1@AAVRFs@@H@Z @ 363 NONAME ; public: static class CFsNotify * __cdecl CFsNotify::NewL(class RFs &,int)
+ ?NewName@TFsNotification@@QBEHAAVTPtrC16@@@Z @ 364 NONAME ; public: int __thiscall TFsNotification::NewName(class TPtrC16 &)const
+ ?NextNotification@CFsNotify@@QAEPBVTFsNotification@@XZ @ 365 NONAME ; public: class TFsNotification const * __thiscall CFsNotify::NextNotification(void)
+ ?NotificationType@TFsNotification@@QBE?AW4TFsNotificationType@1@XZ @ 366 NONAME ; public: enum TFsNotification::TFsNotificationType __thiscall TFsNotification::NotificationType(void)const
+ ?Path@TFsNotification@@QBEHAAVTPtrC16@@@Z @ 367 NONAME ; public: int __thiscall TFsNotification::Path(class TPtrC16 &)const
+ ?RemoveNotifications@CFsNotify@@QAEHXZ @ 368 NONAME ; public: int __thiscall CFsNotify::RemoveNotifications(void)
+ ?RequestNotifications@CFsNotify@@QAEHAAVTRequestStatus@@@Z @ 369 NONAME ; public: int __thiscall CFsNotify::RequestNotifications(class TRequestStatus &)
+ ?SupportedFileSystemName@RFs@@QBEHAAVTDes16@@HH@Z @ 370 NONAME ; public: int __thiscall RFs::SupportedFileSystemName(class TDes16 &,int,int)const
??1CFsMountHelper@@UAE@XZ @ 371 NONAME ; public: virtual __thiscall CFsMountHelper::~CFsMountHelper(void)
?DismountFileSystem@CFsMountHelper@@QBEHXZ @ 372 NONAME ; public: int __thiscall CFsMountHelper::DismountFileSystem(void)const
?DismountFileSystem@CFsMountHelper@@QBEXAAVTRequestStatus@@W4TFsDismountMode@1@@Z @ 373 NONAME ; public: void __thiscall CFsMountHelper::DismountFileSystem(class TRequestStatus &,enum CFsMountHelper::TFsDismountMode)const
?GetMountProperties@CFsMountHelper@@QAEHXZ @ 374 NONAME ; public: int __thiscall CFsMountHelper::GetMountProperties(void)
?MountFileSystem@CFsMountHelper@@QBEHXZ @ 375 NONAME ; public: int __thiscall CFsMountHelper::MountFileSystem(void)const
?New@CFsMountHelper@@SAPAV1@AAVRFs@@H@Z @ 376 NONAME ; public: static class CFsMountHelper * __cdecl CFsMountHelper::New(class RFs &,int)
+ ?DriveNumber@TFsNotification@@QBEHAAH@Z @ 377 NONAME ; public: int __thiscall TFsNotification::DriveNumber(int &)const
+ ?UID@TFsNotification@@QBEHAAVTUid@@@Z @ 378 NONAME ; public: int __thiscall TFsNotification::UID(class TUid &)const
--- a/userlibandfileserver/fileserver/eabi/efileu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/eabi/efileu.def Mon Nov 01 20:11:36 2010 +0000
@@ -315,4 +315,14 @@
_ZNK9RFsPlugin6VolumeER11TVolumeInfoi @ 314 NONAME
_ZNK7CFileCB16IsSequentialModeEv @ 315 NONAME
_ZN7CFileCB12DirectIOModeERK12RMessagePtr2 @ 316 NONAME
+ _ZN19CFsNotificationInfo10SetNewNameERK7TDesC16 @ 317 NONAME
+ _ZN19CFsNotificationInfo11SetFilesizeEx @ 318 NONAME
+ _ZN19CFsNotificationInfo13SetAttributesEjj @ 319 NONAME
+ _ZN19CFsNotificationInfo13SetSourceNameERK7TDesC16 @ 320 NONAME
+ _ZN19CFsNotificationInfo4FreeERPS_ @ 321 NONAME
+ _ZN19CFsNotificationInfo6SetUidERK4TUid @ 322 NONAME
+ _ZN19CFsNotificationInfo8AllocateERK8CMountCBi @ 323 NONAME
+ _ZN8CMountCB17IssueNotificationEP19CFsNotificationInfo @ 324 NONAME
+ _ZTI19CFsNotificationInfo @ 325 NONAME
+ _ZTV19CFsNotificationInfo @ 326 NONAME
--- a/userlibandfileserver/fileserver/eabi/efsrvu.def Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/eabi/efsrvu.def Mon Nov 01 20:11:36 2010 +0000
@@ -418,4 +418,6 @@
_ZNK14CFsMountHelper15MountFileSystemEv @ 417 NONAME
_ZNK14CFsMountHelper18DismountFileSystemER14TRequestStatusNS_15TFsDismountModeE @ 418 NONAME
_ZNK14CFsMountHelper18DismountFileSystemEv @ 419 NONAME
+ _ZNK15TFsNotification11DriveNumberERi @ 420 NONAME
+ _ZNK15TFsNotification3UIDER4TUid @ 421 NONAME
--- a/userlibandfileserver/fileserver/group/release.txt Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/group/release.txt Mon Nov 01 20:11:36 2010 +0000
@@ -1,3 +1,16 @@
+Version 2.00.4009
+=================
+(Made by fadhliM 25/10/2010)
+
+1. michcox
+ 1. Release Plan 590182 Files deployment over Virtual File System to PlatSim from Carbide
+ REQ 428-2409 PlatSim development environment enhancements
+ SUB 417-70025 Files deployment over Virtual File System to PlatSim from Carbide
+
+2. migubarr
+ 1. ou1cimx1#627410 Atlantisry21x T_NOTIFY F32test case failed on e drive
+
+
Version 2.00.4008
=================
(Made by fadhliM 25/10/2010)
--- a/userlibandfileserver/fileserver/inc/f32fsys.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/inc/f32fsys.h Mon Nov 01 20:11:36 2010 +0000
@@ -564,6 +564,169 @@
friend class TFsControlIo; // for access to LocateDrives()
#endif
};
+
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+ typedef TFsNotification::TFsNotificationType TNotificationType;
+#else
+ typedef TInt TNotificationType;
+#endif
+__ASSERT_COMPILE(sizeof(TNotificationType) == sizeof(TInt));
+
+class CFsNotificationInfoBody; //Forward-declaration
+class CFsClientMessageRequest; //Forward-declaration
+class TParsePtrC; //Forward-declaration
+template <class T> class CFsPool; //Forward-declaration
+
+class CFsNotificationInfo : public CBase
+ {
+public:
+
+ /**
+ * For construction from File systems / CMountCBs
+ *
+ * Provides a CFsNotificationInfo to populate. Populate with the change information.
+ * Supply this object to CMountCB::IssueNotification.
+ *
+ * Once CMountCB::IssueNotification has been called,
+ * free the object by passing it to CFsNotificationInfo::Free
+ * (i.e. Do not call delete on the object)
+ *
+ * @param aMount The mount control block which is issuing this notification
+ * @param aFunction The function as defined in TFsMessage, f32plugin.h, such as EFsFileWrite.
+ *
+ * @return A CFsNotificationInfo* which may be populated with notification info.
+ * Will return NULL in error conditions.
+ *
+ * @see CMountCB::IssueNotification
+ * @see CFsNotificationInfo::Free
+ */
+ IMPORT_C static CFsNotificationInfo* Allocate(const CMountCB& aMount, TInt aFunction);
+
+ /**
+ * Free CFsNotificationInfo objects allocated by CFsNotificationInfo::Allocate with this function.
+ *
+ * On return aNotificationInfo will be set to NULL.
+ */
+ IMPORT_C static void Free(CFsNotificationInfo*& aNotificationInfo);
+
+ //Set data:
+
+ /**
+ * Set the source name for the changes.
+ * This is the name of the file/directory that has changed.
+ *
+ * "drive-letter:" is not to be included.
+ *
+ * e.g. "x:\\myfile.txt" is incorrect
+ * "\\myfile.txt" is correct.
+ */
+ IMPORT_C TInt SetSourceName(const TDesC& aSrc);
+
+ /**
+ * Set the new name for the file.
+ * This is the new name of the file in the case of a rename.
+ *
+ * "drive-letter:" is not to be included.
+ */
+ IMPORT_C TInt SetNewName(const TDesC& aDest);
+
+ /**
+ * In the case of a File Write or File Set Size operation being notified,
+ * the new file size of the file must be provided.
+ */
+ IMPORT_C TInt SetFilesize(TInt64 aFilesize);
+
+ /**
+ * In the case of a change of attributes, the set and cleared attributes must be provided.
+ * (If these are not known, then the current attributes can be provided to aSet and
+ * inverse of the current attributes can be provided to aCleared.
+ */
+ IMPORT_C TInt SetAttributes(TUint aSet,TUint aCleared);
+
+ /**
+ * Set the UID of the process that has caused the change.
+ *
+ */
+ IMPORT_C TInt SetUid(const TUid& aUid);
+
+
+
+ //********************************************
+ // File server internal :
+ //********************************************
+
+ static CFsNotificationInfo* Allocate(CFsMessageRequest& aRequest);
+ static CFsNotificationInfo* Allocate(TInt aFunction, TInt aDrive);
+
+ //Initialise notification object pool
+ static TInt Initialise();
+
+ //Getters
+ TInt SetDriveNumber(TInt aDriveNumber);
+ void SetRequest(CFsRequest*);
+ TInt Function();
+ TInt DriveNumber();
+ TParsePtrC& Source();
+ TParsePtrC& NewName();
+ CFsRequest* Request();
+ TInt64* Data();
+ TUid& Uid();
+ TNotificationType& NotificationType();
+ TBool DestDriveIsSet();
+
+ /*
+ * This is the source length including the drive and colon
+ * which isn't actually saved as part of the stored source
+ */
+ TInt SourceSize();
+ /*
+ * This is the new name length including the drive and colon
+ * which may (or may not (- see below)) be actually part of the stored newname.
+ *
+ * "Drive:" is stored when the notification request originates from a
+ * file server client and the drive could be different to the source's drive.
+ *
+ * In the case of a request originating from a CMountCB::IssueNotification call,
+ * the CMountCB does not know about drive letters and only operates on a single
+ * drive so in this case the "drive:" is missing.
+ */
+ TInt NewNameSize();
+
+ static void NotificationType(TInt aFunction,TNotificationType& aNotificationType);
+ static void PathName(CFsClientMessageRequest& aRequest, TParsePtrC& aName);
+ static void NewPathName(CFsClientMessageRequest& aRequest, TParsePtrC& aName);
+ static TInt NotificationSize(CFsNotificationInfo& aRequest);
+ static TInt TypeToIndex(TNotificationType aType);
+ static TNotificationType NotificationType(TInt& aIndex);
+ static TInt DriveNumber(const TPtrC& aPath);
+ static void Attributes(CFsMessageRequest& aRequest, TUint& aSet, TUint& aClear);
+ static TInt64 FileSize(CFsMessageRequest& aRequest);
+ static TInt ValidateNotification(CFsNotificationInfo& aNotificationInfo);
+ static void SetData(CFsMessageRequest* aRequest, CFsNotificationInfo* aNotificationInfo);
+ static TUint NotifyType(TInt aFunction);
+
+private:
+ //Don't delete instances, free them.
+ virtual ~CFsNotificationInfo();
+ CFsNotificationInfo& operator=(CFsNotificationInfo& aNotification); //to prevent copying
+
+ // called from New
+ CFsNotificationInfo();
+
+ //Used to populate NotificationInfoPool
+ static CFsNotificationInfo* New();
+
+ //Called after construction/allocation from pool
+ TInt Init(TInt aFunction, TInt aDriveNumber);
+
+ //Resets notification
+ void CleanNotification();
+
+ CFsNotificationInfoBody* iBody;
+ friend class FsNotify;
+ friend class CFsPool<CFsNotificationInfo>; //For access to ~CFsNotificationInfo for compilation purposes
+ };
+
class CFileCB;
class CDirCB;
@@ -1395,9 +1558,36 @@
// calls GetInterface() with tracepoints added
TInt GetInterfaceTraced(TInt aInterfaceId,TAny*& aInterface,TAny* aInput);
-
-
-
+public:
+ /*
+ * This function is provided for file systems to issue notifications to file server clients
+ * that have registered for notifications using the RFs::NotifyChange and CFsNotify client-side APIs.
+ *
+ * @param aNotificationInfo This object should contain the relevant Source (and if appropriate, NewName)
+ * as well as any other required information.
+ *
+ * The Source provided should be a fullpath of the form:
+ * \[path\]directory\ - in the case of changes to a directory
+ * \[path\]filename.ext - in the case of changes to a file
+ *
+ * The drive letter information is not to be included.
+ *
+ * In the case of 'File Write' or 'File Set Size' operations, the resulting file size must be set.
+ * @see CFsNotificationInfo::SetFileSize
+ *
+ * In the case of a attributes change, the attributes set and cleared must be set.
+ * @see CFsNotificationInfo::SetAttributes
+ *
+ * All CFsNotificationInfo objects must have a Uid set. This is the Uid of the
+ * process which caused the change. i.e. A photo browser may wish to know if it was the camera app
+ * or the photo editor which has caused a change. @see CFsNotificationInfo::SetUID
+ *
+ * @see class TFsNotification.
+ *
+ * @return Symbian Standard error code. KErrNone on success.
+ */
+ IMPORT_C TInt IssueNotification(CFsNotificationInfo* aNotificationInfo);
+
private:
void SetFileSystem(CFileSystem* aFS);
@@ -2041,7 +2231,7 @@
void InitL();
inline CFileCB& File();
- // For serialising aync requests
+ // For serialising async requests
TBool RequestStart(CFsMessageRequest* aRequest);
void RequestEnd(CFsMessageRequest* aRequest);
TBool RequestInProgress() const;
--- a/userlibandfileserver/fileserver/inc/f32notification.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/inc/f32notification.h Mon Nov 01 20:11:36 2010 +0000
@@ -115,13 +115,16 @@
/*
* @returns The Drive Number associated with the Path.
+ */
IMPORT_C TInt DriveNumber(TInt& aDriveNumber) const;
- */
-
+
/*
* @returns the UID of the process that caused this change.
+ * NB, the UID of the process causing the change is not always available
+ * such as when memory cards are physically removed.
+ */
IMPORT_C TInt UID(TUid& aUID) const;
- */
+
private:
//Declared private to prevent construction
TFsNotification();
@@ -182,7 +185,7 @@
* CFsNotify stores notifications in a buffer.
* Clients of CFsNotify must specify how large this buffer should be.
*
- * As a guideline: Notification objects in the buffer typically have a 8byte header,
+ * As a guideline: Notification objects in the buffer typically have a 12-byte header,
* followed by a word aligned string containing the fullname of the file that has changed.
* In the case of a rename notification both the original and the new fullnames are stored.
*
--- a/userlibandfileserver/fileserver/inc/f32ver.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/inc/f32ver.h Mon Nov 01 20:11:36 2010 +0000
@@ -58,6 +58,6 @@
@see TVersion
*/
-const TInt KF32BuildVersionNumber=4008;
+const TInt KF32BuildVersionNumber=4009;
//
#endif
--- a/userlibandfileserver/fileserver/sfile/efile.mmh Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/efile.mmh Mon Nov 01 20:11:36 2010 +0000
@@ -48,8 +48,9 @@
SOURCE sf_memory_man.cpp sf_memory_client.cpp
SOURCE sf_plugin_shim.cpp
SOURCE sf_notifier_handlers.cpp
+SOURCE sf_pool.cpp
#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
-SOURCE sf_pool.cpp sf_notifier.cpp
+SOURCE sf_notifier.cpp
#endif
#ifdef WINS
--- a/userlibandfileserver/fileserver/sfile/sf_dat.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_dat.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -27,6 +27,7 @@
CFsObjectCon* RawDisks;
CFsObjectCon* Extensions;
CFsObjectCon* ProxyDrives;
+CFsPool<CFsNotificationInfo>* NotificationInfoPool;
CServerFs* TheFileServer;
TDrive TheDrives[KMaxDrives];
--- a/userlibandfileserver/fileserver/sfile/sf_dir.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_dir.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -149,7 +149,7 @@
TInt r=ParseSubstPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysDirOpen,&KCapFsPriDirOpen, __PLATSEC_DIAGNOSTIC_STRING("Dir Open"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysDirOpen,&KCapFsPriDirOpen, __PLATSEC_DIAGNOSTIC_STRING("Dir Open"));
if(r != KErrNone)
return r;
return KErrNone;
--- a/userlibandfileserver/fileserver/sfile/sf_file.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_file.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -290,7 +290,7 @@
TInt r=ParseNoWildSubstCheckPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysFileCreate,&KCapFsPriFileCreate,&KCapFsROFileCreate, __PLATSEC_DIAGNOSTIC_STRING("Create File"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysFileCreate,&KCapFsPriFileCreate,&KCapFsROFileCreate, __PLATSEC_DIAGNOSTIC_STRING("Create File"));
if (r!=KErrNone)
return(r);
if (OpenOnDriveZOnly)
@@ -320,7 +320,7 @@
TInt r=ParseNoWildSubstCheckPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysFileReplace,&KCapFsPriFileReplace,&KCapFsROFileReplace, __PLATSEC_DIAGNOSTIC_STRING("Replace File"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysFileReplace,&KCapFsPriFileReplace,&KCapFsROFileReplace, __PLATSEC_DIAGNOSTIC_STRING("Replace File"));
if (r!=KErrNone)
return(r);
@@ -419,7 +419,7 @@
if(ComparePrivate(thisPath))
{
- if(! SIDCheck(aRequest,thisPath))
+ if(! SIDCheck(aRequest->Message(),thisPath))
{
if(!KCapFsPriFileOpen.CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_MESSAGE("File Open in private path")))
return KErrPermissionDenied;
@@ -492,7 +492,7 @@
TInt r=ParseNoWildSubstCheckPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysIsFileOpen,&KCapFsPriIsFileOpen, __PLATSEC_DIAGNOSTIC_STRING("Is File Open"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysIsFileOpen,&KCapFsPriIsFileOpen, __PLATSEC_DIAGNOSTIC_STRING("Is File Open"));
return(r);
}
@@ -628,7 +628,7 @@
TInt r=ParseNoWildSubstPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysFileTemp,&KCapFsPriFileTemp,&KCapFsROFileTemp, __PLATSEC_DIAGNOSTIC_STRING("Temp File"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysFileTemp,&KCapFsPriFileTemp,&KCapFsROFileTemp, __PLATSEC_DIAGNOSTIC_STRING("Temp File"));
if (r!=KErrNone)
return(r);
if (aRequest->Src().NameOrExtPresent())
@@ -1496,9 +1496,6 @@
CFileCache* fileCache = share->File().FileCache();
if (fileCache && (r = fileCache->FlushDirty(aRequest)) != CFsRequest::EReqActionComplete)
{
- //To be used in notification framework
- //CFsMessageRequest& msgRequest = (CFsMessageRequest&)*aRequest;
- //msgRequest.iUID = msgRequest.Message().Identity();
return r;
}
@@ -1950,7 +1947,7 @@
return(KErrBadName);
if (IsIllegalFullName(aRequest->Dest().FullName().Mid(2)))
return(KErrBadName);
- r=PathCheck(aRequest,aRequest->Dest().FullName().Mid(2),&KCapFsSysFileRename,&KCapFsPriFileRename,&KCapFsROFileRename, __PLATSEC_DIAGNOSTIC_STRING("File Rename"));
+ r=PathCheck(aRequest->Message(),aRequest->Dest().FullName().Mid(2),&KCapFsSysFileRename,&KCapFsPriFileRename,&KCapFsROFileRename, __PLATSEC_DIAGNOSTIC_STRING("File Rename"));
return(r);
}
--- a/userlibandfileserver/fileserver/sfile/sf_file_cache.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_file_cache.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -1623,7 +1623,7 @@
-TInt CFileCache::AllocateRequest(CFsClientMessageRequest*& aNewRequest, TBool aWrite, CSessionFs* aSession)
+TInt CFileCache::AllocateRequest(CFsClientMessageRequest*& aNewRequest, TBool aWrite, CSessionFs* aSession,TUid aUid)
{
RLocalMessage msgNew;
@@ -1632,7 +1632,7 @@
if (r != KErrNone)
return r;
- aNewRequest->Set(msgNew, oP, aSession);
+ aNewRequest->Set(msgNew, oP, aSession, aUid);
aNewRequest->SetDrive(iDrive);
// read-aheads and write-dirty requests should not be posted to plugins
@@ -1676,8 +1676,6 @@
if (newRequest)
{
- //To be used in notification framework.
- //newRequest->iUID = aOldRequest->Message().Identity();
newRequest->Dispatch();
}
@@ -1762,8 +1760,8 @@
CSessionFs* session = aOldRequest && aOldRequest->Session() ? aOldRequest->Session() : iDirtyDataOwner;
__ASSERT_ALWAYS(session, Fault(EFlushingWithSessionNull));
-
- TInt r = AllocateRequest(aNewRequest, ETrue, session);
+
+ TInt r = AllocateRequest(aNewRequest, ETrue, session, (aOldRequest) ? aOldRequest->Uid() : TUid::Null());
if (r != KErrNone)
return r;
--- a/userlibandfileserver/fileserver/sfile/sf_file_cache.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_file_cache.h Mon Nov 01 20:11:36 2010 +0000
@@ -91,7 +91,7 @@
static TInt CompleteFlushDirty(CFsRequest* aMsgRequest);
TInt FlushDirtySm(CFsMessageRequest& aMsgRequest);
- TInt AllocateRequest(CFsClientMessageRequest*& aNewRequest, TBool aWrite, CSessionFs* aSession = NULL);
+ TInt AllocateRequest(CFsClientMessageRequest*& aNewRequest, TBool aWrite, CSessionFs* aSession = NULL,TUid aUid = KNullUid);
void DoReadAhead(CFsMessageRequest& aMsgRequest, TUint aMode);
--- a/userlibandfileserver/fileserver/sfile/sf_local.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_local.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -500,11 +500,14 @@
#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
if(FsNotificationManager::IsInitialised())
{
+ CFsNotificationInfo* notificationInfo = CFsNotificationInfo::Allocate(EFsDismountFileSystem,aDrive);
__PRINT3(_L("LocalDrives::CompleteDriveNotifications() Initialised=%d, Count=%d, Drive=%d"),FsNotificationManager::IsInitialised(),FsNotificationManager::Count(), aDrive);
TBuf<2> driveDes;
driveDes.Append((TChar)aDrive+(TChar)'A');
driveDes.Append((TChar)':');
- FsNotificationManager::HandleChange(NULL,driveDes,TFsNotification::EMediaChange);
+ notificationInfo->SetSourceName(driveDes);
+ FsNotificationManager::HandleChange(*notificationInfo);
+ CFsNotificationInfo::Free(notificationInfo);
}
#endif //SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
--- a/userlibandfileserver/fileserver/sfile/sf_main.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_main.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -166,7 +166,7 @@
aMessage.Complete(r);
return;
}
- pR->Set(aMessage, oP, this);
+ pR->Set(aMessage, oP, this, aMessage.Identity());
__PRINT4TEMP(_L("***** Received Message sess %08x req %08x func 0x%x - %S"), this, pR, ipcFunction, GetFunctionName(ipcFunction));
pR->Dispatch();
}
@@ -485,6 +485,11 @@
// initialise notification information
FsNotify::Initialise();
+
+ // initialise notification pool
+ r = CFsNotificationInfo::Initialise();
+ __ASSERT_ALWAYS(r==KErrNone,Fault(ENotifyPoolCreation));
+
// initialise local drive specific information
LocalDrives::Initialise();
--- a/userlibandfileserver/fileserver/sfile/sf_mnt.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_mnt.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -19,7 +19,7 @@
#include "sf_mntTraces.h"
#endif
-
+#include "sf_notifier.h"
/**
@@ -453,6 +453,22 @@
}
+EXPORT_C TInt CMountCB::IssueNotification(CFsNotificationInfo* aNotificationInfo)
+ {
+ //Validate Notification
+ TInt r = CFsNotificationInfo::ValidateNotification(*aNotificationInfo);
+ if(r != KErrNone)
+ return r;
+
+ //Target RFs::NotifyChange
+ FsNotify::HandleChange(*aNotificationInfo);
+
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+ //Target CFsNotify
+ FsNotificationManager::HandleChange(*aNotificationInfo);
+#endif
+ return KErrNone;
+ }
--- a/userlibandfileserver/fileserver/sfile/sf_nbs.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_nbs.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -82,7 +82,7 @@
TInt r=ParseSubstPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysMkDir,&KCapFsPriMkDir,&KCapFsROMkDir, __PLATSEC_DIAGNOSTIC_STRING("Make Directory"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysMkDir,&KCapFsPriMkDir,&KCapFsROMkDir, __PLATSEC_DIAGNOSTIC_STRING("Make Directory"));
return(r);
}
@@ -110,7 +110,7 @@
TInt r=ParseSubstPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysRmDir,&KCapFsPriRmDir,&KCapFsRORmDir, __PLATSEC_DIAGNOSTIC_STRING("Remove Directory"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysRmDir,&KCapFsPriRmDir,&KCapFsRORmDir, __PLATSEC_DIAGNOSTIC_STRING("Remove Directory"));
return(r);
}
@@ -132,7 +132,7 @@
TInt r=ParseNoWildSubstCheckPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysDelete,&KCapFsPriDelete,&KCapFsRODelete, __PLATSEC_DIAGNOSTIC_STRING("Delete"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysDelete,&KCapFsPriDelete,&KCapFsRODelete, __PLATSEC_DIAGNOSTIC_STRING("Delete"));
return(r);
}
@@ -159,13 +159,13 @@
TInt r=ParseNoWildSubstCheckPathPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysRename,&KCapFsPriRename,&KCapFsRORename, __PLATSEC_DIAGNOSTIC_STRING("File Server Rename"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysRename,&KCapFsPriRename,&KCapFsRORename, __PLATSEC_DIAGNOSTIC_STRING("File Server Rename"));
if(r!=KErrNone)
return(r);
TDrive* pOldDrive=aRequest->Drive();
if ((r=ParseNoWildSubstCheckPathPtr1(aRequest,aRequest->Dest()))!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Dest().FullName().Mid(2),&KCapFsSysRename,&KCapFsPriRename,&KCapFsRORename, __PLATSEC_DIAGNOSTIC_STRING("File Server Rename"));
+ r=PathCheck(aRequest->Message(),aRequest->Dest().FullName().Mid(2),&KCapFsSysRename,&KCapFsPriRename,&KCapFsRORename, __PLATSEC_DIAGNOSTIC_STRING("File Server Rename"));
if(r == KErrNone)
{
if (pOldDrive!=aRequest->Drive())
@@ -197,13 +197,13 @@
TInt r=ParseNoWildSubstCheckPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysReplace,&KCapFsPriReplace,&KCapFsROReplace, __PLATSEC_DIAGNOSTIC_STRING("File Server Replace"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysReplace,&KCapFsPriReplace,&KCapFsROReplace, __PLATSEC_DIAGNOSTIC_STRING("File Server Replace"));
if(r!=KErrNone)
return(r);
TDrive* pOldDrive=aRequest->Drive();
if ((r=ParseNoWildSubstCheckPtr1(aRequest,aRequest->Dest()))!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Dest().FullName().Mid(2),&KCapFsSysReplace,&KCapFsPriReplace,&KCapFsROReplace, __PLATSEC_DIAGNOSTIC_STRING("File Server Replace"));
+ r=PathCheck(aRequest->Message(),aRequest->Dest().FullName().Mid(2),&KCapFsSysReplace,&KCapFsPriReplace,&KCapFsROReplace, __PLATSEC_DIAGNOSTIC_STRING("File Server Replace"));
if(r == KErrNone)
{
if (pOldDrive!=aRequest->Drive())
@@ -242,7 +242,7 @@
// Check the capabilites but always allow the entry to be read for private, system and
// resource directories as long as there are no sub folders or files specified
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsEntry, __PLATSEC_DIAGNOSTIC_STRING("Entry"), ETrue);
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsEntry, __PLATSEC_DIAGNOSTIC_STRING("Entry"), ETrue);
return(r);
}
@@ -277,7 +277,7 @@
TInt r=ParseNoWildSubstCheckPathPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysSetEntry,&KCapFsPriSetEntry,&KCapFsROSetEntry, __PLATSEC_DIAGNOSTIC_STRING("Set Entry"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysSetEntry,&KCapFsPriSetEntry,&KCapFsROSetEntry, __PLATSEC_DIAGNOSTIC_STRING("Set Entry"));
return(r);
}
@@ -390,7 +390,7 @@
TInt r=ParseNoWildSubstFileCheckPtr1(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysReadFileSection,&KCapFsPriReadFileSection, __PLATSEC_DIAGNOSTIC_STRING("Read File Section"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysReadFileSection,&KCapFsPriReadFileSection, __PLATSEC_DIAGNOSTIC_STRING("Read File Section"));
return(r);
}
@@ -481,7 +481,7 @@
TInt r=ParseNoWildSubstCheckPathPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysGetShortName,&KCapFsPriGetShortName, __PLATSEC_DIAGNOSTIC_STRING("Get Short Name"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysGetShortName,&KCapFsPriGetShortName, __PLATSEC_DIAGNOSTIC_STRING("Get Short Name"));
return(r);
}
@@ -508,7 +508,7 @@
TInt r=ParseNoWildSubstCheckPathPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysGetLongName,&KCapFsPriGetLongName, __PLATSEC_DIAGNOSTIC_STRING("Get Long Name"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysGetLongName,&KCapFsPriGetLongName, __PLATSEC_DIAGNOSTIC_STRING("Get Long Name"));
return(r);
}
@@ -537,7 +537,7 @@
TInt r=ParseNoWildSubstCheckPathPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return (r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysIsFileInRom,&KCapFsPriIsFileInRom, __PLATSEC_DIAGNOSTIC_STRING("Is File In Rom"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysIsFileInRom,&KCapFsPriIsFileInRom, __PLATSEC_DIAGNOSTIC_STRING("Is File In Rom"));
return(r);
}
--- a/userlibandfileserver/fileserver/sfile/sf_notifier.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_notifier.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -24,20 +24,21 @@
CFsPool<CFsNotificationBlock>* FsNotificationManager::iPool;
-CFsNotificationPathFilter* CFsNotificationPathFilter::NewL(const TDesC& aPath, const TDesC& aFilename)
+CFsNotificationPathFilter* CFsNotificationPathFilter::NewL(const TDesC& aPath, const TDesC& aFilename, TInt aDriveNum)
{
CFsNotificationPathFilter* self = new (ELeave) CFsNotificationPathFilter();
CleanupStack::PushL(self);
- self->ConstructL(aPath,aFilename);
+ self->ConstructL(aPath,aFilename,aDriveNum);
CleanupStack::Pop(self);
return self;
}
-void CFsNotificationPathFilter::ConstructL(const TDesC& aPath, const TDesC& aFilename)
+void CFsNotificationPathFilter::ConstructL(const TDesC& aPath, const TDesC& aFilename, TInt aDriveNum)
{
//Allocate the path and filename
iPath = aPath.AllocL();
iFilename = aFilename.AllocL();
+ iDriveNum = aDriveNum;
}
CFsNotificationPathFilter::~CFsNotificationPathFilter()
@@ -176,7 +177,7 @@
if(filterTypeCount)
{
//Remove this type from the filter register
- TFsNotification::TFsNotificationType type = FsNotificationHelper::NotificationType(filterType);
+ TFsNotification::TFsNotificationType type = CFsNotificationInfo::NotificationType(filterType);
FsNotificationManager::SetFilterRegister(type,EFalse,filterTypeCount);
}
filterList.Reset();
@@ -188,8 +189,6 @@
currentDriveFilters = (TFsNotificationTypeDriveArray*)iterator.NextValue();
}
iDrivesTypesFiltersMap.Close();
- iPathFilterList.ResetAndDestroy();
- iPathFilterList.Close();
return KErrNone;
}
@@ -197,10 +196,8 @@
{
__PRINT(_L("CFsNotifyRequest::AddFilterL"));
- iPathFilterList.AppendL(aFilter);
-
//Get the drive number to so know which drive array to add the filter(s) to.
- TInt driveNum = FsNotificationHelper::DriveNumber(aFilter->iPath->Des());
+ TInt driveNum = aFilter->iDriveNum;
TInt notifyType = 1;
TInt r = KErrNone;
@@ -213,7 +210,7 @@
TFsNotificationTypeFilter typeFilter;
typeFilter.iNotificationType = (TFsNotification::TFsNotificationType) notifyType;
typeFilter.iPathFilter = aFilter;
- TInt index = FsNotificationHelper::TypeToIndex(typeFilter.iNotificationType);
+ TInt index = CFsNotificationInfo::TypeToIndex(typeFilter.iNotificationType);
//If the per-drive-filterLists have not
//been set up yet then do so now.
@@ -256,6 +253,11 @@
return iClientMsg.Handle();
}
+const RMessage2& CFsNotifyRequest::BufferMessage()
+ {
+ return iBufferMsg;
+ }
+
void CFsNotifyRequest::CloseNotification()
{
__PRINT(_L("CFsNotifyRequest::CloseNotification()"));
@@ -328,7 +330,7 @@
User::LeaveIfError(iChainLock.CreateLocal());
}
iNotifyRequests = TheContainer->CreateL();
- iPool = CFsPool<CFsNotificationBlock>::New(KNotificationPoolSize);
+ iPool = CFsPool<CFsNotificationBlock>::New(KNotificationPoolSize,CFsNotificationBlock::New);
User::LeaveIfNull(iPool);
}
}
@@ -336,7 +338,7 @@
void FsNotificationManager::SetFilterRegister(TUint aFilter, TBool aAdd, TInt aCount)
{
__PRINT2(_L("FsNotificationManager::SetFilterRegister(aFilter=%u,aAdd=%d)"),aFilter,aAdd);
- TInt index = FsNotificationHelper::TypeToIndex((TFsNotification::TFsNotificationType)aFilter);
+ TInt index = CFsNotificationInfo::TypeToIndex((TFsNotification::TFsNotificationType)aFilter);
TInt& fr = FsNotificationManager::FilterRegister(index);
__ASSERT_DEBUG((aAdd) ? fr >= 0 : fr > 0,Fault(ENotificationFault));
fr+= aAdd ? aCount : -aCount;
@@ -400,9 +402,9 @@
}
//Get the notification type based on the TFsMessage function
-void FsNotificationHelper::NotificationType(TInt aFunction,TFsNotification::TFsNotificationType& aNotificationType)
+void CFsNotificationInfo::NotificationType(TInt aFunction,TNotificationType& aNotificationType)
{
- __PRINT(_L("FsNotificationHelper::NotificationType"));
+ __PRINT(_L("CFsNotificationInfo::NotificationType"));
switch(aFunction)
{
case EFsFileWrite:
@@ -486,258 +488,7 @@
}
-//=====FsNotificationManager===========================
-//Get the path of the file, folder or drive name based on the TFsMessage function
-void FsNotificationHelper::PathName(CFsClientMessageRequest& aRequest, TDes& aPath)
- {
- __PRINT(_L("FsNotificationHelper::PathName"));
- //Get the notification type
- TInt function = aRequest.Operation()->Function();
-
- //Get the filename(s)
- switch(function)
- {
- case EFsFileWrite: //EParseSrc | EFileShare
- case EFsFileSetSize: //EParseSrc | EFileShare
- case EFsFileSetAtt: //EParseDst | EParseSrc, - should not use these; has share.
- case EFsFileSet:
- case EFsFileWriteDirty: //EFileShare
- {
- CFileShare* share = NULL;
- CFileCB* file = NULL;
- GetFileFromScratch(&aRequest,share,file);
- aPath.Append(file->DriveNumber() + 'A');
- aPath.Append(':');
- aPath.Append(file->FileName().Des());
- break;
- }
- case EFsFileCreate: //EParseSrc
- case EFsDelete: //EParseSrc
- case EFsSetEntry: //EParseSrc,
- case EFsFileRename: //EParseDst | EParseSrc,
- case EFsRename: //EParseDst | EParseSrc,
- case EFsReplace: //EParseDst | EParseSrc,
- case EFsFileReplace: //EParseSrc
- {
- aPath.Copy(aRequest.Src().FullName());
- break;
- }
- case EFsRmDir: //EParseSrc
- case EFsMkDir: //EParseSrc
- {
- aPath.Copy(aRequest.Src().DriveAndPath());
- break;
- }
- case EFsFormatNext: //EParseSrc
- case EFsDismountFileSystem: //0
- case EFsMountFileSystem: //0
- case EFsSetVolume: //0
- case EFsSetDriveName: //ESync
- case EFsRawDiskWrite: //EParseSrc
- case EFsMountFileSystemScan:
- {
- _LIT(KFormatDrive,"?:");
- TBuf<2> drive;
- drive.Append(KFormatDrive);
- drive[0] = TText(aRequest.Drive()->DriveNumber() + 'A');
- aPath.Copy(drive);
- break;
- }
- default:
- ASSERT(0);
- break;
- }
- }
-
-//Get the new path of the file, folder or drive name based on the TFsMessage function
-void FsNotificationHelper::NewPathName(CFsClientMessageRequest& aRequest, TPtrC& aNewPath)
- {
- __PRINT(_L("FsNotificationHelper::NewPathName"));
- //Get the notification type
- TInt function = aRequest.Operation()->Function();
-
- //Get the filename(s)
- switch(function)
- {
- case EFsFileRename: //EParseDst | EParseSrc,
- case EFsRename: //EParseDst | EParseSrc,
- case EFsReplace: //EParseDst | EParseSrc,
- {
- aNewPath.Set(aRequest.Dest().FullName());
- break;
- }
- case EFsSetDriveName: //ESync
- {
- TFileName name;
- aRequest.ReadL(KMsgPtr1, name);
- aNewPath.Set(name);
- break;
- }
- case EFsSetVolume: //0
- {
- TFileName name;
- aRequest.ReadL(KMsgPtr0, name);
- aNewPath.Set(name);
- break;
- }
- default:
- {
- ASSERT(0);
- break;
- }
- }
- }
-
-//Get the size of the notification based on its type
-TInt FsNotificationHelper::NotificationSize(CFsClientMessageRequest& aRequest, TFsNotification::TFsNotificationType aNotificationType, const TDesC& aName)
- {
- __PRINT(_L("FsNotificationHelper::NotificationSize"));
-
- /*
- * If there are no new names, the order of the data in the buffer is:
- * Word1 : NotificationSize (2 bytes) , PathSize (2 bytes)
- * Word2 : NotificationType (Lower 2 bytes)
- * Word(s) : Path (TText8) , [Any sub-class members]
- *
- * Else for notification types ERename, EVolumeName and EDriveName the order is:
- * Word1 : NotificationSize (2 bytes) , PathSize (2 bytes)
- * Word2 : NewNameSize (2 bytes) , NotificationType (2 bytes)
- * Word(s) : Path (TText8) , NewName (TText8)
- *
- * EOverflow size: KNotificationHeaderSize
- */
-
- TInt size = KNotificationHeaderSize + Align4(aName.Size());
-
- switch(aNotificationType)
- {
- //NewName
- case TFsNotification::ERename:
- case TFsNotification::EVolumeName:
- case TFsNotification::EDriveName:
- {
- TPtrC dest;
- NewPathName(aRequest,dest);
- size += Align4(dest.Size());
- break;
- }
- case TFsNotification::EFileChange:
- {
- size += sizeof(TInt64);
- break;
- }
- case TFsNotification::EAttribute:
- {
- size += sizeof(TUint64);
- break;
- }
- case TFsNotification::ECreate:
- case TFsNotification::EDelete:
- case TFsNotification::EMediaChange:
- {
- break;
- }
- default:
- {
- ASSERT(0);
- break;
- }
- }
- return (TUint16) size;
- }
-
-TFsNotification::TFsNotificationType FsNotificationHelper::NotificationType(TInt& aIndex)
- {
- __PRINT(_L("FsNotificationHelper::NotificationType(TInt)"));
- __ASSERT_DEBUG(aIndex < KNumRegisterableFilters, Fault(ENotificationFault));
-
- switch(aIndex) //No break statements here on purpose
- {
- case 7 : return TFsNotification::EMediaChange;
- case 6 : return TFsNotification::EDriveName;
- case 5 : return TFsNotification::EVolumeName;
- case 4 : return TFsNotification::EDelete;
- case 3 : return TFsNotification::EAttribute;
- case 2 : return TFsNotification::ECreate;
- case 1 : return TFsNotification::ERename;
- case 0 : return TFsNotification::EFileChange;
- default: ASSERT(0); return (TFsNotification::TFsNotificationType) 0;
- }
- }
-
-//Get the array index of the notification based on its type
-TInt FsNotificationHelper::TypeToIndex(TFsNotification::TFsNotificationType aType)
- {
- __PRINT(_L("FsNotificationHelper::ArrayIndex"));
-
- TInt index = 0;
- switch(aType) //No break statements here on purpose
- {
- case TFsNotification::EMediaChange: index++;
- case TFsNotification::EDriveName: index++;
- case TFsNotification::EVolumeName: index++;
- case TFsNotification::EDelete: index++;
- case TFsNotification::EAttribute: index++;
- case TFsNotification::ECreate: index++;
- case TFsNotification::ERename: index++;
- case TFsNotification::EFileChange: // skip;
- default: break;
- }
- __ASSERT_DEBUG(index < KNumRegisterableFilters, Fault(ENotificationFault));
- return index;
- }
-
-TInt FsNotificationHelper::DriveNumber(const TPtrC& aPath)
- {
- if(aPath.Length() >= 2 && ((TChar)aPath[1])==(TChar)':')
- {
- TChar driveChar = ((TChar)aPath[0]);
- driveChar.UpperCase();
- TInt driveNum = driveChar-(TChar)'A';
- return driveNum;
- }
- else
- {
- return KErrNotFound;
- }
- }
-
-//Get the attributes set and cleared
-void FsNotificationHelper::Attributes(CFsClientMessageRequest& aRequest, TUint& aSet, TUint& aClear)
- {
- __PRINT(_L("FsNotificationHelper::Attributes"));
-
- TInt function = aRequest.Operation()->Function();
- const RMessage2& msg = aRequest.Message();
-
- switch(function)
- {
- case EFsFileSet:
- {
- aSet = msg.Int1();
- aClear = msg.Int2();
- break;
- }
- case EFsFileSetAtt:
- {
- aSet = msg.Int0();
- aClear = msg.Int1();
- break;
- }
- case EFsSetEntry:
- {
- aSet = msg.Int2();
- aClear = msg.Int3();
- break;
- }
- default:
- {
- ASSERT(0);
- break;
- }
- }
- }
TBool CFsNotifyRequest::ValidateNotification(TInt aNotificationSize, TInt& aServerTail)
@@ -898,7 +649,7 @@
// If there is a iClientMsg then this is the first time this
// has been called since the client called RequestNotifications.
// In this situation we complete the client request.
-TInt CFsNotifyRequest::NotifyChange(CFsClientMessageRequest* aRequest,const TDesC& aName, TFsNotification::TFsNotificationType aNotificationType, CFsNotificationBlock& aBlock)
+TInt CFsNotifyRequest::NotifyChange(CFsNotificationInfo* aRequest, CFsNotificationBlock& aBlock)
{
/*
* Different notification types have different data associated with them.
@@ -920,8 +671,8 @@
__PRINT(_L("CFsNotifyRequest::NotifyChange()"));
- TInt notificationSize = FsNotificationHelper::NotificationSize(*aRequest,aNotificationType,aName);
-
+ TInt notificationSize = CFsNotificationInfo::NotificationSize(*aRequest);
+
iClientSyncLock.Wait();
iTailSemaphore.Wait();
@@ -936,16 +687,23 @@
//We can store the size of the notification
//and the size of the name in the same word.
+ TBuf<2> driveBuf;
+ driveBuf.SetLength(2);
+ TChar driveLetter = 'A';
+ RFs::DriveToChar(aRequest->DriveNumber(),driveLetter);
+ driveBuf[0] = (TText)driveLetter;
+ driveBuf[1] = (TText)':';
+
TUint16 nameLen = 0; //Overflow has no name
TInt notifSize = KNotificationHeaderSize;
if(!overflow)
{
- nameLen = (TUint16)aName.Size();
+ nameLen = (TUint16)aRequest->SourceSize();
notifSize = notificationSize;
}
else
{
- aNotificationType = TFsNotification::EOverflow;
+ aRequest->NotificationType() = TFsNotification::EOverflow;
}
iServerTail = tail + notifSize;
@@ -958,62 +716,47 @@
memcpy((TText8*)aBlock.Data()+writeOffset,&sizeNameLen,sizeof(TUint));
writeOffset+=sizeof(TUint);
- TPtrC newName;
-
- if (aNotificationType == TFsNotification::ERename ||
- aNotificationType == TFsNotification::EVolumeName ||
- aNotificationType == TFsNotification::EDriveName)
- {
- FsNotificationHelper::NewPathName(*aRequest,newName);
- //Store NewNameSize and notification Type (Word2)
- TUint typeNewNameLen = ((TUint16)newName.Size() << 16) | (TUint16)aNotificationType;
+ if (aRequest->NotificationType() == TFsNotification::ERename ||
+ aRequest->NotificationType() == TFsNotification::EVolumeName ||
+ aRequest->NotificationType() == TFsNotification::EDriveName)
+ {
+ //Store NewNameSize and notification Type (Word2)
+ TUint typeNewNameLen = ((TUint16)aRequest->NewNameSize() << 16) | (TUint16)aRequest->NotificationType();
memcpy((TText8*)aBlock.Data()+writeOffset,&typeNewNameLen,sizeof(TUint));
}
else
{
//Store notification Type (Word2)
- memcpy((TText8*)aBlock.Data()+writeOffset,&aNotificationType,sizeof(TUint));
+ memcpy((TText8*)aBlock.Data()+writeOffset,&aRequest->NotificationType(),sizeof(TUint));
}
writeOffset+=sizeof(TUint);
- CFileShare* share = NULL;
- CFileCB* file = NULL;
- if(aRequest) //Don't always have a request such as when called from localdrives.
- {
- GetFileFromScratch(aRequest, share, file);
- }
-
//
//Store UID
- /*
- TUid uid;
- uid.iUid = KErrUnknown;
- if(aRequest && aRequest->Operation()->iFunction == EFsFileWriteDirty)
- {
- uid = aRequest->iUID;
- }
- else if(aRequest)
- {
- uid = aRequest->Message().Identity();
- }
- memcpy((TText8*)aBlock.Data()+writeOffset,&uid.iUid,sizeof(TUint32));
+ memcpy((TText8*)aBlock.Data()+writeOffset,&aRequest->Uid().iUid,sizeof(TUint32));
writeOffset+=sizeof(TUint32);
- */
+
if(!overflow)
{
//Store Name (Word3)
- memcpy((TText8*)aBlock.Data()+writeOffset,aName.Ptr(),aName.Size());
- writeOffset += Align4(aName.Size());
-
+ {
+ //Store driveColon
+ if(aRequest->NotificationType()!=TFsNotification::EMediaChange)
+ {
+ memcpy((TText8*)aBlock.Data()+writeOffset,driveBuf.Ptr(),driveBuf.Size());
+ writeOffset += driveBuf.Size(); //NB: Not Align4'd deliberately.
+ }
+ memcpy((TText8*)aBlock.Data()+writeOffset,aRequest->Source().FullName().Ptr(),aRequest->Source().FullName().Size());
+ writeOffset += Align4(aRequest->Source().FullName().Size());
+ }
- switch (aNotificationType)
+ switch (aRequest->NotificationType())
{
case TFsNotification::EFileChange:
+ case TFsNotification::EAttribute:
{
- TInt64 size = 0;
- size = file->CachedSize64();
- memcpy((TText8*)aBlock.Data()+writeOffset,&size,sizeof(TInt64));
+ memcpy((TText8*)aBlock.Data()+writeOffset,aRequest->Data(),sizeof(TInt64));
writeOffset += sizeof(TInt64);
break;
}
@@ -1022,20 +765,19 @@
case TFsNotification::EDriveName:
{
//Store NewName
- memcpy((TText8*)aBlock.Data()+writeOffset,newName.Ptr(),newName.Size());
- writeOffset += Align4(newName.Size());
+
+ if(!aRequest->DestDriveIsSet())
+ {
+ //This means that the notification has come from a Mount rather than from FileServer
+ //It also means that the new name will have the same drive letter as the source.
+ memcpy((TText8*)aBlock.Data()+writeOffset,driveBuf.Ptr(),driveBuf.Size());
+ writeOffset += driveBuf.Size(); //NB: Not Align4'd deliberately.
+ }
+ memcpy((TText8*)aBlock.Data()+writeOffset,aRequest->NewName().FullName().Ptr(),aRequest->NewName().FullName().Size());
+ writeOffset += Align4(aRequest->NewName().FullName().Size());
break;
}
- case TFsNotification::EAttribute:
- {
- TUint set=0;
- TUint clear=0;
- FsNotificationHelper::Attributes(*aRequest,set,clear);
- TUint64 att = MAKE_TUINT64(set,clear);
- memcpy((TText8*)aBlock.Data()+writeOffset,&att,sizeof(TUint64));
- writeOffset += sizeof(TUint64);
- break;
- }
+
default:
{
break;
@@ -1085,107 +827,71 @@
//A change has occurred in f32 represented by this
//request object. Work out which CfsNotify’s are interested
// (if any) and call CfsNotifyRequest::NotifyChange.
-void FsNotificationManager::HandleChange(CFsClientMessageRequest* aRequest,const TDesC& aOperationName, TFsNotification::TFsNotificationType aType)
- {
- __PRINT2(_L("FsNotificationManager::HandleChange() aRequest=0x%x, aType=%d"),&aRequest,aType);
-
- Lock(); //ToDo: Read Lock (Read/Write Lock)
- if(Count())
- {
- //Only search while there are filters of this type set up.
- TInt index = FsNotificationHelper::TypeToIndex(aType);
- TInt& filterCount = FsNotificationManager::FilterRegister(index);
- TInt seenFilter = filterCount; //Number of requests set up for this type
-
- //Iterate CFsNotifyRequests
- TInt count = iNotifyRequests->Count();
-
- if(aType == TFsNotification::EMediaChange)
- seenFilter = count;
-
- //If there aren't any requests then breakout
- if(count == 0)
- {
- Unlock();
- return;
- }
-
- TInt driveNum = FsNotificationHelper::DriveNumber(aOperationName);
+void FsNotificationManager::HandleChange(CFsNotificationInfo& aRequest)
+ {
+ __PRINT2(_L("FsNotificationManager::HandleChange() aNotificationInfo=0x%x,NotificationType=%d"),&aRequest,aRequest.NotificationType());
+ if(Count())
+ {
+ Lock(); //ToDo: Read Lock (Read/Write Lock)
+ if(Count())
+ {
+ //Only search while there are filters of this type set up.
+ TInt index = CFsNotificationInfo::TypeToIndex(aRequest.NotificationType());
+ TInt& filterCount = FsNotificationManager::FilterRegister(index);
+ TInt seenFilter = filterCount; //Number of requests set up for this type
+
+ //Iterate CFsNotifyRequests
+ TInt count = iNotifyRequests->Count();
+
+ if(aRequest.NotificationType() == TFsNotification::EMediaChange)
+ seenFilter = count;
+
+ //If there aren't any requests then breakout
+ if(count == 0)
+ {
+ Unlock();
+ return;
+ }
+
+ //For every notification request(i.e. every CFsNotify client-side).
+ for(TInt i=0; i<count && seenFilter; ++i)
+ {
+ CFsNotifyRequest* notifyRequest = (CFsNotifyRequest*)(*iNotifyRequests)[i];
+ CFsNotifyRequest::TNotifyRequestStatus status = notifyRequest->ActiveStatus();
+ if(! (status==CFsNotifyRequest::EActive ||
+ status==CFsNotifyRequest::EOutstanding))
+ {
+ //Not active; check next notification request
+ continue;
+ }
+
+ //Check whether we are interested in this change.
+ //Get the filters associated with this operation on this drive
+ TFsNotificationTypeArray* filterList = notifyRequest->FilterTypeList(aRequest.DriveNumber(),index);
+ DoHandleChange(filterList,seenFilter,aRequest,notifyRequest);
- //For every notification request.
- for(TInt i=0; i<count && seenFilter; ++i)
- {
- CFsNotifyRequest* notifyRequest = (CFsNotifyRequest*)(*iNotifyRequests)[i];
- CFsNotifyRequest::TNotifyRequestStatus status = notifyRequest->ActiveStatus();
- if(! (status==CFsNotifyRequest::EActive ||
- status==CFsNotifyRequest::EOutstanding))
- {
- //Not active; check next notification request
- continue;
- }
-
- //Check whether we are interested in this change.
- //Get the filters associated with this operation on this drive
- TFsNotificationTypeArray* filterList = notifyRequest->FilterTypeList(driveNum,index);
- DoHandleChange(filterList,seenFilter,aRequest,notifyRequest,aOperationName,aType);
-
- if(aType==TFsNotification::EMediaChange)
- continue; //next request
-
- //If there are still filters to check
- if(seenFilter)
- {
- //Check changes that are not tied to a particular drive
- filterList = notifyRequest->FilterTypeList(KErrNotFound,index);
- DoHandleChange(filterList,seenFilter,aRequest,notifyRequest,aOperationName,aType);
- }
- }
- }
- Unlock();
- }
-
-//A change has occurred in f32 represented by this
-//request object. Work out which CfsNotify’s are interested
-// (if any) and call CfsNotifyRequest::NotifyChange.
-void FsNotificationManager::HandleChange(CFsClientMessageRequest& aRequest, TFsNotification::TFsNotificationType aType)
- {
- __PRINT(_L("FsNotificationManager::HandleChange"));
- TFileName currentOperationsName;
- FsNotificationHelper::PathName(aRequest, currentOperationsName);
- if(currentOperationsName.Length())
- HandleChange(&aRequest,currentOperationsName,aType);
- }
-
-//A change has occurred in f32 represented by this
-//request object. Work out which CfsNotify’s are interested
-// (if any) and call CfsNotifyRequest::NotifyChange.
-void FsNotificationManager::HandleChange(CFsClientMessageRequest& aRequest)
- {
- if(Count() && aRequest.Message().Handle() != KLocalMessageHandle)
- {
- __PRINT(_L("FsNotificationManager::HandleChange"));
- TFsNotification::TFsNotificationType operationNotificationType;
- FsNotificationHelper::NotificationType(aRequest.FsFunction(), operationNotificationType);
- HandleChange(aRequest,operationNotificationType);
- }
- }
+ if(aRequest.NotificationType()==TFsNotification::EMediaChange)
+ continue; //next request
+
+ //If there are still filters to check
+ if(seenFilter)
+ {
+ //Check changes that are not tied to a particular drive
+ filterList = notifyRequest->FilterTypeList(KErrNotFound,index);
+ DoHandleChange(filterList,seenFilter,aRequest,notifyRequest);
+ }
+ }
+ }
+ Unlock();
+ }
+ }
////
#else
////
-void FsNotificationManager::HandleChange(CFsClientMessageRequest* ,const TDesC&, TFsNotification::TFsNotificationType)
- {
- return;
- }
-
-void FsNotificationManager::HandleChange(CFsClientMessageRequest& , TFsNotification::TFsNotificationType)
- {
- return;
- }
-
-void FsNotificationManager::HandleChange(CFsClientMessageRequest&)
+void FsNotificationManager::HandleChange(CFsNotificationInfo&)
{
return;
}
@@ -1193,10 +899,11 @@
#endif //SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
//Called from FsNotificationManager::DoHandleChange
-FsNotificationManager::TFsNotificationFilterMatch FsNotificationManager::DoMatchFilter(CFsClientMessageRequest* aRequest, const TDesC& aOperationName,CFsNotificationPathFilter& aFilter)
+FsNotificationManager::TFsNotificationFilterMatch FsNotificationManager::DoMatchFilter(const RMessage2& aMessage, const TDesC& aOperationName,CFsNotificationPathFilter& aFilter)
{
TFsNotificationFilterMatch filterMatch = EDifferent;
TParsePtrC parseOp(aOperationName);
+
TPtrC pathOpDes = parseOp.DriveAndPath();
TPtrC nameOpDes = parseOp.NameAndExt();
TInt pathLength = aFilter.iPath->Des().Length();
@@ -1210,7 +917,7 @@
else //if no path filter was set up
// then we need to ensure we don't notify on data-caged areas which we shouldn't
{
- TInt r = PathCheck(aRequest,aOperationName.Mid(2),&KCapFsSysFileTemp,&KCapFsPriFileTemp,&KCapFsROFileTemp, __PLATSEC_DIAGNOSTIC_STRING("FsNotificationManager::DoHandleChange"));
+ TInt r = PathCheck(aMessage,aOperationName.Mid(2),&KCapFsSysFileTemp,&KCapFsPriFileTemp,&KCapFsROFileTemp, __PLATSEC_DIAGNOSTIC_STRING("FsNotificationManager::DoHandleChange"));
if(r != KErrNone)
return EContinue; //next filter
}
@@ -1228,8 +935,9 @@
return filterMatch;
}
-// This is called on a per drive basis.
-void FsNotificationManager::DoHandleChange(TFsNotificationTypeArray* aFilterTypeArray,TInt& aSeenFilter, CFsClientMessageRequest* aRequest, CFsNotifyRequest* aNotifyRequest, const TDesC& aOperationName, TFsNotification::TFsNotificationType& aType)
+// The aFilterTypeArray is an array for the filters that target the current drive (only).
+// This is called on a per client (CFsNotify) basis.
+void FsNotificationManager::DoHandleChange(TFsNotificationTypeArray* aFilterTypeArray,TInt& aSeenFilter, CFsNotificationInfo& aNotificationInfo, CFsNotifyRequest* aNotifyRequest)
{
__PRINT(_L("FsNotificationManager::DoHandleChange()"));
@@ -1238,36 +946,39 @@
TInt numFilters = aFilterTypeArray->Count();
- if(aType == TFsNotification::EMediaChange)
- numFilters = 1; //Only need to notify once per drive.
-
- //For every filter in this request
+ if(aNotificationInfo.NotificationType() == TFsNotification::EMediaChange)
+ numFilters = 1; //Only need to notify once per client for EMediaChange.
+
+ //For every filter in this request (CFsNotify)
for(TInt j = 0; j < numFilters;++j)
{
//Is the correct notification type
aSeenFilter--;
TBool filterMatch = EDifferent;
- if(aType != TFsNotification::EMediaChange)
+ if(aNotificationInfo.NotificationType() != TFsNotification::EMediaChange)
{
CFsNotificationPathFilter& filter = *(((*aFilterTypeArray)[j]).iPathFilter);
- __PRINT2(_L("FsNotificationManager::DoHandleChange() operationName=%S, filterName=%S"),&aOperationName,filter.iPath);
-
- filterMatch = DoMatchFilter(aRequest,aOperationName,filter);
+ __PRINT2(_L("FsNotificationManager::DoHandleChange() operationName=%S, filterName=%S"),&aNotificationInfo.Source().FullName(),filter.iPath);
+
+ //buferMsg here is the message of the client *recieving* the notification
+ const RMessage2& bufferMsg = aNotifyRequest->BufferMessage();
+ filterMatch = DoMatchFilter(bufferMsg,aNotificationInfo.Source().FullName(),filter);
if(filterMatch == FsNotificationManager::EContinue)
continue; //triggers for data cages
//We need to check for changes coming in to a directory when its rename
- if(aType == TFsNotification::ERename && filterMatch==FsNotificationManager::EDifferent)
+ if(aNotificationInfo.NotificationType() == TFsNotification::ERename && filterMatch==FsNotificationManager::EDifferent)
{
- TPtrC aDestinationNamePtrC;
- FsNotificationHelper::NewPathName(*aRequest,aDestinationNamePtrC);
- __PRINT2(_L("FsNotificationManager::DoHandleChange() destinationName=%S, filterName=%S"),&aDestinationNamePtrC,filter.iPath);
- filterMatch = DoMatchFilter(aRequest,aDestinationNamePtrC,filter);
+ __PRINT2(_L("FsNotificationManager::DoHandleChange() destinationName=%S, filterName=%S"),&aNotificationInfo.NewName().FullName(),filter.iPath);
+ if(aNotificationInfo.DestDriveIsSet())
+ filterMatch = DoMatchFilter(bufferMsg,aNotificationInfo.NewName().FullName().Mid(2),filter);
+ else
+ filterMatch = DoMatchFilter(bufferMsg,aNotificationInfo.NewName().FullName(),filter);
}
}
- if(filterMatch || (aType == TFsNotification::EMediaChange))//Match or MediaChange (report regardless of filters)
+ if(filterMatch || (aNotificationInfo.NotificationType() == TFsNotification::EMediaChange))//Match or MediaChange (report regardless of filters)
{
//Matching - Handle change
@@ -1275,7 +986,7 @@
//So that we can do IPC from a single place.
CFsNotificationBlock* block = iPool->Allocate();
- TInt r = aNotifyRequest->NotifyChange(aRequest,aOperationName,aType,*block);
+ TInt r = aNotifyRequest->NotifyChange(&aNotificationInfo,*block);
//Free block
iPool->Free(block);
--- a/userlibandfileserver/fileserver/sfile/sf_notifier.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_notifier.h Mon Nov 01 20:11:36 2010 +0000
@@ -51,12 +51,13 @@
class CFsNotificationPathFilter
{
public:
- static CFsNotificationPathFilter* NewL(const TDesC& aPath, const TDesC& aFilename);
+ static CFsNotificationPathFilter* NewL(const TDesC& aPath, const TDesC& aFilename, TInt aDriveNum);
~CFsNotificationPathFilter();
private:
- void ConstructL(const TDesC& aPath, const TDesC& aFilename);
+ void ConstructL(const TDesC& aPath, const TDesC& aFilename, TInt aDriveNum);
CFsNotificationPathFilter();
public:
+ TInt iDriveNum;
HBufC* iPath;
HBufC* iFilename;
};
@@ -119,7 +120,7 @@
/*
* Returns the RArray<TFsNotificationFilter> for an index
- * as returned from FsNotificationHelper::TypeToIndex()
+ * as returned from CFsNotificationInfo::TypeToIndex()
*/
TFsNotificationTypeArray* FilterTypeList(TInt aDrive,TInt aIndex);
@@ -157,11 +158,8 @@
* notification of this operation to the client.
*
* Calling of this function means that we are notifying about this operation. (all checks passed)
- *
- * aRequest can be NULL when the request doesn't come from the file server
- * (such as when a media card is removed)
*/
- TInt NotifyChange(CFsClientMessageRequest* aRequest, const TDesC& aName, TFsNotification::TFsNotificationType aNotificationType, CFsNotificationBlock& aBlock);
+ TInt NotifyChange(CFsNotificationInfo* aRequest, CFsNotificationBlock& aBlock);
/*
* This function performs the IPC to the client's buffer.
@@ -174,6 +172,9 @@
//Simple getter
TInt ClientMsgHandle();
+ //Platsec needs to check against the path with a message of the *receiving* client.
+ const RMessage2& BufferMessage();
+
private:
CFsNotifyRequest();
void ConstructL();
@@ -216,15 +217,7 @@
* Each index of the TFsNotificationTypeDriveArray is a TFsNotificationTypeArray
*/
RHashMap<TInt,TFsNotificationTypeDriveArray> iDrivesTypesFiltersMap;
-
- /*
- * The iPathFilterList is an RPointerArray of CFsNotificationPathFilters.
- *
- * These are normally only accessed via a TFsNotificationTypeFilter (via iDrivesTypesFiltersMap),
- * not via this array directly.
- */
- RPointerArray<CFsNotificationPathFilter> iPathFilterList;
-
+
RMessage2 iBufferMsg; //To update buffer
RMessage2 iClientMsg; //client notification request
@@ -270,24 +263,6 @@
};
/**
- * Helper class to get certain attributes from or about a particular operation to used in a notification
- *
- * @internalTechnology
- */
-class FsNotificationHelper
- {
-public:
- static void NotificationType(TInt aFunction,TFsNotification::TFsNotificationType& aNotificationType);
- static void PathName(CFsClientMessageRequest& aRequest, TDes& aName);
- static void NewPathName(CFsClientMessageRequest& aRequest, TPtrC& aName);
- static TInt NotificationSize(CFsClientMessageRequest& aRequest, TFsNotification::TFsNotificationType aNotificationType, const TDesC& aName);
- static TInt TypeToIndex(TFsNotification::TFsNotificationType aType);
- static TFsNotification::TFsNotificationType NotificationType(TInt& aIndex);
- static TInt DriveNumber(const TPtrC& aPath);
- static void Attributes(CFsClientMessageRequest& aRequest, TUint& aSet, TUint& aClear);
- };
-
-/**
* The FsNotificationManager is a static object
*
*@internalTechnology
@@ -307,26 +282,8 @@
* Work out which CFsNotifyRequests are interested
* (if any) and call CFsNotifyRequest::NotifyChange.
*/
- static void HandleChange(CFsClientMessageRequest& aRequest);
-
- /* A change has occurred represented by this request.
- * Work out which CFsNotifyRequests are interested
- * (if any) and call CFsNotifyRequest::NotifyChange.
- *
- * This override is used directly when we want to force a particular notification type
- */
- static void HandleChange(CFsClientMessageRequest& aRequest, TFsNotification::TFsNotificationType aType);
+ static void HandleChange(CFsNotificationInfo& aRequest);
- /*
- * This override is used directly when we want to specify the current operation's name (src) and notification type.
- *
- * aRequest can be NULL when the request doesn't come from the file server
- * such as when a media card is removed, see LocalDrives::CompleteDriveNotifications
- *
- * @See LocalDrives::CompleteDriveNotifications(TInt aDrive)
- */
- static void HandleChange(CFsClientMessageRequest* aRequest, const TDesC& aOperationName, TFsNotification::TFsNotificationType aType);
-
//Initialise iNotifyRequests and iStaticNotification
static void OpenL();
static TBool IsInitialised();
@@ -350,7 +307,7 @@
static void SetFilterRegister(TUint aFilter, TBool aAdd, TInt aCount = 1);
/*
* Get the number of registers filters set up on a particular type.
- * @param aIndex the TFsNotificationType's index as determined from FsNotificationHelper::TypeToIndex
+ * @param aIndex the TFsNotificationType's index as determined from CFsNotificationInfo::TypeToIndex
*/
static TInt& FilterRegister(TInt aIndex);
@@ -386,13 +343,13 @@
/*
* Checks whether aOperation matches the filter name and/or path set in aFilter.
*/
- static TFsNotificationFilterMatch DoMatchFilter(CFsClientMessageRequest* aRequest, const TDesC& aOperationName,CFsNotificationPathFilter& aFilter);
+ static TFsNotificationFilterMatch DoMatchFilter(const RMessage2& aMessage, const TDesC& aOperationName,CFsNotificationPathFilter& aFilter);
/*
* Iterates filters for a particular drive.
* Called from HandleChange
*/
- static void DoHandleChange(TFsNotificationTypeArray* aFilterTypeArray, TInt& aSeenFilter, CFsClientMessageRequest* aRequest, CFsNotifyRequest* aNotifyRequest, const TDesC& aOperationName, TFsNotification::TFsNotificationType& aType);
+ static void DoHandleChange(TFsNotificationTypeArray* aFilterTypeArray, TInt& aSeenFilter, CFsNotificationInfo& aNotificationInfo, CFsNotifyRequest* aNotifyRequest);
/*
* Stores the CFsNotifyRequests
--- a/userlibandfileserver/fileserver/sfile/sf_notifier_handlers.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_notifier_handlers.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -261,7 +261,7 @@
}
if(path.Length() >= 2)
- r=PathCheck(aRequest,path.Mid(2),&KCapFsSysFileTemp,&KCapFsPriFileTemp,&KCapFsROFileTemp, __PLATSEC_DIAGNOSTIC_STRING("Notification Add Filter"));
+ r=PathCheck(aRequest->Message(),path.Mid(2),&KCapFsSysFileTemp,&KCapFsPriFileTemp,&KCapFsROFileTemp, __PLATSEC_DIAGNOSTIC_STRING("Notification Add Filter"));
return r;
}
@@ -284,14 +284,32 @@
__PRINT2(_L("TFsNotificationAdd::AddNotification() path=%S, filename=%S"),&path,&filename);
//If this is a path starting with 'drive-letter:'
- TInt driveNum = FsNotificationHelper::DriveNumber(path);
- if(path.Length() >= 2 && (driveNum < 0 || driveNum > 25) && ((TChar)driveNum)!=((TChar)'?') && ((TChar)path[1])==(TChar)':')
- {
- return KErrPathNotFound;
- }
+ TInt driveNum = CFsNotificationInfo::DriveNumber(path);
+ if(path.Length() >= 2)
+ {
+ if(path[1] != (TText)':')
+ {
+ if(path[0]!=(TText)'*')
+ {
+ return KErrPathNotFound;
+ }
+ }
+ else // 2nd char is ':'
+ {
+ if(driveNum < EDriveA || driveNum > EDriveZ)
+ {
+ if(path[0]!=(TText)'?')
+ return KErrPathNotFound;
+ }
+ }
+ }
CleanupStack::PushL(notifyRequest);
- CFsNotificationPathFilter* filter = CFsNotificationPathFilter::NewL(path,filename);
+ TPtrC pathPtr(path);
+ if(driveNum!=KErrNotFound || ((path.Length() >=1) && path[0]=='?'))
+ //Remove the drive: part of the the path if it's got one.
+ pathPtr.Set(path.Mid(2));
+ CFsNotificationPathFilter* filter = CFsNotificationPathFilter::NewL(pathPtr,filename,driveNum);
//Bitmask of filter types
TUint filterMask = (TUint) aRequest->Message().Int0();
--- a/userlibandfileserver/fileserver/sfile/sf_notify.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_notify.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -16,14 +16,866 @@
//
#include "sf_std.h"
+#include "sf_notifier.h"
+#include "sf_pool.h"
-
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+#include <f32notification.h>
+#endif
TChangeQue FsNotify::iChangeQues[KMaxNotifyQues];
TDiskSpaceQue FsNotify::iDiskSpaceQues[KMaxDiskQues];
TDebugQue FsNotify::iDebugQue;
TDismountNotifyQue FsNotify::iDismountNotifyQue;
+_LIT(KEmptyString,"");
+
+CFsNotificationInfoBody::CFsNotificationInfoBody()
+: iSrc(KEmptyString),
+ iSrcBuf(KEmptyString),
+ iDest(KEmptyString),
+ iDestDriveStored(EFalse),
+ iFunction(KErrNotFound),
+ iData(KErrNotFound),
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+ iNotificationType(TFsNotification::EOverflow),
+#else
+ iNotificationType(KErrNotFound),
+#endif
+ iUid(TUid::Null())
+ {
+ }
+
+CFsNotificationInfo::CFsNotificationInfo()
+ {
+ }
+
+/*
+ * These do not get deleted, they get Freed via CFsNotificationInfo::Free.
+ */
+CFsNotificationInfo::~CFsNotificationInfo()
+ {
+ Fault(ENotificationInfoDeletion);
+ }
+
+TInt CFsNotificationInfo::Init(TInt aFunction, TInt aDriveNum)
+ {
+ //Clean notification before use
+ CleanNotification();
+
+ iBody->iFunction = aFunction;
+ TInt err = SetDriveNumber(aDriveNum);
+ if(err != KErrNone)
+ {
+ return err;
+ }
+
+ //Set notification type
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+ CFsNotificationInfo::NotificationType(iBody->iFunction, iBody->iNotificationType);
+#else
+ iBody->iNotificationType = KErrNotSupported;
+#endif
+ return KErrNone;
+ }
+
+void CFsNotificationInfo::CleanNotification()
+ {
+ //Clear all variables
+ TParsePtrC empty(KEmptyString);
+ memcpy(&iBody->iSrc,&empty,sizeof(TParsePtrC));
+ memcpy(&iBody->iDest,&empty,sizeof(TParsePtrC));
+ iBody->iData = KErrNotFound;
+ iBody->iRequest = NULL;
+ iBody->iDriveNumber = KErrNotFound;
+ iBody->iUid = TUid::Null();
+ iBody->iDestDriveStored = EFalse;
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+ iBody->iNotificationType=TFsNotification::EOverflow;
+#else
+ iBody->iNotificationType=KErrNotFound;
+#endif
+ }
+
+EXPORT_C CFsNotificationInfo* CFsNotificationInfo::Allocate(const CMountCB& aMount, TInt aFunction)
+ {
+ CFsNotificationInfo* info = NotificationInfoPool->Allocate();
+ __ASSERT_DEBUG(info,User::Panic(_L("CFsNotificationInfo::Allocate, Could not allocate"),KErrNotFound));
+
+ TInt driveNum = aMount.Drive().DriveNumber();
+ __ASSERT_ALWAYS((driveNum >= EDriveA && driveNum <= EDriveZ), User::Panic(_L("CFsNotificationInfo::Allocate - Invalid Drive Num"),KErrArgument));
+ TInt err = info->Init(aFunction,driveNum);
+ if(err != KErrNone)
+ {
+ Free(info);
+ return NULL;
+ }
+ return info;
+ }
+
+
+CFsNotificationInfo* CFsNotificationInfo::Allocate(CFsMessageRequest& aRequest)
+ {
+ //Get a notification Info block from the pool.
+ CFsNotificationInfo* notificationInfo = NotificationInfoPool->Allocate();
+
+ //Set the function and call Init.
+ TInt function = aRequest.Operation()->Function();
+ notificationInfo->iBody->iFunction = function;
+ TInt err = notificationInfo->Init(function,aRequest.DriveNumber());
+ if(err != KErrNone)
+ {
+ CFsNotificationInfo::Free(notificationInfo);
+ return NULL;
+ }
+
+ //Set request
+ notificationInfo->SetRequest(&aRequest);
+
+ //Set UID
+ notificationInfo->SetUid(aRequest.Uid());
+
+ //Set notification type
+#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+ CFsNotificationInfo::SetData(&aRequest,notificationInfo);
+#endif
+
+ CFsClientMessageRequest& msgRequest = (CFsClientMessageRequest&)aRequest;
+
+ //Get and store Src
+ CFsNotificationInfo::PathName(msgRequest,notificationInfo->Source());
+
+ //Get and store NewName/Dest
+ switch(function)
+ {
+ case EFsFileRename:
+ case EFsRename:
+ case EFsReplace:
+ case EFsSetDriveName:
+ case EFsSetVolume:
+ {
+ CFsNotificationInfo::NewPathName((CFsClientMessageRequest&)aRequest,notificationInfo->NewName());
+ notificationInfo->iBody->iDestDriveStored = ETrue;
+ }
+ default:
+ break;
+ }
+ return notificationInfo;
+ }
+
+CFsNotificationInfo* CFsNotificationInfo::Allocate(TInt aFunction, TInt aDrive)
+ {
+ //Get a notification Info block from the pool.
+ CFsNotificationInfo* notificationInfo = NotificationInfoPool->Allocate();
+
+ //Set the function and call Init.
+ notificationInfo->iBody->iFunction = aFunction;
+ TInt err = notificationInfo->Init(aFunction,aDrive);
+ if(err != KErrNone)
+ {
+ CFsNotificationInfo::Free(notificationInfo);
+ return NULL;
+ }
+
+ //Set request (NULL)
+ notificationInfo->SetRequest(NULL);
+
+ //Set UID (KNullUid)
+ notificationInfo->SetUid(TUid::Null());
+ return notificationInfo;
+ }
+
+EXPORT_C void CFsNotificationInfo::Free(CFsNotificationInfo*& aNotificationInfo)
+ {
+ __ASSERT_DEBUG(aNotificationInfo,User::Panic(_L("CFsNotificationInfo::Free - KErrArgument"), KErrArgument));
+ NotificationInfoPool->Free(aNotificationInfo);
+ aNotificationInfo = NULL;
+ }
+
+
+TInt CFsNotificationInfo::Initialise()
+ {
+ //Have to trap as sf_main.cpp commonInitialize doesn't.
+ TRAPD(r, NotificationInfoPool = CFsPool<CFsNotificationInfo>::New(KMaxDrives,CFsNotificationInfo::New));
+ if(r != KErrNone)
+ return r;
+ if(!NotificationInfoPool)
+ return KErrNoMemory;
+ return KErrNone;
+ }
+
+CFsNotificationInfo* CFsNotificationInfo::New()
+ {
+ CFsNotificationInfo* info = new CFsNotificationInfo;
+ __ASSERT_ALWAYS(info,Fault(ENotifyPoolCreation));
+ info->iBody = new CFsNotificationInfoBody();
+ __ASSERT_ALWAYS(info->iBody,Fault(ENotifyPoolCreation));
+ return info;
+ }
+
+EXPORT_C TInt CFsNotificationInfo::SetSourceName(const TDesC& aSrc)
+ {
+ //Add the aSrc to a TParsePtrC (no copying the filename)
+ TParsePtrC sourceParsePtr(aSrc);
+
+ if(sourceParsePtr.DrivePresent() || !sourceParsePtr.FullName().Length())
+ return KErrArgument;
+
+ switch(iBody->iFunction)
+ {
+
+ case EFsFileWrite: //EParseSrc | EFileShare
+ case EFsFileSetSize: //EParseSrc | EFileShare
+ case EFsFileSetAtt: //EParseDst | EParseSrc, - should not use these; has share.
+ case EFsFileSet: //EParseSrc | EFileShare
+ case EFsFileSetModified: //EParseSrc | EFileShare - new
+ case EFsFileWriteDirty: //EFileShare
+ case EFsFileCreate: //EParseSrc
+ case EFsFileTemp: //EParseSrc - new
+ case EFsFileRename: //EParseDst | EParseSrc,
+ case EFsFileReplace: //EParseSrc
+ {
+ //Should look like this: \[path\]filename
+ if(!sourceParsePtr.Name().Length())
+ {
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsDelete: //EParseSrc
+ case EFsSetEntry: //EParseSrc,
+ case EFsRename: //EParseDst | EParseSrc,
+ case EFsReplace: //EParseDst | EParseSrc,
+ {
+ if(!sourceParsePtr.PathPresent() && !sourceParsePtr.NamePresent())
+ {
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsRmDir: //EParseSrc
+ case EFsMkDir: //EParseSrc
+ {
+ if(!sourceParsePtr.PathPresent())
+ {
+ return KErrArgument;
+ }
+ break;
+ }
+ /*case EFsFormatNext: //EParseSrc
+ case EFsDismountFileSystem: //0
+ case EFsMountFileSystem: //0
+ case EFsSetVolume: //0
+ case EFsSetDriveName: //ESync
+ case EFsRawDiskWrite: //EParseSrc
+ case EFsMountFileSystemScan: */
+ default:
+ {
+ __ASSERT_DEBUG(EFalse,User::Panic(_L("CFsNotificationInfo::SetSourceName Invalid Operation"),KErrArgument));
+ return KErrNotSupported;
+ }
+ }
+ memcpy(&iBody->iSrc,&sourceParsePtr,sizeof(TParsePtrC));
+ return KErrNone;
+ }
+
+EXPORT_C TInt CFsNotificationInfo::SetNewName(const TDesC& aDest)
+ {
+ //Add the aSrc to a TParsePtr for some validation without copying the filename
+ TParsePtrC destParsePtr(aDest);
+
+ if(destParsePtr.DrivePresent() || !destParsePtr.FullName().Length())
+ return KErrArgument;
+
+ switch(iBody->iFunction)
+ {
+ case EFsFileRename: //EParseDst | EParseSrc,
+ case EFsRename: //EParseDst | EParseSrc,
+ case EFsReplace: //EParseDst | EParseSrc,
+ {
+ if(!destParsePtr.PathPresent() && !destParsePtr.NamePresent())
+ {
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsSetDriveName:
+ case EFsSetVolume:
+ {
+ if(!destParsePtr.NamePresent())
+ {
+ return KErrArgument;
+ }
+ break;
+ }
+ default:
+ {
+ __ASSERT_DEBUG(ETrue,User::Panic(_L("CFsNotificationInfo::SetNewName Invalid Operation"),KErrArgument));
+ }
+ }
+
+ memcpy(&iBody->iDest,&destParsePtr,sizeof(TParsePtrC));
+ return KErrNone;
+ }
+
+EXPORT_C TInt CFsNotificationInfo::SetFilesize(TInt64 aFilesize)
+ {
+ if(aFilesize<0)
+ return KErrArgument;
+
+ iBody->iData = aFilesize;
+ return KErrNone;
+ }
+EXPORT_C TInt CFsNotificationInfo::SetAttributes(TUint aSet,TUint aCleared)
+ {
+ iBody->iData = MAKE_TUINT64(aSet,aCleared);
+ return KErrNone;
+ }
+
+EXPORT_C TInt CFsNotificationInfo::SetUid(const TUid& aUid)
+ {
+ iBody->iUid = aUid;
+ return KErrNone;
+ }
+
+
+TInt CFsNotificationInfo::SetDriveNumber(TInt aDriveNumber)
+ {
+ if(aDriveNumber >= EDriveA && aDriveNumber <= EDriveZ)
+ {
+ iBody->iDriveNumber = aDriveNumber;
+ return KErrNone;
+ }
+ return KErrArgument;
+ }
+void CFsNotificationInfo::SetRequest(CFsRequest* aRequest)
+ {
+ iBody->iRequest = aRequest;
+ }
+TInt CFsNotificationInfo::Function()
+ { return iBody->iFunction; }
+TInt CFsNotificationInfo::DriveNumber()
+ { return iBody->iDriveNumber; }
+TParsePtrC& CFsNotificationInfo::Source()
+ {
+ switch(iBody->iFunction)
+ {
+ case EFsFormatNext: //EParseSrc
+ case EFsDismountFileSystem: //0
+ case EFsMountFileSystem: //0
+ case EFsSetVolume: //0
+ case EFsSetDriveName: //ESync
+ case EFsRawDiskWrite: //EParseSrc
+ case EFsMountFileSystemScan:
+ {
+ _LIT(KFormatDrive,"?:");
+ iBody->iSrcBuf = KFormatDrive;
+ iBody->iSrcBuf[0] = TText(DriveNumber() + 'A');
+ TParsePtrC parse(iBody->iSrcBuf);
+ memcpy(&iBody->iSrc,&parse,sizeof(TParsePtrC));
+ }
+ }
+ return iBody->iSrc;
+ }
+TParsePtrC& CFsNotificationInfo::NewName()
+ { return iBody->iDest; }
+CFsRequest* CFsNotificationInfo::Request()
+ { return iBody->iRequest; }
+TInt64* CFsNotificationInfo::Data()
+ { return &iBody->iData; }
+TUid& CFsNotificationInfo::Uid()
+ { return iBody->iUid; }
+TNotificationType& CFsNotificationInfo::NotificationType()
+ { return iBody->iNotificationType; }
+TBool CFsNotificationInfo::DestDriveIsSet()
+ { return iBody->iDestDriveStored; }
+TInt CFsNotificationInfo::SourceSize()
+ {
+ TInt size = Source().FullName().Size();
+ if(NotificationType()!=TFsNotification::EMediaChange &&
+ NotificationType()!=TFsNotification::EDriveName &&
+ NotificationType()!=TFsNotification::EVolumeName)
+ {
+ size += sizeof(TText)*2;
+ }
+ return size;
+ }
+TInt CFsNotificationInfo::NewNameSize()
+ {
+ TInt size = NewName().FullName().Size();
+ if(!DestDriveIsSet())
+ size += sizeof(TText)*2;
+ return size;
+ }
+
+//Get the path of the file, folder or drive name based on the TFsMessage function
+void CFsNotificationInfo::PathName(CFsClientMessageRequest& aRequest, TParsePtrC& aPath)
+ {
+ __PRINT(_L("CFsNotificationInfo::PathName"));
+ //Get the notification type
+ TInt function = aRequest.Operation()->Function();
+
+ //Get the filename(s)
+ switch(function)
+ {
+ case EFsFileWrite: //EParseSrc | EFileShare
+ case EFsFileSetSize: //EParseSrc | EFileShare
+ case EFsFileSetAtt: //EParseDst | EParseSrc, - should not use these; has share.
+ case EFsFileSet: //EParseSrc | EFileShare
+ case EFsFileSetModified: //EParseSrc | EFileShare - new
+ case EFsFileWriteDirty: //EFileShare
+ {
+ CFileShare* share = NULL;
+ CFileCB* file = NULL;
+ GetFileFromScratch(&aRequest,share,file);
+ TParsePtrC ptrC(file->iFileName->Des());
+ memcpy(&aPath,&ptrC,sizeof(TParsePtrC));
+ break;
+ }
+ case EFsFileCreate: //EParseSrc
+ case EFsFileTemp: //EParseSrc - new
+ case EFsDelete: //EParseSrc
+ case EFsSetEntry: //EParseSrc,
+ case EFsFileRename: //EParseDst | EParseSrc,
+ case EFsRename: //EParseDst | EParseSrc,
+ case EFsReplace: //EParseDst | EParseSrc,
+ case EFsFileReplace: //EParseSrc
+ {
+ TParsePtrC parsePtrC(aRequest.Src().FullName().Mid(2)); //Don't want drive letter
+ memcpy(&aPath,&parsePtrC,sizeof(TParsePtrC));
+ break;
+ }
+ case EFsRmDir: //EParseSrc
+ case EFsMkDir: //EParseSrc
+ {
+ TParsePtrC parsePtrC(aRequest.Src().Path());
+ memcpy(&aPath,&parsePtrC,sizeof(TParsePtrC));
+ break;
+
+ //aPath.Set(aRequest.Src().DriveAndPath(),NULL,NULL);
+ //break;
+ }
+ case EFsFormatNext: //EParseSrc
+ case EFsDismountFileSystem: //0
+ case EFsMountFileSystem: //0
+ case EFsSetVolume: //0
+ case EFsSetDriveName: //ESync
+ case EFsRawDiskWrite: //EParseSrc
+ case EFsLockDrive:
+ case EFsUnlockDrive:
+ case EFsReserveDriveSpace:
+ case EFsMountFileSystemScan:
+ {
+ break;
+ }
+ default:
+ ASSERT(0);
+ break;
+ }
+ }
+
+//Get the new path of the file, folder or drive name based on the TFsMessage function
+void CFsNotificationInfo::NewPathName(CFsClientMessageRequest& aRequest, TParsePtrC& aNewPath)
+ {
+ __PRINT(_L("CFsNotificationInfo::NewPathName"));
+ //Get the notification type
+ TInt function = aRequest.Operation()->Function();
+
+ //Get the filename(s)
+ switch(function)
+ {
+ case EFsFileRename: //EParseDst | EParseSrc,
+ case EFsRename: //EParseDst | EParseSrc,
+ case EFsReplace: //EParseDst | EParseSrc,
+ {
+ //We must provide the drive letter too as in the case
+ //of the file being monitored being renamed to a
+ //different drive.
+ //In that case we need to provide the new drive letter to the client.
+ TParsePtrC ptrC(aRequest.Dest().FullName());
+ memcpy(&aNewPath,&ptrC,sizeof(TParsePtrC));
+ break;
+ }
+ case EFsSetVolume: //EParseDst
+ case EFsSetDriveName: //ESync | EParseDst
+ {
+ TParsePtrC ptrC(aRequest.Dest().FullName());
+ memcpy(&aNewPath,&ptrC,sizeof(TParsePtrC));
+ break;
+ }
+ default:
+ {
+ ASSERT(0);
+ }
+ }
+ }
+
+//Get the size of the notification based on its type
+TInt CFsNotificationInfo::NotificationSize(CFsNotificationInfo& aRequest)
+ {
+ __PRINT(_L("CFsNotificationInfo::NotificationSize"));
+
+ /*
+ * If there are no new names, the order of the data in the buffer is:
+ * Word1 : NotificationSize (2 bytes) , PathSize (2 bytes)
+ * Word2 : NotificationType (Lower 2 bytes)
+ * Word3 : UID
+ * Word(s) : Path (TText8) , [Any sub-class members]
+ *
+ * Else for notification types ERename, EVolumeName and EDriveName the order is:
+ * Word1 : NotificationSize (2 bytes) , PathSize (2 bytes)
+ * Word2 : NewNameSize (2 bytes) , NotificationType (2 bytes)
+ * Word3 : UID
+ * Word(s) : Path (TText8) , NewName (TText8)
+ *
+ * EOverflow size: KNotificationHeaderSize
+ */
+
+ //Size of the filename +(with '<drive>:')
+ TInt size = KNotificationHeaderSize + Align4(aRequest.SourceSize());
+
+ switch(aRequest.NotificationType())
+ {
+ //NewName
+ case TFsNotification::ERename:
+ case TFsNotification::EVolumeName:
+ case TFsNotification::EDriveName:
+ {
+ if(!aRequest.NewName().FullName().Length())
+ __ASSERT_ALWAYS(false,User::Panic(_L("CFsNotificationInfo::NotificationSize"),KErrArgument));
+
+ size += Align4(aRequest.NewNameSize());
+ break;
+ }
+ case TFsNotification::EFileChange:
+ {
+ size += sizeof(TInt64);
+ break;
+ }
+ case TFsNotification::EAttribute:
+ {
+ size += sizeof(TUint64);
+ break;
+ }
+ case TFsNotification::ECreate:
+ case TFsNotification::EDelete:
+ case TFsNotification::EMediaChange:
+ {
+ break;
+ }
+ default:
+ {
+ ASSERT(0);
+ break;
+ }
+ }
+ return (TUint16) size;
+ }
+
+
+TNotificationType CFsNotificationInfo::NotificationType(TInt& aIndex)
+ {
+ __PRINT(_L("CFsNotificationInfo::NotificationType(TInt)"));
+ __ASSERT_DEBUG(aIndex < KNumRegisterableFilters, Fault(ENotificationFault));
+
+ switch(aIndex) //No break statements here on purpose
+ {
+ case 7 : return TFsNotification::EMediaChange;
+ case 6 : return TFsNotification::EDriveName;
+ case 5 : return TFsNotification::EVolumeName;
+ case 4 : return TFsNotification::EDelete;
+ case 3 : return TFsNotification::EAttribute;
+ case 2 : return TFsNotification::ECreate;
+ case 1 : return TFsNotification::ERename;
+ case 0 : return TFsNotification::EFileChange;
+ default: ASSERT(0); return (TFsNotification::TFsNotificationType) 0;
+ }
+ }
+
+//Get the array index of the notification based on its type
+TInt CFsNotificationInfo::TypeToIndex(TNotificationType aType)
+ {
+ __PRINT(_L("CFsNotificationInfo::ArrayIndex"));
+
+ TInt index = 0;
+ switch(aType) //No break statements here on purpose
+ {
+ case TFsNotification::EMediaChange: index++;
+ case TFsNotification::EDriveName: index++;
+ case TFsNotification::EVolumeName: index++;
+ case TFsNotification::EDelete: index++;
+ case TFsNotification::EAttribute: index++;
+ case TFsNotification::ECreate: index++;
+ case TFsNotification::ERename: index++;
+ case TFsNotification::EFileChange: // skip;
+ default: break;
+ }
+ __ASSERT_DEBUG(index < KNumRegisterableFilters, Fault(ENotificationFault));
+ return index;
+ }
+
+TInt CFsNotificationInfo::DriveNumber(const TPtrC& aPath)
+ {
+ if(aPath.Length() >= 1)
+ {
+ TInt drive;
+ TInt r = RFs::CharToDrive(aPath[0],drive);
+ if(r!=KErrNone)
+ return KErrNotFound;
+ return drive;
+ }
+ return KErrNotFound;
+ }
+
+//Get the attributes set and cleared
+void CFsNotificationInfo::Attributes(CFsMessageRequest& aRequest, TUint& aSet, TUint& aClear)
+ {
+ __PRINT(_L("CFsNotificationInfo::Attributes"));
+
+ TInt function = aRequest.Operation()->Function();
+ const RMessage2& msg = aRequest.Message();
+
+ //Client notification
+ switch(function)
+ {
+ case EFsFileSet:
+ {
+ aSet = msg.Int1();
+ aClear = msg.Int2();
+ break;
+ }
+ case EFsFileSetAtt:
+ {
+ aSet = msg.Int0();
+ aClear = msg.Int1();
+ break;
+ }
+ case EFsSetEntry:
+ {
+ aSet = msg.Int2();
+ aClear = msg.Int3();
+ break;
+ }
+ default:
+ {
+ ASSERT(0);
+ break;
+ }
+ }
+ }
+
+TInt64 CFsNotificationInfo::FileSize(CFsMessageRequest& aRequest)
+ {
+ CFileShare* share = NULL;
+ CFileCB* file = NULL;
+ GetFileFromScratch(&aRequest, share, file);
+ TInt64 size = file->CachedSize64();
+ return size;
+ }
+
+
+void CFsNotificationInfo::SetData(CFsMessageRequest* aRequest, CFsNotificationInfo* aNotificationInfo)
+ {
+ TInt function = aRequest->Operation()->Function();
+
+ switch(function)
+ {
+ case EFsFileWrite:
+ case EFsFileWriteDirty:
+ case EFsFileSetSize:
+ {
+ aNotificationInfo->SetFilesize(FileSize(*aRequest));
+ break;
+ }
+ case EFsSetEntry:
+ case EFsFileSetAtt:
+ case EFsFileSet:
+ {
+ TUint set = 0;
+ TUint clear = 0;
+ Attributes(*aRequest,set,clear);
+ *(aNotificationInfo->Data())= MAKE_TUINT64(set,clear);
+ break;
+ }
+ default:
+ {
+ return;
+ }
+ }
+ }
+
+TInt CFsNotificationInfo::ValidateNotification(CFsNotificationInfo& aNotificationInfo)
+ {
+ //Validate UID
+ if(aNotificationInfo.Uid() == TUid::Null())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Uid not set"),KErrArgument));
+ return KErrArgument;
+ }
+
+ switch(aNotificationInfo.Function())
+ {
+ case EFsFileWrite:
+ case EFsFileWriteDirty:
+ case EFsFileSetSize:
+ {
+ if(*aNotificationInfo.Data() == -1)
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - File size not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(!aNotificationInfo.Source().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Source Name not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(aNotificationInfo.NewName().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - New Name set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsRename:
+ case EFsFileRename:
+ case EFsReplace:
+ case EFsSetVolume:
+ case EFsSetDriveName:
+ {
+ if(!aNotificationInfo.Source().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Source Name not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(!aNotificationInfo.NewName().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - New Name not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(*aNotificationInfo.Data() != -1)
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Data set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsMkDir:
+ case EFsFileCreate:
+ case EFsFileReplace:
+ case EFsDelete:
+ case EFsRmDir:
+ {
+ if(!aNotificationInfo.Source().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Source Name not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(aNotificationInfo.NewName().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - New Name set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ if(*aNotificationInfo.Data() != -1)
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Data set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsFileSetAtt:
+ case EFsFileSet:
+ case EFsSetEntry:
+ {
+ if(!aNotificationInfo.Source().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Source Name not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(*aNotificationInfo.Data() == -1)
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Attributes not set"),KErrArgument));
+ return KErrArgument;
+ }
+ if(aNotificationInfo.NewName().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - New Name set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ break;
+ }
+ case EFsDismountFileSystem:
+ case EFsMountFileSystem:
+ case EFsFormatNext:
+ case EFsRawDiskWrite:
+ case EFsMountFileSystemScan:
+ {
+ if(aNotificationInfo.NewName().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - New Name set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ if(aNotificationInfo.Source().FullName().Length())
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Source Name set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ if(*aNotificationInfo.Data() != -1)
+ {
+ __ASSERT_DEBUG(false,User::Panic(_L("::ValidateNotification - Data set in err"),KErrArgument));
+ return KErrArgument;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ return KErrNone;
+ }
+
+TUint CFsNotificationInfo::NotifyType(TInt aFunction)
+//
+// Convert aFunction that caused the notification to a
+// value corresponding to the correct TNotifyType enum
+//
+ {
+ switch (aFunction)
+ {
+ case EFsFileCreate:
+ case EFsFileReplace:
+ case EFsDelete:
+ case EFsReplace:
+ case EFsFileRename:
+ return(ENotifyFile|ENotifyEntry);
+ case EFsMkDir:
+ case EFsRmDir:
+ return(ENotifyDir|ENotifyEntry);
+ case EFsRename:
+ return(ENotifyDir|ENotifyFile|ENotifyEntry);
+ case EFsSetVolume:
+ return(ENotifyDisk|ENotifyEntry);
+ case EFsFileSet:
+ case EFsFileSetAtt:
+ case EFsFileSetModified:
+ case EFsFileSetSize:
+ case EFsSetEntry:
+ return(ENotifyAttributes);
+ case EFsFileWrite:
+ case EFsFileWriteDirty:
+ return(ENotifyWrite);
+ case EFsRawDiskWrite:
+ case EFsLockDrive:
+ case EFsUnlockDrive:
+ return(ENotifyDisk);
+ case EFsFileTemp:
+ case EFsSetDriveName:
+ return(ENotifyAll);
+ default:
+ return(0);
+ }
+ }
+
void CNotifyInfo::Initialise(TInfoType aType,TRequestStatus* aStatus,const RMessagePtr2& aMessage,CSessionFs* aSession)
//
//
@@ -67,16 +919,16 @@
CNotifyInfo::Initialise(EStdChange,aStatus,aMessage,aSession);
}
-TUint CStdChangeInfo::RequestNotifyType(CFsRequest* aRequest)
+TUint CStdChangeInfo::RequestNotifyType(CFsNotificationInfo* aRequest)
//
// return notification type for the request
//
{
- TUint notifyType=aRequest->Operation()->NotifyType();
- if(aRequest->Operation()->Function()==EFsRename)
+ TUint notifyType=CFsNotificationInfo::NotifyType(aRequest->Function());
+ if(aRequest->Function()==EFsRename)
{
__ASSERT_DEBUG(notifyType==(ENotifyDir|ENotifyFile|ENotifyEntry),Fault(EStdChangeRequestType));
- if(aRequest->Src().NamePresent())
+ if(aRequest->Source().NamePresent())
notifyType=ENotifyFile|ENotifyEntry;
else
notifyType=ENotifyDir|ENotifyEntry;
@@ -84,12 +936,13 @@
return(notifyType);
}
-TBool CStdChangeInfo::IsMatching(CFsRequest* aRequest)
+
+TBool CStdChangeInfo::IsMatching(CFsNotificationInfo* aNotificationInfo)
//
// return ETrue if operation type of request matches that of change notification
//
- {
- if((iChangeType&ENotifyAll) || (iChangeType&aRequest->Operation()->NotifyType()))
+ {
+ if((iChangeType&ENotifyAll) || (iChangeType&CFsNotificationInfo::NotifyType(aNotificationInfo->Function())))
return(ETrue);
else
return(EFalse);
@@ -107,17 +960,17 @@
}
-TBool CExtChangeInfo::IsMatching(CFsRequest* aRequest)
+TBool CExtChangeInfo::IsMatching(CFsNotificationInfo* aRequest)
//
// return ETrue if operation notify type of request matches that of change notification
// and paths match
//
- {
- TInt function=aRequest->Operation()->Function();
+ {
+ TInt function=aRequest->Function();
// if a rename occurred inform any requests if their path has been changed regardless of the notification type
if(function==EFsRename)
{
- TBuf<KMaxFileName> renamePath=aRequest->Src().FullName().Mid(2);
+ TBuf<KMaxFileName> renamePath=aRequest->Source().FullName();
renamePath+=_L("*");
if (iName.MatchF(renamePath)!=KErrNotFound)
return(ETrue);
@@ -127,18 +980,14 @@
//Special case where the dir the notifier is setup on has just been created
if(function==EFsMkDir)
{
- TInt notDrive;
- RFs::CharToDrive(aRequest->Src().Drive()[0],notDrive); //can not fail as the drive letter has been parsed already
- if(aRequest->Src().Path().MatchF(iName) == 0 && aRequest->DriveNumber() == notDrive)
+ if(aRequest->Source().Path().MatchF(iName) == 0)
return ETrue;
}
- //Special case where the File the notifier is setup on has just been created by temp as the name is not known unti it has been created
+ //Special case where the File the notifier is setup on has just been created by temp as the name is not known until it has been created
if(function==EFsRename||function==EFsFileOpen||function==EFsFileCreate||function==EFsFileReplace)
{
- TInt notDrive;
- RFs::CharToDrive(aRequest->Src().Drive()[0],notDrive); //can not fail as the drive letter has been parsed already
- if(aRequest->Src().FullName().Mid(2).MatchF(iName) == 0 && aRequest->DriveNumber() == notDrive)
+ if(aRequest->Source().FullName().MatchF(iName) == 0)
return ETrue;
}
@@ -162,13 +1011,10 @@
TBuf<KMaxFileName> root=iName;
root+=_L("*");
- // NB share may be NULL if file server has initiated a flush of the file cache
- CFileShare* share;
- CFileCB* fileCache;
- GetFileFromScratch(aRequest, share, fileCache);
- if (share && share->File().FileName().MatchF(root) != KErrNotFound)
- return(ETrue);
-
+ if (aRequest->Source().FullName().MatchF(root) != KErrNotFound)
+ {
+ return(ETrue);
+ }
}
break;
case EFsSetDriveName:
@@ -186,18 +1032,26 @@
TBuf<KMaxFileName> root = iName;
root+=_L("*");
- if(aRequest->Src().FullName().Mid(2).MatchF(root)!=KErrNotFound)
+ if(aRequest->Source().FullName().MatchF(root)!=KErrNotFound)
return(ETrue);
else if(function==EFsRename||function==EFsReplace||function==EFsFileRename)
{
// - rename/replace causes the file/path to disappear
- if(aRequest->Dest().FullName().Mid(2).MatchF(root)!=KErrNotFound)
+ TPtrC newName;
+ if(aRequest->DestDriveIsSet())
+ newName.Set(aRequest->NewName().FullName().Mid(2));
+ else
+ newName.Set(aRequest->NewName().FullName());
+ if(newName.MatchF(root)!=KErrNotFound)
{
return(ETrue);
}
// - rename/replace causes the file/path to arrive
- root=aRequest->Dest().FullName().Mid(2);
+ if(aRequest->DestDriveIsSet())
+ root=aRequest->NewName().FullName().Mid(2);
+ else
+ root=aRequest->NewName().FullName();
root+=_L("*");
if (iName.MatchF(root)!=KErrNotFound)
@@ -416,7 +1270,7 @@
iQLock.Signal();
}
-void TChangeQue::CheckChange(CFsRequest* aRequest)
+void TChangeQue::CheckChange(CFsNotificationInfo& aRequest)
//
// complete any notification in que that matches aRequest
//
@@ -429,9 +1283,9 @@
__ASSERT_DEBUG(info->Type()==CNotifyInfo::EStdChange||info->Type()==CNotifyInfo::EExtChange,Fault(EChangeQueType));
TBool isMatching;
if(info->Type()==CNotifyInfo::EStdChange)
- isMatching=((CStdChangeInfo*)info)->IsMatching(aRequest);
+ isMatching=((CStdChangeInfo*)info)->IsMatching(&aRequest);
else
- isMatching=((CExtChangeInfo*)info)->IsMatching(aRequest);
+ isMatching=((CExtChangeInfo*)info)->IsMatching(&aRequest);
if(isMatching)
{
__PRINT1(_L("TChangeQue::CheckChange()-Matching info=0x%x"),info);
@@ -842,17 +1696,18 @@
return(KErrNone);
}
-void FsNotify::HandleChange(CFsRequest* aRequest,TInt aDrive)
+
+void FsNotify::HandleChange(CFsNotificationInfo& aNotificationInfo)
//
// Check whether any change notifications need to be completed due to aRequest on aDrive
//
- {
- __PRINT2(_L("FsNotify::HandleChange() aRequest=0x%x, aDrive=%d"),aRequest,aDrive);
- if(!aRequest->IsChangeNotify())
- return;
- iChangeQues[ChangeIndex(aDrive)].CheckChange(aRequest);
- iChangeQues[ChangeIndex(KDriveInvalid)].CheckChange(aRequest);
- }
+ {
+ __PRINT1(_L("FsNotify::HandleChange(TFsNotificationInfo) DriveNumber=%d"),aNotificationInfo.DriveNumber());
+ if(aNotificationInfo.Request() && !aNotificationInfo.Request()->IsChangeNotify())
+ return;
+ iChangeQues[ChangeIndex(aNotificationInfo.DriveNumber())].CheckChange(aNotificationInfo);
+ iChangeQues[ChangeIndex(KDriveInvalid)].CheckChange(aNotificationInfo);
+ }
void FsNotify::HandleDiskSpace(CFsRequest* aRequest,TInt aDrive)
--- a/userlibandfileserver/fileserver/sfile/sf_ops.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_ops.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -165,48 +165,6 @@
}
}
-TUint TOperation::NotifyType() const
-//
-// Convert operation that caused the notification to a
-// value corresponding to the correct TNotifyType enum
-//
- {
- switch (iFunction)
- {
- case EFsFileCreate:
- case EFsFileReplace:
- case EFsDelete:
- case EFsReplace:
- case EFsFileRename:
- return(ENotifyFile|ENotifyEntry);
- case EFsMkDir:
- case EFsRmDir:
- return(ENotifyDir|ENotifyEntry);
- case EFsRename:
- return(ENotifyDir|ENotifyFile|ENotifyEntry);
- case EFsSetVolume:
- return(ENotifyDisk|ENotifyEntry);
- case EFsFileSet:
- case EFsFileSetAtt:
- case EFsFileSetModified:
- case EFsFileSetSize:
- case EFsSetEntry:
- return(ENotifyAttributes);
- case EFsFileWrite:
- case EFsFileWriteDirty:
- return(ENotifyWrite);
- case EFsRawDiskWrite:
- case EFsLockDrive:
- case EFsUnlockDrive:
- return(ENotifyDisk);
- case EFsFileTemp:
- case EFsSetDriveName:
- return(ENotifyAll);
- default:
- return(0);
- }
- }
-
TBool TOperation::IsCompleted() const
//
//
--- a/userlibandfileserver/fileserver/sfile/sf_ops.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_ops.h Mon Nov 01 20:11:36 2010 +0000
@@ -34,7 +34,7 @@
{ EFsDriveList, ESync, &TFsDriveList::Initialise, NULL, &TFsDriveList::DoRequestL },
{ EFsDrive, ESync, &TFsDrive::Initialise, NULL, &TFsDrive::DoRequestL },
{ EFsVolume, 0, &TFsVolume::Initialise, NULL, &TFsVolume::DoRequestL , MSG0(EVolumeInfo)},
- { EFsSetVolume, 0, &TFsSetVolume::Initialise, NULL, &TFsSetVolume::DoRequestL },
+ { EFsSetVolume, EParseDst, &TFsSetVolume::Initialise, NULL, &TFsSetVolume::DoRequestL },
{ EFsSubst, ESync, &TFsSubst::Initialise, NULL, &TFsSubst::DoRequestL },
{ EFsSetSubst, ESync | EParseSrc, &TFsSetSubst::Initialise, NULL, &TFsSetSubst::DoRequestL },
{ EFsRealName, ESync | EParseSrc, &TFsRealName::Initialise, NULL, &TFsRealName::DoRequestL },
@@ -51,7 +51,7 @@
{ EFsEntry, EParseSrc, &TFsEntry::Initialise, NULL, &TFsEntry::DoRequestL , MSG0(EName) | MSG1(EEntry)},
{ EFsSetEntry, EParseSrc, &TFsSetEntry::Initialise, NULL, &TFsSetEntry::DoRequestL , MSG0(EName) | MSG1(ETime) | MSG2(ESetAtt) | MSG3(EClearAtt)},
{ EFsGetDriveName, ESync, &TFsGetDriveName::Initialise, NULL, &TFsGetDriveName::DoRequestL },
- { EFsSetDriveName, ESync, &TFsSetDriveName::Initialise, NULL, &TFsSetDriveName::DoRequestL },
+ { EFsSetDriveName, ESync | EParseDst, &TFsSetDriveName::Initialise, NULL, &TFsSetDriveName::DoRequestL },
{ EFsFormatSubClose, ESync, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
{ EFsDirSubClose, ESync, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
{ EFsFileSubClose, EFileShare | EFsDspObj, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
--- a/userlibandfileserver/fileserver/sfile/sf_pool.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_pool.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -23,13 +23,13 @@
//=====CFsPool=============================
template <class T>
-CFsPool<T>* CFsPool<T>::New(TInt aPoolSize)
+CFsPool<T>* CFsPool<T>::New(TInt aPoolSize, T*(*aNewFunction)())
{
CFsPool<T>* pool = new CFsPool<T>();
if(!pool)
return NULL;
- TInt r = pool->Construct(aPoolSize);
+ TInt r = pool->Construct(aPoolSize,aNewFunction);
if(r!=KErrNone)
{
delete pool;
@@ -46,20 +46,20 @@
}
template <class T>
-TInt CFsPool<T>::Construct(TInt aPoolSize)
+TInt CFsPool<T>::Construct(TInt aPoolSize,T*(*aNewFunction)())
{
- TInt r = iPoolLock.CreateLocal(KNotificationPoolSize);
+ TInt r = iPoolLock.CreateLocal(aPoolSize);
if(r != KErrNone)
return r;
- r = iFreeList.Reserve(KNotificationPoolSize);
+ r = iFreeList.Reserve(aPoolSize);
if(r != KErrNone)
return r;
TInt i = 0;
while(i < aPoolSize)
{
- T* t = T::New();
+ T* t = aNewFunction();
if(!t)
{
return KErrNoMemory;
@@ -120,9 +120,9 @@
iPoolLock.Signal();
}
+//These are needed here because the compiler needs to know which types will be
+//instantiating the template (because it's in a separate file)
#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
-//This is needed here because the compiler needs to know which types will be
-//instantiating the template (because it's in a separate file)
template class CFsPool<CFsNotificationBlock>;
#endif //SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
-
+template class CFsPool<CFsNotificationInfo>;
--- a/userlibandfileserver/fileserver/sfile/sf_pool.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_pool.h Mon Nov 01 20:11:36 2010 +0000
@@ -27,13 +27,14 @@
class CFsPool
{
public:
- static CFsPool<T>* New(TInt aPoolSize);
+
+ static CFsPool<T>* New(TInt aPoolSize,T*(*aNewFunction)());
~CFsPool();
/*
* Allocate returns a pointer of class T.
* The pointer returned is removed from the pool.
- * When the pool is empty this function will wait.
+ * WAITs when the pool is empty.
*/
T* Allocate();
@@ -44,7 +45,7 @@
void Free(T* aBlock);
private:
CFsPool();
- TInt Construct(TInt aPoolSize);
+ TInt Construct(TInt aPoolSize,T*(*aNewFunction)());
void Lock();
void Unlock();
--- a/userlibandfileserver/fileserver/sfile/sf_request.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_request.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -471,6 +471,19 @@
return(-1);
}
+/*
+ * Gets the UID of the client
+ */
+TUid CFsRequest::Uid()
+ {
+ return TUid::Null();
+ }
+
+TUid CFsMessageRequest::Uid()
+ {
+ return iUID;
+ }
+
TBool CFsMessageRequest::IsNotifierSpecific() const
{
@@ -910,11 +923,12 @@
}
-void CFsMessageRequest::Set(const RMessage2& aMessage,const TOperation& aOperation,CSessionFs* aSession)
+void CFsMessageRequest::Set(const RMessage2& aMessage,const TOperation& aOperation,CSessionFs* aSession, TUid aUid)
//
//
//
{
+ iUID = aUid;
iCurrentPlugin=NULL;
iMessage=aMessage;
iDrive=NULL;
@@ -924,11 +938,6 @@
EnablePostIntercept(ETrue);
}
-void CFsMessageRequest::Set(const TOperation& aOperation)
- {
- iOperation=const_cast<TOperation*>(&aOperation);
- }
-
void CFsMessageRequest::Process()
//
// Process the request - (passing to a plugin or a drive thread)
@@ -1326,10 +1335,46 @@
if(aError==KErrNone)
{
+ //Get a notificationInfo block (freed again after notification complete)
+ CFsNotificationInfo* notificationInfo = NULL;
+
if(!(FsNotify::IsChangeQueEmpty(driveNumber)))
- FsNotify::HandleChange(this,driveNumber);
-
+ {
+ if(CFsNotificationInfo::NotifyType(Operation()->Function()))
+ {
+ notificationInfo = CFsNotificationInfo::Allocate(*this);
+ if(notificationInfo)
+ FsNotify::HandleChange(*notificationInfo);
+ }
+ }
+
+
#ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
+
+ if(!FsNotificationManager::IsInitialised())
+ {
+ if(notificationInfo)
+ {
+ CFsNotificationInfo::Free(notificationInfo);
+ }
+ return;
+ }
+
+ if(!notificationInfo)
+ {
+ TFsNotification::TFsNotificationType type;
+ CFsNotificationInfo::NotificationType(Operation()->Function(),type);
+ if(type)
+ {
+ notificationInfo = CFsNotificationInfo::Allocate(*this);
+ if(!notificationInfo)
+ return;
+ }
+ else
+ {
+ return;
+ }
+ }
if (iOperation->iFunction == EFsFileWrite)
{
CFileShare* share = (CFileShare*) this->ScratchValue();
@@ -1339,29 +1384,19 @@
// Manage notifications for write with no cache or a write-through
if (!fileCache || !fileCache->IsDirty())
{
- FsNotificationManager::HandleChange((CFsClientMessageRequest&)*this);
+ FsNotificationManager::HandleChange(*notificationInfo);
}
}
- else if((iOperation->iFunction == EFsFileWriteDirty) && FsNotificationManager::IsInitialised())
- {
- CFileShare* share;
- CFileCB* file;
- GetFileFromScratch(this, share, file);
-
- TFileName path;
- path.Append(file->DriveNumber() + 'A');
- path.Append(':');
- path.Append(file->FileName().Des());
-
- // Manage notifications for write with caching enabled
- FsNotificationManager::HandleChange((CFsClientMessageRequest*)this, path, TFsNotification::EFileChange);
- }
else if(IsNotifierSupported())
{
- FsNotificationManager::HandleChange((CFsClientMessageRequest&)*this);
+ FsNotificationManager::HandleChange(*notificationInfo);
}
#endif //SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
- }
+
+ //Free the notificationInfo block
+ if(notificationInfo)
+ CFsNotificationInfo::Free(notificationInfo);
+ }// Err==KErrNone
}
void CFsMessageRequest::DoNotifyDiskSpace(TInt aError)
@@ -1782,7 +1817,7 @@
void CFsMessageRequest::SetOperationFunc(TInt aFunction)
{
const TOperation& oP = OperationArray[aFunction];
- Set(oP);
+ iOperation = const_cast<TOperation*>(&oP);
// modified because some requests were set to PostInitialise. They are set to DoRequest in Dispatch anyway, so this is possibly ok?
//__ASSERT_ALWAYS(iReqState == EReqStateDoRequest, Fault(EInvalidMsgState));
}
--- a/userlibandfileserver/fileserver/sfile/sf_ses.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_ses.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -375,13 +375,13 @@
TInt TFsSetDriveName::DoRequestL(CFsRequest* aRequest)
{
TInt driveNum=aRequest->Drive()->DriveNumber();
- TFileName driveName;
- aRequest->ReadL(KMsgPtr1,driveName);
+
// Validate name - return KErrBadName if it contains illegal characters such as
// * ? / | > <
- TNameChecker checker(driveName);
+ TPtrC driveName(aRequest->Dest().FullName());
+ TNameChecker checker(driveName);
TText badChar;
if (checker.IsIllegalName(badChar))
return(KErrBadName);
@@ -398,7 +398,7 @@
}
if (TheDriveNames[driveNum]==NULL || TheDriveNames[driveNum]->Des().MaxLength()<len)
return(KErrNoMemory);
- *TheDriveNames[driveNum]=driveName;
+ *TheDriveNames[driveNum]=aRequest->Dest().FullName();
return(KErrNone);
}
@@ -407,6 +407,13 @@
TInt r=ValidateDrive(aRequest->Message().Int0(),aRequest);
if (r!=KErrNone)
return(r);
+
+ TFileName driveName;
+ aRequest->ReadL(KMsgPtr1,driveName);
+ r = aRequest->Dest().Set(driveName,NULL,NULL);
+ if (r!=KErrNone)
+ return(r);
+
if (!KCapFsSetDriveName.CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING("Set Drive Name")))
return KErrPermissionDenied;
return KErrNone;
--- a/userlibandfileserver/fileserver/sfile/sf_std.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_std.h Mon Nov 01 20:11:36 2010 +0000
@@ -34,7 +34,7 @@
#include "sf_func.h"
#include <f32plugin.h>
#include "f32trace.h"
-
+#include "sf_pool.h"
#define __PRINT1TEMP_ALWAYS(t,a) {{TBuf<KMaxFileName>temp(a);RDebug::Print(t,&temp);}}
#define __PRINT2TEMP_ALWAYS(t,a,b) {{TBuf<KMaxFileName>temp(b);RDebug::Print(t,a,&temp);}}
@@ -455,6 +455,8 @@
EFsObjectOpen,
EContainerHeapCorruptionOnRemove,
ESessionOpenError,
+ ENotifyPoolCreation,
+ ENotificationInfoDeletion
};
@@ -1006,7 +1008,6 @@
TBool IsChangeNotify() const;
TBool IsDiskSpaceNotify() const;
TBool IsWrite() const;
- TUint NotifyType() const;
TBool IsCompleted() const;
TBool IsOpenSubSess() const; //used to allocate for close as well as open task for subsessions
TBool IsCloseSubSess() const;
@@ -1209,8 +1210,10 @@
inline TInt FsFunction();
void Close(); // close the session & dispatch object this request is using
-public:
CFsRequest();
+
+ virtual TUid Uid();
+
protected:
inline void Set(const TOperation& aOperation,CSessionFs* aSession);
inline void Set(CSessionFs* aSession);
@@ -1262,8 +1265,7 @@
{
public:
void Set(const RMessage2& aMessage,CSessionFs* aSession);
- void Set(const RMessage2& aMessage,const TOperation& aOperation,CSessionFs* aSession);
- void Set(const TOperation& aOperation);
+ void Set(const RMessage2& aMessage,const TOperation& aOperation,CSessionFs* aSession, TUid aUid = TUid::Null());
inline void SetPostInitialise(TFsRequestFunc aCacheFunction);
//
inline void SetMessage(RMessage2& aMessage);
@@ -1305,8 +1307,7 @@
TBool IsPluginRequest();
static inline CFsMessageRequest* RequestFromMessage(const RMessagePtr2& aMessage);
- // UID of the process to touching the file. (To be used in notification framework).
- // TUid iUID;
+ virtual TUid Uid();
private:
void DoNotify(TInt aError);
void DoNotifyDiskSpace(TInt aError);
@@ -1327,6 +1328,7 @@
private:
TMsgOperation* iCurrentOperation;
TInt iLastError;
+ TUid iUID;//UID of the process this message belongs to
};
@@ -1486,8 +1488,8 @@
{
public:
void Initialise(TNotifyType aChangeType,TRequestStatus* aStatus,const RMessagePtr2& aMessage,CSessionFs* aSession);
- TUint RequestNotifyType(CFsRequest* aRequest);
- TBool IsMatching(CFsRequest* aRequest);
+ TUint RequestNotifyType(CFsNotificationInfo* aRequest);
+ TBool IsMatching(CFsNotificationInfo* aRequest);
protected:
TNotifyType iChangeType;
};
@@ -1496,7 +1498,7 @@
{
public:
void Initialise(TNotifyType aChangeType,TRequestStatus* aStatus,const RMessagePtr2& aMessage,CSessionFs* aSession,const TDesC& aName);
- TBool IsMatching(CFsRequest* aRequest);
+ TBool IsMatching(CFsNotificationInfo* aRequest);
private:
TFileName iName;
};
@@ -1557,7 +1559,7 @@
TInt AddNotify(CNotifyInfo* aInfo);
TBool CancelSession(CSessionFs* aSession,TInt aCompletionCode,TRequestStatus* aStatus=NULL);
void CancelAll(TInt aCompletionCode);
- void CheckChange(CFsRequest* aRequest);
+ void CheckChange(CFsNotificationInfo& aNotificationInfo);
TBool IsEmpty();
};
@@ -1598,6 +1600,30 @@
TBool HandlePendingDismount(CSessionFs* aSession, TInt aDrive);
};
+class CFsNotificationInfo;
+
+class CFsNotificationInfoBody : public CBase
+ {
+public:
+ CFsNotificationInfoBody();
+private:
+ TParsePtrC iSrc;
+ TBuf<2> iSrcBuf;
+ TParsePtrC iDest;
+ TBool iDestDriveStored;
+ TInt iDriveNumber;
+ TInt iFunction;
+ CFsRequest* iRequest; //Can be NULL
+
+ //CFsNotify framework
+ TInt64 iData;
+ TNotificationType iNotificationType;
+ TUid iUid;
+
+ friend class CFsNotificationInfo;
+ };
+
+
class FsNotify
{
public:
@@ -1607,7 +1633,7 @@
static TInt AddDebug(CNotifyInfo* aDebugInfo);
static TInt AddDismountNotify(CNotifyInfo* aDismountNotifyInfo);
static void DiskChange(TInt aDrive);
- static void HandleChange(CFsRequest* aRequest,TInt aDrive);
+ static void HandleChange(CFsNotificationInfo& aNotificationInfo);
static void HandleDiskSpace(CFsRequest* aRequest,TInt aDrive);
static void HandleDiskSpace(TInt aDrive, TInt64& aFreeSpace);
static void HandleDebug(TUint aFunction);
@@ -1689,6 +1715,7 @@
extern CFsObjectCon* RawDisks;
extern CFsObjectCon* Extensions;
extern CFsObjectCon* ProxyDrives;
+extern CFsPool<CFsNotificationInfo>* NotificationInfoPool;
extern CKernEventNotifier* TheKernEventNotifier;
@@ -1767,18 +1794,18 @@
TBool CompareResource(const TDesC & aThePath);
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
- TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const char* aDiag);
- TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, const char* aDiag);
- TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath,const TSecurityPolicy* aCap, const char* aDiag, TBool aExactMatchAllowed = EFalse);
+ TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const char* aDiag);
+ TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, const char* aDiag);
+ TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath,const TSecurityPolicy* aCap, const char* aDiag, TBool aExactMatchAllowed = EFalse);
#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
- TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, OnlyCreateWithNull aDiag);
- TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, OnlyCreateWithNull aDiag);
- TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath,const TSecurityPolicy* aCap, OnlyCreateWithNull aDiag, TBool aExactMatchAllowed = EFalse);
+ TInt PathCheck(const RMessage2& aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, OnlyCreateWithNull aDiag);
+ TInt PathCheck(const RMessage2& aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, OnlyCreateWithNull aDiag);
+ TInt PathCheck(const RMessage2& aRequest, const TDesC& aThePath,const TSecurityPolicy* aCap, OnlyCreateWithNull aDiag, TBool aExactMatchAllowed = EFalse);
#endif //!__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
TBool ComparePrivate(const TDesC & aThePath);
TBool CompareSystem(const TDesC & aThePath);
- TBool SIDCheck(CFsRequest* aRequest, const TDesC& aThePath);
+ TBool SIDCheck(const RMessage2& aMessage, const TDesC& aThePath);
TBool ComparePaths(const TDesC& aPath1,const TDesC& aPath2);
TUint32 CalcNameHash(const TDesC& aName);
--- a/userlibandfileserver/fileserver/sfile/sf_svr.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_svr.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -211,7 +211,7 @@
return(ret);
}
aRequest->SetScratchValue(monitorAllDrives);
- ret = PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsNotifyChangeEx, __PLATSEC_DIAGNOSTIC_STRING("Extended Change Notifier"));
+ ret = PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsNotifyChangeEx, __PLATSEC_DIAGNOSTIC_STRING("Extended Change Notifier"));
return(ret);
}
@@ -594,13 +594,9 @@
if(r != KErrNone)
return r;
- TFileName volumeName;
- aRequest->ReadL(KMsgPtr0,volumeName);
- if (volumeName.Length()>KMaxVolumeNameLength) // KMaxVolumeNameLength = 11
- return(KErrBadName);
-
// Validate name - return KErrBadName if it contains illegal characters such as * ? / | > <
- TNameChecker checker(volumeName);
+ TPtrC volumeName(aRequest->Dest().FullName());
+ TNameChecker checker(volumeName);
TText badChar;
if (checker.IsIllegalName(badChar))
return(KErrBadName);
@@ -617,6 +613,17 @@
TInt r=ValidateDriveDoSubst(aRequest->Message().Int1(),aRequest);
if (r!=KErrNone)
return(r);
+ TFileName volumeName;
+ TRAP(r,aRequest->ReadL(KMsgPtr0,volumeName));
+ if(r!=KErrNone)
+ return r;
+ if (volumeName.Length()>KMaxVolumeNameLength) // KMaxVolumeNameLength = 11
+ return(KErrBadName);
+
+ r = aRequest->Dest().Set(volumeName,NULL,NULL);
+ if(r!=KErrNone)
+ return r;
+
if (!KCapFsSetVolume.CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING("Set Volume")))
return KErrPermissionDenied;
return KErrNone;
@@ -671,7 +678,7 @@
pD->SetSubstedDrive(NULL);
return(KErrNone);
}
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysSetSubst,&KCapFsPriSetSubst,&KCapFsROSetSubst, __PLATSEC_DIAGNOSTIC_STRING("Set Subst"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysSetSubst,&KCapFsPriSetSubst,&KCapFsROSetSubst, __PLATSEC_DIAGNOSTIC_STRING("Set Subst"));
if (r!=KErrNone)
return(r);
if (pD->Att()&(KDriveAttLocal|KDriveAttRom|KDriveAttRedirected|KDriveAttSubsted))
@@ -710,7 +717,7 @@
TInt r=ParseSubstPtr0(aRequest,aRequest->Src());
if (r!=KErrNone)
return(r);
- r=PathCheck(aRequest,aRequest->Src().FullName().Mid(2),&KCapFsSysRealName,&KCapFsPriRealName, __PLATSEC_DIAGNOSTIC_STRING("Real Name"));
+ r=PathCheck(aRequest->Message(),aRequest->Src().FullName().Mid(2),&KCapFsSysRealName,&KCapFsPriRealName, __PLATSEC_DIAGNOSTIC_STRING("Real Name"));
if (r!=KErrNone)
return(r);
TFileName substName;
@@ -869,7 +876,7 @@
TInt r=ParsePathPtr0(aRequest,parse);
if (r!=KErrNone && r!=KErrInUse)
return(r);
- r=PathCheck(aRequest,parse.FullName().Mid(2),&KCapFsSysSetSessionPath,&KCapFsPriSetSessionPath, __PLATSEC_DIAGNOSTIC_STRING("Set Session Path"));
+ r=PathCheck(aRequest->Message(),parse.FullName().Mid(2),&KCapFsSysSetSessionPath,&KCapFsPriSetSessionPath, __PLATSEC_DIAGNOSTIC_STRING("Set Session Path"));
if (r!=KErrNone)
return(r);
if (IsIllegalFullName(parse.FullName()))
--- a/userlibandfileserver/fileserver/sfile/sf_utl.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_utl.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -133,14 +133,14 @@
return ETrue;
}
-TBool SIDCheck(CFsRequest* aRequest, const TDesC& aThePath)
+TBool SIDCheck(const RMessage2& aMessage, const TDesC& aThePath)
//
// Compare the Private/XXXXXXXX/ portion of a path be accessed to make sure it matches the process SID
//
{
if(aThePath.Length() >= KPrivateLengthCheck)
{
- TSecureId appUID = aRequest->Message().SecureId();
+ TSecureId appUID = aMessage.SecureId();
TBuf<KSIDLength+1> dirName;
dirName.AppendNumFixedWidth(appUID.iId, EHex, 8);
@@ -155,16 +155,16 @@
}
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
-TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, const char* aDiag)
+TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, const char* aDiag)
#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
-TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, OnlyCreateWithNull /*aDiag*/)
+TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, OnlyCreateWithNull /*aDiag*/)
#endif //!__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
//
// Compare the parsed path with protected path names path must be parsed b4 using
//
{
- if(aRequest->Message().Handle() == KLocalMessageHandle)
+ if(aMessage.Handle() == KLocalMessageHandle)
return KErrNone;
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
@@ -185,11 +185,11 @@
if(ComparePrivate(aThePath))
{
- if(SIDCheck(aRequest, aThePath))
+ if(SIDCheck(aMessage, aThePath))
return KErrNone;
else
{
- if(aPriCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aPriCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else
return KErrPermissionDenied;
@@ -197,14 +197,14 @@
}
else if(CompareSystem(aThePath))
{
- if(aSysCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aSysCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else
return KErrPermissionDenied;
}
else if(CompareResource(aThePath))
{
- if(aROCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aROCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else
return KErrPermissionDenied;
@@ -214,16 +214,16 @@
}
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
-TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const char* aDiag)
+TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const char* aDiag)
#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
-TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, OnlyCreateWithNull /*aDiag*/)
+TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, OnlyCreateWithNull /*aDiag*/)
#endif //!__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
//
// Compare the parsed path with protected path names path must be parsed b4 using
//
{
- if(aRequest->Message().Handle() == KLocalMessageHandle)
+ if(aMessage.Handle() == KLocalMessageHandle)
return KErrNone;
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
@@ -244,11 +244,11 @@
if(ComparePrivate(aThePath))
{
- if(SIDCheck(aRequest, aThePath))
+ if(SIDCheck(aMessage, aThePath))
return KErrNone;
else
{
- if(aPriCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aPriCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else
return KErrPermissionDenied;
@@ -256,7 +256,7 @@
}
else if(CompareSystem(aThePath))
{
- if(aSysCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aSysCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else
return KErrPermissionDenied;
@@ -266,16 +266,16 @@
}
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
-TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aCap, const char* aDiag, TBool aExactMatchAllowed)
+TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aCap, const char* aDiag, TBool aExactMatchAllowed)
#else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
-TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aCap, OnlyCreateWithNull /*aDiag*/, TBool aExactMatchAllowed)
+TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aCap, OnlyCreateWithNull /*aDiag*/, TBool aExactMatchAllowed)
#endif //!__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
//
// Compare the parsed path with protected path names path must be parsed b4 using
//
{
- if(aRequest->Message().Handle() == KLocalMessageHandle)
+ if(aMessage.Handle() == KLocalMessageHandle)
return KErrNone;
#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
@@ -296,11 +296,11 @@
if(ComparePrivate(aThePath))
{
- if(SIDCheck(aRequest, aThePath))
+ if(SIDCheck(aMessage, aThePath))
return KErrNone;
else
{
- if(aCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else if (aExactMatchAllowed && aThePath.Length() <= KPrivateLength + 1)
return KErrNone;
@@ -310,7 +310,7 @@
}
else if(CompareSystem(aThePath))
{
- if(aCap->CheckPolicy(aRequest->Message(), __PLATSEC_DIAGNOSTIC_STRING(diagout)))
+ if(aCap->CheckPolicy(aMessage, __PLATSEC_DIAGNOSTIC_STRING(diagout)))
return KErrNone;
else if (aExactMatchAllowed && aThePath.Length() <= KSystemLength + 1)
return KErrNone;
--- a/userlibandfileserver/fileserver/sfsrv/cl_notification.cpp Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfsrv/cl_notification.cpp Mon Nov 01 20:11:36 2010 +0000
@@ -179,7 +179,7 @@
* Word2 : NewNameSize (2 bytes) , NotificationType (2 bytes)
* Word3 : UID
* Word(s) : Path (TText8) , [Any sub-class members]
-
+ */
EXPORT_C TInt TFsNotification::DriveNumber(TInt& aDriveNumber) const
{
TPtrC path(NULL,0);
@@ -193,7 +193,7 @@
}
return r;
}
- */
+
/*
* The order of the data in the buffer is:
@@ -201,14 +201,14 @@
* Word2 : NewNameSize (2 bytes) , NotificationType (2 bytes)
* Word3 : UID
* Word(s) : Path (TText8) , [Any sub-class members]
-
+ */
EXPORT_C TInt TFsNotification::UID(TUid& aUID) const
{
TUint* word3 = PtrAdd((TUint*)this, sizeof(TUint)*2);
aUID.iUid = *word3;
return KErrNone;
}
- */
+
CFsNotificationList* CFsNotificationList::NewL(TInt aBufferSize)
@@ -321,12 +321,34 @@
}
EXPORT_C TInt CFsNotify::AddNotification(TUint aNotificationType, const TDesC& aPath, const TDesC& aFilename)
- {
- if(aNotificationType == 0 || (aPath.Length() <= 0 && aFilename.Length() <= 0))
- return KErrArgument;
+ {
+ TInt pathLength = aPath.Length();
+ if(aNotificationType == 0 || (pathLength <= 0 && aFilename.Length() <= 0))
+ return KErrArgument;
+
+ //Validate path.
+ //Paths must be fully formed. i.e. with a valid or wild drive letter.
+ if(pathLength)
+ {
+ if(aPath[0] != '*' && aPath[0] != '?')
+ {
+ TInt drive = KErrNotFound;
+ TInt r = RFs::CharToDrive(aPath[0],drive);
- return iBody->iFsNotify.AddNotification(aNotificationType, aPath, aFilename);
- }
+ if(r!=KErrNone)
+ return KErrPathNotFound;
+ if(drive < EDriveA || drive > EDriveZ)
+ return KErrPathNotFound;
+ if(pathLength < 2)
+ return KErrPathNotFound;
+ else if(aPath[1] != ':')
+ return KErrPathNotFound;
+ }
+ }
+
+
+ return iBody->iFsNotify.AddNotification(aNotificationType, aPath, aFilename);
+ }
//Removes notification request, does not close session
EXPORT_C TInt CFsNotify::RemoveNotifications()
@@ -450,19 +472,17 @@
return KErrNotSupported;
}
-/*
EXPORT_C TInt TFsNotification::DriveNumber(TInt&) const
{
Panic(ENotificationPanic);
return KErrNotSupported;
}
-EXPORT_C TInt TFsNotification::UID(TUid& aUID) const
+EXPORT_C TInt TFsNotification::UID(TUid&) const
{
Panic(ENotificationPanic);
return KErrNotSupported;
}
-*/
EXPORT_C CFsNotify* CFsNotify::NewL(RFs& , TInt)
{
--- a/userlibandfileserver/fileserver/sfsrv/cl_notification.h Tue Oct 26 12:49:20 2010 +0100
+++ b/userlibandfileserver/fileserver/sfsrv/cl_notification.h Mon Nov 01 20:11:36 2010 +0000
@@ -61,15 +61,12 @@
* All types have the following data and are aligned in the buffer like so:
* Word1 : Size (TUint16 - upper 2 bytes) , NameLength (TUint16 - lower 2 bytes),
* Word2 : Type (TUint - 4 bytes)
- * [not yet supported - Word3 : UID (TUint32 - 4 Bytes) ]
+ * Word3 : UID (TUint32 - 4 Bytes)
*
@internalTechnology
@released
*/
-const TInt KNotificationHeaderSize = (sizeof(TUint16)*2)+(sizeof(TUint));
-//
-//When UID is added:
-//const TInt KNotificationHeaderSize = (sizeof(TUint16)*2)+(sizeof(TUint))+sizeof(TUint32);
+const TInt KNotificationHeaderSize = (sizeof(TUint16)*2)+sizeof(TUint)+sizeof(TUint32);
/*
* This is the minimum allowed size of the buffer set by the client that is