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