Author: pschweitzer
Date: Fri May  6 21:06:31 2016
New Revision: 71270

URL: http://svn.reactos.org/svn/reactos?rev=71270&view=rev
Log:
[FASTFAT]
In case we're performing an in-place move (ie, in the same directory), if short 
name matches before and after, keep it.

This avoids that a file with long file name sees its short name changing on 
normally 'non-effect' renames.
For instance, in case of case-change only rename, short name will now be 
preserved.

See ya, you 7y old bug :-)

CORE-3875 #resolve #comment Fixed with r71270

Modified:
    trunk/reactos/drivers/filesystems/fastfat/dirwr.c
    trunk/reactos/drivers/filesystems/fastfat/vfat.h

Modified: trunk/reactos/drivers/filesystems/fastfat/dirwr.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat/dirwr.c?rev=71270&r1=71269&r2=71270&view=diff
==============================================================================
--- trunk/reactos/drivers/filesystems/fastfat/dirwr.c   [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/fastfat/dirwr.c   [iso-8859-1] Fri May  6 
21:06:31 2016
@@ -345,6 +345,18 @@
             {
                 break;
             }
+            else if (MoveContext)
+            {
+                ASSERT(*Fcb);
+                if (strncmp((char *)SearchContext.DirEntry.Fat.ShortName, 
(char *)(*Fcb)->entry.Fat.ShortName, 11) == 0)
+                {
+                    if (MoveContext->InPlace)
+                    {
+                        ASSERT(SearchContext.DirEntry.Fat.FileSize == 
MoveContext->FileSize);
+                        break;
+                    }
+                } 
+            }
         }
         if (i == 100) /* FIXME : what to do after this ? */
         {
@@ -947,6 +959,7 @@
 
     OldParent = pFcb->parentFcb;
     CcPurgeCacheSection(&OldParent->SectionObjectPointers, NULL, 0, FALSE);
+    MoveContext.InPlace = (OldParent == ParentFcb);
 
     /* Add our new entry with our cluster */
     Status = VfatAddEntry(DeviceExt,

Modified: trunk/reactos/drivers/filesystems/fastfat/vfat.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat/vfat.h?rev=71270&r1=71269&r2=71270&view=diff
==============================================================================
--- trunk/reactos/drivers/filesystems/fastfat/vfat.h    [iso-8859-1] (original)
+++ trunk/reactos/drivers/filesystems/fastfat/vfat.h    [iso-8859-1] Fri May  6 
21:06:31 2016
@@ -488,6 +488,7 @@
     ULONG FileSize;
     USHORT CreationDate;
     USHORT CreationTime;
+    BOOLEAN InPlace;
 } VFAT_MOVE_CONTEXT, *PVFAT_MOVE_CONTEXT;
 
 FORCEINLINE


Reply via email to