diff -r c7a0ce20c48c -r a77889bee936 userlibandfileserver/fileserver/sfile/sf_drv.cpp --- a/userlibandfileserver/fileserver/sfile/sf_drv.cpp Fri Aug 06 16:34:38 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_drv.cpp Thu Aug 12 11:55:14 2010 +0100 @@ -90,17 +90,13 @@ // Do not allow the entry type to be changed // { - const TUint KReadOnlySetAtts = KEntryAttVolume | - KEntryAttDir | - KEntryAttRemote; + const TUint KReadOnlyAtts = KEntryAttVolume | + KEntryAttDir | + KEntryAttRemote | + KEntryAttModified; - const TUint KReadOnlyClrAtts = KEntryAttVolume | - KEntryAttDir | - KEntryAttRemote | - KEntryAttModified; - - aSetAttMask &= ~KReadOnlySetAtts; - aClearAttMask &= ~KReadOnlyClrAtts; + aSetAttMask &= ~KReadOnlyAtts; + aClearAttMask &= ~KReadOnlyAtts; } void CheckForLeaveAfterOpenL(TInt leaveError, CFsRequest* aRequest, TInt aHandle) @@ -1235,6 +1231,33 @@ OstTraceData(TRACE_FILESYSTEM, FSYS_ECMOUNTCBSETENTRYL_EFILEPATH, "FilePath %S", aName.Ptr(), aName.Length()<<1); TRAP(r,CurrentMount().SetEntryL(entryName,aTime,aSetAttMask,aClearAttMask)) OstTrace1(TRACE_FILESYSTEM, FSYS_ECMOUNTCBSETENTRYLRET, "r %d", 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 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); }