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/fastfa…
==============================================================================
--- 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/fastfa…
==============================================================================
--- 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