diff -r 73ea206103e6 -r 43365a9b78a3 userlibandfileserver/fileserver/sfat32/sl_mnt.cpp --- a/userlibandfileserver/fileserver/sfat32/sl_mnt.cpp Wed Jun 23 19:44:53 2010 +0300 +++ b/userlibandfileserver/fileserver/sfat32/sl_mnt.cpp Tue Jul 06 15:50:07 2010 +0300 @@ -26,6 +26,7 @@ #include "sl_dir_cache.h" #include "sl_scandrv.h" #include +#include TShortName DoGenerateShortNameL(const TDesC& aLongName,TInt& aNum,TBool aUseTildeSelectively); @@ -1341,9 +1342,10 @@ FindEntryStartL(RemoveTrailingDots(aName),KEntryAttMaskSupported,firstEntry,firstEntryPos); MoveToDosEntryL(firstEntryPos,firstEntry); TUint setAttMask=aSetAttMask&KEntryAttMaskSupported; + TInt oldAtt = firstEntry.Attributes(); + TInt att = oldAtt; if (setAttMask|aClearAttMask) { - TInt att=firstEntry.Attributes(); att|=setAttMask; att&=(~aClearAttMask); firstEntry.SetAttributes(att); @@ -1352,6 +1354,8 @@ { firstEntry.SetTime(aTime,TimeOffset()); } + else if (att == oldAtt) + return; // no change - don't bother writing entry WriteDirEntryL(firstEntryPos,firstEntry); } @@ -3623,23 +3627,36 @@ case EDisableFATDirCache: { MWTCacheInterface* pDirCache = iRawDisk->DirCacheInterface(); - TUint32 KEDisableFATDirCache = CDynamicDirCache::EDisableCache; + TUint32 KEDisableFATDirCache = MWTCacheInterface::EDisableCache; pDirCache->Control(KEDisableFATDirCache, (TUint32) aParam1, NULL); break; } case EDumpFATDirCache: { MWTCacheInterface* pDirCache = iRawDisk->DirCacheInterface(); - TUint32 KEDumpFATDirCache = CDynamicDirCache::EDumpCache; - pDirCache->Control(KEDumpFATDirCache, 0, NULL); + if (pDirCache) + { + TUint32 KEDumpFATDirCache = MWTCacheInterface::EDumpCache; + pDirCache->Control(KEDumpFATDirCache, 0, NULL); + } break; } case EFATDirCacheInfo: { - MWTCacheInterface* pDirCache = iRawDisk->DirCacheInterface(); - TUint32 KEFATDirCacheInfo = CDynamicDirCache::ECacheInfo; - pDirCache->Control(KEFATDirCacheInfo, 0, NULL); - break; + MWTCacheInterface* pDCache = iRawDisk->DirCacheInterface(); + if (pDCache) + { + TUint32 KEFATDirCacheInfo = MWTCacheInterface::ECacheInfo; + TDirCacheInfo aInfo; + TInt r = pDCache->Control(KEFATDirCacheInfo, 0, static_cast(&aInfo)); + if (r == KErrNone) + { + TPckgBuf pkgBuf(aInfo); + r = aMessage.Write(2,pkgBuf); + } + return r; + } + return KErrNotSupported; }