Revert my last changes.
[reactos.git] / reactos / drivers / fs / vfat / cleanup.c
index 8145470..db2cccc 100644 (file)
@@ -1,5 +1,4 @@
-/* $Id: cleanup.c,v 1.15 2004/08/28 22:19:12 navaraf Exp $
- *
+/*
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
  * FILE:             drivers/fs/vfat/cleanup.c
@@ -10,11 +9,7 @@
 
 /* INCLUDES *****************************************************************/
 
-#include <ddk/ntddk.h>
-
 #define NDEBUG
-#include <debug.h>
-
 #include "vfat.h"
 
 /* FUNCTIONS ****************************************************************/
@@ -27,15 +22,15 @@ VfatCleanupFile(PVFAT_IRP_CONTEXT IrpContext)
 {
   PVFATFCB pFcb;
   PFILE_OBJECT FileObject = IrpContext->FileObject;
-  
+
   DPRINT("VfatCleanupFile(DeviceExt %x, FileObject %x)\n",
         IrpContext->DeviceExt, FileObject);
-  
+
   /* FIXME: handle file/directory deletion here */
   pFcb = (PVFATFCB) FileObject->FsContext;
   if (pFcb)
     {
-      if (!(pFcb->entry.Attrib & FILE_ATTRIBUTE_DIRECTORY) &&
+      if (!(*pFcb->Attributes & FILE_ATTRIBUTE_DIRECTORY) &&
           FsRtlAreThereCurrentFileLocks(&pFcb->FileLock))
        {
          /* remove all locks this process have on this file */
@@ -50,12 +45,35 @@ VfatCleanupFile(PVFAT_IRP_CONTEXT IrpContext)
         VfatUpdateEntry (pFcb);
        }
 
-     /* Uninitialize file cache if initialized for this file object. */
-     if (FileObject->PrivateCacheMap)
+     if (pFcb->Flags & FCB_DELETE_PENDING &&
+         pFcb->OpenHandleCount == 1)
        {
-         CcRosReleaseFileCache (FileObject);
+        PFILE_OBJECT tmpFileObject;
+        tmpFileObject = pFcb->FileObject;
+        if (tmpFileObject != NULL)
+          {
+            pFcb->FileObject = NULL;
+#ifdef USE_ROS_CC_AND_FS
+             CcRosReleaseFileCache(tmpFileObject);
+#else
+             CcUninitializeCacheMap(tmpFileObject, NULL, NULL);
+#endif
+             ObDereferenceObject(tmpFileObject);
+           }
+
+#if 0
+         /* FIXME:
+         *  CcPurgeCacheSection is unimplemented.
+         */
+         CcPurgeCacheSection(FileObject->SectionObjectPointer, NULL, 0, FALSE);
+#endif
        }
-
+     /* Uninitialize file cache if. */
+#ifdef USE_ROS_CC_AND_FS
+     CcRosReleaseFileCache (FileObject);
+#else
+     CcUninitializeCacheMap (FileObject, NULL, NULL);
+#endif
      pFcb->OpenHandleCount--;
      IoRemoveShareAccess(FileObject, &pFcb->FCBShareAccess);
     }