--- a/userlibandfileserver/fileserver/sfile/sf_drv.cpp Thu Jul 15 20:11:42 2010 +0300
+++ b/userlibandfileserver/fileserver/sfile/sf_drv.cpp Thu Aug 19 11:14:22 2010 +0300
@@ -89,17 +89,13 @@
// Do not allow the entry type to be changed
//
{
- const TUint KReadOnlySetAtts = KEntryAttVolume |
- KEntryAttDir |
- KEntryAttRemote;
-
- const TUint KReadOnlyClrAtts = KEntryAttVolume |
- KEntryAttDir |
- KEntryAttRemote |
- KEntryAttModified;
-
- aSetAttMask &= ~KReadOnlySetAtts;
- aClearAttMask &= ~KReadOnlyClrAtts;
+ const TUint KReadOnlyAtts = KEntryAttVolume |
+ KEntryAttDir |
+ KEntryAttRemote |
+ KEntryAttModified;
+
+ aSetAttMask &= ~KReadOnlyAtts;
+ aClearAttMask &= ~KReadOnlyAtts;
}
void CheckForLeaveAfterOpenL(TInt leaveError, CFsRequest* aRequest, TInt aHandle)
@@ -547,6 +543,19 @@
TRAP(r,CurrentMount().FinaliseMountL(aOperation, aParam1, aParam2));
TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECMountCBFinaliseMount2Ret, EF32TraceUidFileSys, r);
+ // Pass FinaliseDrive notification down to media driver
+ TInt driveNumber = DriveNumber();
+ if (LocalDrives::IsValidDriveMapping(driveNumber) && !LocalDrives::IsProxyDrive(driveNumber))
+ {
+ TBusLocalDrive& drv = LocalDrives::GetLocalDrive(driveNumber);
+
+ TLocalDriveFinaliseInfoBuf finaliseBuf;
+ finaliseBuf().iMode = aOperation;
+
+ // notify local drive, ignore the error
+ drv.QueryDevice(RLocalDrive::EQueryFinaliseDrive, finaliseBuf);
+ }
+
return r;
}
@@ -1235,6 +1244,31 @@
DriveNumber(), aName, I64LOW(aTime.Int64()), I64HIGH(aTime.Int64()), aSetAttMask, aClearAttMask);
TRAP(r,CurrentMount().SetEntryL(entryName,aTime,aSetAttMask,aClearAttMask))
TRACERET1(UTF::EBorder, UTraceModuleFileSys::ECMountCBSetEntryLRet, EF32TraceUidFileSys, r);
+ // If the file is already open then write the file attributes directly to the file
+ TFileName foldedName;
+ TUint32 nameHash=0;
+ foldedName.CopyF(aName);
+ nameHash=CalcNameHash(foldedName);
+
+ __CHECK_DRIVETHREAD(iDriveNumber);
+ TDblQueIter<CFileCB> q(CurrentMount().iMountQ);
+ CMountCB* currentMount = &CurrentMount();
+ CFileCB* file;
+ while ((file=q++)!=NULL)
+ {
+ if ((&file->Drive()==this) &&
+ &file->Mount() == currentMount &&
+ nameHash == file->NameHash() &&
+ file->FileNameF().Match(foldedName)==KErrNone)
+ {
+ TUint att = file->Att();
+ att |= aSetAttMask;
+ att &= ~aClearAttMask;
+ file->SetAtt(att | KEntryAttModified);
+ file->SetModified(aTime);
+ break;
+ }
+ }
return(r);
}