From 4bda2fbdb14072f0a5f4ac30ff82631b0c1e8e85 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Wed, 10 Oct 2001 21:48:09 +0000 Subject: [PATCH] Implemented CcSetFileSizes(). svn path=/trunk/; revision=2275 --- reactos/ntoskrnl/cc/misc.c | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 reactos/ntoskrnl/cc/misc.c diff --git a/reactos/ntoskrnl/cc/misc.c b/reactos/ntoskrnl/cc/misc.c new file mode 100644 index 00000000000..43df08b9317 --- /dev/null +++ b/reactos/ntoskrnl/cc/misc.c @@ -0,0 +1,56 @@ +/* INCLUDES ******************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#define NDEBUG +#include + +/* GLOBALS *******************************************************************/ + +/* FUNCTIONS *****************************************************************/ + +VOID STDCALL +CcSetFileSizes ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes) +{ + KIRQL oldirql; + PBCB Bcb; + PLIST_ENTRY current_entry; + PCACHE_SEGMENT current; + + DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n", FileObject, FileSizes); + DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n", + (ULONG)FileSizes->AllocationSize.QuadPart, + (ULONG)FileSizes->FileSize.QuadPart, + (ULONG)FileSizes->ValidDataLength.QuadPart); + + Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb; + + KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); + + if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart) + { + current_entry = Bcb->CacheSegmentListHead.Flink; + while (current_entry != &Bcb->CacheSegmentListHead) + { + current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbListEntry); + current_entry = current_entry->Flink; + if (current->FileOffset > FileSizes->AllocationSize.QuadPart) + { + current_entry = current_entry->Flink; + CcRosFreeCacheSegment(Bcb, current); + } + } + } + Bcb->AllocationSize = FileSizes->AllocationSize; + Bcb->FileSize = FileSizes->FileSize; + KeReleaseSpinLock(&Bcb->BcbLock, oldirql); +} +