https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fa809fd2feb93d4d65cc94436bdd5024bc8be667

commit fa809fd2feb93d4d65cc94436bdd5024bc8be667
Author:     Hervé Poussineau <[email protected]>
AuthorDate: Tue Sep 13 23:32:01 2022 +0200
Commit:     hpoussin <[email protected]>
CommitDate: Sat Sep 24 12:12:33 2022 +0200

    [VFATFS] Correctly init dirIndex/startIndex on FATX subdirectories
    
    '.' and '..' entries do not exist on FATX subdirectories. We have to fake 
them when
    enumerating the directory, and ignore them when creating a FCB from a 
directory entry.
    
    CORE-16373
---
 drivers/filesystems/vfatfs/fcb.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/filesystems/vfatfs/fcb.c b/drivers/filesystems/vfatfs/fcb.c
index 6fd76071678..696184ec627 100644
--- a/drivers/filesystems/vfatfs/fcb.c
+++ b/drivers/filesystems/vfatfs/fcb.c
@@ -428,6 +428,7 @@ static
 VOID
 vfatInitFCBFromDirEntry(
     PDEVICE_EXTENSION Vcb,
+    PVFATFCB ParentFcb,
     PVFATFCB Fcb,
     PVFAT_DIRENTRY_CONTEXT DirContext)
 {
@@ -476,7 +477,8 @@ vfatInitFCBFromDirEntry(
     }
     Fcb->dirIndex = DirContext->DirIndex;
     Fcb->startIndex = DirContext->StartIndex;
-    if (vfatVolumeIsFatX(Vcb) && !vfatFCBIsRoot(Fcb))
+    Fcb->parentFcb = ParentFcb;
+    if (vfatVolumeIsFatX(Vcb) && !vfatFCBIsRoot(ParentFcb))
     {
         ASSERT(DirContext->DirIndex >= 2 && DirContext->StartIndex >= 2);
         Fcb->dirIndex = DirContext->DirIndex-2;
@@ -572,13 +574,12 @@ vfatUpdateFCB(
     RemoveEntryList(&Fcb->ParentListEntry);
 
     /* Reinit FCB */
-    vfatInitFCBFromDirEntry(pVCB, Fcb, DirContext);
+    vfatInitFCBFromDirEntry(pVCB, ParentFcb, Fcb, DirContext);
 
     if (vfatFCBIsDirectory(Fcb))
     {
         CcFlushCache(&Fcb->SectionObjectPointers, NULL, 0, NULL);
     }
-    Fcb->parentFcb = ParentFcb;
     InsertTailList(&ParentFcb->ParentListHead, &Fcb->ParentListEntry);
     vfatAddFCBToTable(pVCB, Fcb);
 
@@ -739,10 +740,9 @@ vfatMakeFCBFromDirEntry(
     }
 
     rcFCB = vfatNewFCB(vcb, &NameU);
-    vfatInitFCBFromDirEntry(vcb, rcFCB, DirContext);
+    vfatInitFCBFromDirEntry(vcb, directoryFCB, rcFCB, DirContext);
 
     rcFCB->RefCount = 1;
-    rcFCB->parentFcb = directoryFCB;
     InsertTailList(&directoryFCB->ParentListHead, &rcFCB->ParentListEntry);
     vfatAddFCBToTable(vcb, rcFCB);
     *fileFCB = rcFCB;

Reply via email to