userlibandfileserver/fileserver/sfat32/sl_vfat.cpp
branchRCL_3
changeset 20 597aaf25e343
parent 19 4a8fed1c0ef6
child 22 2f92ad2dc5db
--- 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)