-/* $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
/* INCLUDES *****************************************************************/
-#include <ddk/ntddk.h>
-
#define NDEBUG
-#include <debug.h>
-
#include "vfat.h"
/* FUNCTIONS ****************************************************************/
{
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 */
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);
}