Author: pschweitzer Date: Sun Jun 28 21:26:19 2015 New Revision: 68310
URL: http://svn.reactos.org/svn/reactos?rev=68310&view=rev Log: [NTFS] Simplify the implementation of NtfsGetFileSize()
Modified: trunk/reactos/drivers/filesystems/ntfs/dirctl.c
Modified: trunk/reactos/drivers/filesystems/ntfs/dirctl.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/ntfs/di... ============================================================================== --- trunk/reactos/drivers/filesystems/ntfs/dirctl.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/ntfs/dirctl.c [iso-8859-1] Sun Jun 28 21:26:19 2015 @@ -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) - { - if (Attribute->Type == AttributeData && Attribute->NameLength == 0) - { - Size = AttributeDataLength(Attribute); - break; - } - - Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)Attribute + Attribute->Length); + Status = FindAttribute(DeviceExt, FileRecord, AttributeData, L"", 0, &DataContext); + if (NT_SUCCESS(Status)) + { + Size = AttributeDataLength(&DataContext->Record); + ReleaseAttributeContext(DataContext); }
return Size; @@ -134,7 +130,7 @@ /* 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 @@ /* 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 @@ /* 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;