diff -r 4a8fed1c0ef6 -r 597aaf25e343 userlibandfileserver/fileserver/sfat32/sl_vfat.cpp --- a/userlibandfileserver/fileserver/sfat32/sl_vfat.cpp Sat Feb 20 00:10:51 2010 +0200 +++ b/userlibandfileserver/fileserver/sfat32/sl_vfat.cpp Fri Mar 12 15:50:11 2010 +0200 @@ -573,6 +573,9 @@ */ void TFatDirEntry::SetVFatEntry(const TDesC& aName, TUint aLen, TUint8 aCheckSum) { + //-- LFN in the last entry must be padded with FFs + Mem::Fill(iData,sizeof(iData),0xFF); + //-- initialise some VFAT entry specific fields iData[0x0B]=0x0F; iData[0x0C]=0x00; iData[0x0D]=aCheckSum; @@ -660,10 +663,13 @@ startPos = aPos; TBool movedCluster = EFalse; + TUint nRemLen = KMaxVFatEntryName*(numEntries-1); + while(numEntries) { TFatDirEntry* pEntry = (TFatDirEntry*)(&scratchBuf[posInBuf]); - pEntry->SetVFatEntry(aLongName, KMaxVFatEntryName*(numEntries-1), cksum); //KMaxVFatEntryName=13 + + pEntry->SetVFatEntry(aLongName, nRemLen, cksum); posInBuf += KSizeOfFatDirEntry; MoveToNextEntryL(aPos); @@ -673,6 +679,9 @@ if(!numEntries || movedCluster) break; //-- VFAT entryset is completed + + ASSERT(nRemLen >= (TUint)KMaxVFatEntryName); + nRemLen -= KMaxVFatEntryName; } if(movedCluster)