[FASTFAT]
[reactos.git] / reactos / drivers / filesystems / fastfat / finfo.c
index 7ce51ee..3f18eae 100644 (file)
@@ -704,19 +704,17 @@ VfatSetRenameInformation(
     vfatSplitPathName(&NewName, &NewPath, &NewFile);
     DPRINT("New dir: %wZ, New file: %wZ\n", &NewPath, &NewFile);
 
-    /* FIXME: Do it in a more efficient way, like linking FCBs to their parent FCB so that we browse less FCBs
-     * Note: The FIXME is the way MS FastFAT seems to do it
-     */
-    if (vfatFCBIsDirectory(FCB))
+    if (vfatFCBIsDirectory(FCB) && !IsListEmpty(&FCB->ParentListHead))
     {
         PLIST_ENTRY Entry;
         PVFATFCB VolFCB;
 
-        for (Entry = DeviceExt->FcbListHead.Flink; Entry != &DeviceExt->FcbListHead; Entry = Entry->Flink)
+        for (Entry = FCB->ParentListHead.Flink; Entry != &FCB->ParentListHead; Entry = Entry->Flink)
         {
-            VolFCB = CONTAINING_RECORD(Entry, VFATFCB, FcbListEntry);
-            if (VolFCB->parentFcb == FCB && VolFCB->OpenHandleCount != 0)
+            VolFCB = CONTAINING_RECORD(Entry, VFATFCB, ParentListEntry);
+            if (VolFCB->OpenHandleCount != 0)
             {
+                ASSERT(VolFCB->parentFCB == FCB);
                 DPRINT1("At least one children file opened! %wZ (%u, %u)\n", &VolFCB->PathNameU, VolFCB->RefCount, VolFCB->OpenHandleCount);
                 Status = STATUS_ACCESS_DENIED;
                 ASSERT(OldReferences == FCB->parentFcb->RefCount);