From: Pierre Schweitzer Date: Sun, 28 Jun 2015 21:26:19 +0000 (+0000) Subject: [NTFS] X-Git-Tag: ReactOS-0.4.0~1680 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7b665169edd438d9ed96d205955eea34ee60f26e [NTFS] Simplify the implementation of NtfsGetFileSize() svn path=/trunk/; revision=68310 --- diff --git a/reactos/drivers/filesystems/ntfs/dirctl.c b/reactos/drivers/filesystems/ntfs/dirctl.c index 632d58f1b40..d93b9ee42c2 100644 --- a/reactos/drivers/filesystems/ntfs/dirctl.c +++ b/reactos/drivers/filesystems/ntfs/dirctl.c @@ -36,24 +36,20 @@ static ULONGLONG -NtfsGetFileSize(PFILE_RECORD_HEADER FileRecord, +NtfsGetFileSize(PDEVICE_EXTENSION DeviceExt, + PFILE_RECORD_HEADER FileRecord, PFILENAME_ATTRIBUTE FileName) { ULONGLONG Size; - PNTFS_ATTR_RECORD Attribute; + NTSTATUS Status; + PNTFS_ATTR_CONTEXT DataContext; Size = FileName->AllocatedSize; - Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->AttributeOffset); - while (Attribute < (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->BytesInUse) && - Attribute->Type != AttributeEnd) + Status = FindAttribute(DeviceExt, FileRecord, AttributeData, L"", 0, &DataContext); + if (NT_SUCCESS(Status)) { - if (Attribute->Type == AttributeData && Attribute->NameLength == 0) - { - Size = AttributeDataLength(Attribute); - break; - } - - Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)Attribute + Attribute->Length); + Size = AttributeDataLength(&DataContext->Record); + ReleaseAttributeContext(DataContext); } return Size; @@ -134,7 +130,7 @@ NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt, /* Convert file flags */ NtfsFileFlagsToAttributes(FileName->FileAttributes | StdInfo->FileAttribute, &Info->FileAttributes); - Info->EndOfFile.QuadPart = NtfsGetFileSize(FileRecord, FileName); + Info->EndOfFile.QuadPart = NtfsGetFileSize(DeviceExt, FileRecord, FileName); Info->AllocationSize.QuadPart = ROUND_UP(Info->EndOfFile.QuadPart, DeviceExt->NtfsInfo.BytesPerCluster); Info->FileIndex = MFTIndex; @@ -184,7 +180,7 @@ NtfsGetFullDirectoryInformation(PDEVICE_EXTENSION DeviceExt, /* Convert file flags */ NtfsFileFlagsToAttributes(FileName->FileAttributes | StdInfo->FileAttribute, &Info->FileAttributes); - Info->EndOfFile.QuadPart = NtfsGetFileSize(FileRecord, FileName); + Info->EndOfFile.QuadPart = NtfsGetFileSize(DeviceExt, FileRecord, FileName); Info->AllocationSize.QuadPart = ROUND_UP(Info->EndOfFile.QuadPart, DeviceExt->NtfsInfo.BytesPerCluster); Info->FileIndex = MFTIndex; @@ -249,7 +245,7 @@ NtfsGetBothDirectoryInformation(PDEVICE_EXTENSION DeviceExt, /* Convert file flags */ NtfsFileFlagsToAttributes(FileName->FileAttributes | StdInfo->FileAttribute, &Info->FileAttributes); - Info->EndOfFile.QuadPart = NtfsGetFileSize(FileRecord, FileName); + Info->EndOfFile.QuadPart = NtfsGetFileSize(DeviceExt, FileRecord, FileName); Info->AllocationSize.QuadPart = ROUND_UP(Info->EndOfFile.QuadPart, DeviceExt->NtfsInfo.BytesPerCluster); Info->FileIndex = MFTIndex;