Implemented MmAllocateContinuousMemory
[reactos.git] / reactos / drivers / fs / vfat / close.c
1 /* $Id: close.c,v 1.3 2000/12/29 23:17:12 dwelch Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/fs/vfat/close.c
6 * PURPOSE: VFAT Filesystem
7 * PROGRAMMER: Jason Filby (jasonfilby@yahoo.com)
8 */
9
10 /* INCLUDES *****************************************************************/
11
12 #include <ddk/ntddk.h>
13
14 #define NDEBUG
15 #include <debug.h>
16
17 #include "vfat.h"
18
19 /* FUNCTIONS ****************************************************************/
20
21 NTSTATUS
22 VfatCloseFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
23 /*
24 * FUNCTION: Closes a file
25 */
26 {
27 PVFATFCB pFcb;
28 PVFATCCB pCcb;
29 KIRQL oldIrql;
30
31 DPRINT ("FsdCloseFile(DeviceExt %x, FileObject %x)\n",
32 DeviceExt, FileObject);
33
34 //FIXME : update entry in directory ?
35 pCcb = (PVFATCCB) (FileObject->FsContext2);
36
37 DPRINT ("pCcb %x\n", pCcb);
38 if (pCcb == NULL)
39 {
40 return (STATUS_SUCCESS);
41 }
42
43 pFcb = pCcb->pFcb;
44
45 pFcb->RefCount--;
46 if (pFcb->RefCount <= 0)
47 {
48 KeAcquireSpinLock (&DeviceExt->FcbListLock, &oldIrql);
49 RemoveEntryList (&pFcb->FcbListEntry);
50 KeReleaseSpinLock (&DeviceExt->FcbListLock, oldIrql);
51 ExFreePool (pFcb);
52 }
53 ExFreePool (pCcb);
54 return STATUS_SUCCESS;
55 }
56
57 NTSTATUS STDCALL
58 VfatClose (PDEVICE_OBJECT DeviceObject, PIRP Irp)
59 /*
60 * FUNCTION: Closes a file
61 */
62 {
63 PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation (Irp);
64 PFILE_OBJECT FileObject = Stack->FileObject;
65 PDEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
66 NTSTATUS Status;
67
68 DPRINT ("FsdClose(DeviceObject %x, Irp %x)\n", DeviceObject, Irp);
69
70 Status = VfatCloseFile (DeviceExtension, FileObject);
71
72 Irp->IoStatus.Status = Status;
73 Irp->IoStatus.Information = 0;
74
75 IoCompleteRequest (Irp, IO_NO_INCREMENT);
76 return (Status);
77 }
78
79 /* EOF */