https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7a6e9bcdf62e24411780c03d565097c5051fc06b

commit 7a6e9bcdf62e24411780c03d565097c5051fc06b
Author: Trevor Thompson <[email protected]>
AuthorDate: Fri Jul 8 11:59:25 2016 +0000

    [NTFS]
    Simplify GetLastClusterInDataRun() and clean up NtfsAllocateClusters(). No 
functional changes.
    
    svn path=/branches/GSoC_2016/NTFS/; revision=71857
---
 drivers/filesystems/ntfs/attrib.c  | 18 +++-----------
 drivers/filesystems/ntfs/volinfo.c | 49 ++++++++++++++++++--------------------
 2 files changed, 26 insertions(+), 41 deletions(-)

diff --git a/drivers/filesystems/ntfs/attrib.c 
b/drivers/filesystems/ntfs/attrib.c
index e8625903bc..80022f5957 100644
--- a/drivers/filesystems/ntfs/attrib.c
+++ b/drivers/filesystems/ntfs/attrib.c
@@ -583,28 +583,16 @@ GetLastClusterInDataRun(PDEVICE_EXTENSION Vcb, 
PNTFS_ATTR_RECORD Attribute, PULO
     {
         DataRun = DecodeRun(DataRun, &DataRunOffset, &DataRunLength);
        
-        if (DataRunOffset == -1)
-        {
-            // sparse run
-            if (*DataRun == 0)
-            {
-                // if it's the last run, return the last cluster of the last 
run
-                *LastCluster = LastLCN + DataRunLength - 1;
-                break;
-            }
-        }
-        else
+        if (DataRunOffset != -1)
         {
             // Normal data run.
             DataRunStartLCN = LastLCN + DataRunOffset;
             LastLCN = DataRunStartLCN;
+            *LastCluster = LastLCN + DataRunLength - 1;
         }             
 
-        if (*DataRun == 0)
-        {
-            *LastCluster = LastLCN + DataRunLength - 1;
+        if (*DataRun == 0)            
             break;
-        }
     }
 
     return STATUS_SUCCESS;
diff --git a/drivers/filesystems/ntfs/volinfo.c 
b/drivers/filesystems/ntfs/volinfo.c
index 0a54cf73b8..68a1050620 100644
--- a/drivers/filesystems/ntfs/volinfo.c
+++ b/drivers/filesystems/ntfs/volinfo.c
@@ -162,38 +162,35 @@ NtfsAllocateClusters(PDEVICE_EXTENSION DeviceExt,
     RtlInitializeBitMap(&Bitmap, (PULONG)BitmapData, 
DeviceExt->NtfsInfo.ClusterCount);
     FreeClusters = RtlNumberOfClearBits(&Bitmap);
 
-    if (FreeClusters >= DesiredClusters)
-    {
-        // TODO: Observe MFT reservation zone
+    if( FreeClusters < DesiredClusters )
+        Status = STATUS_DISK_FULL;
+    
+    // TODO: Observe MFT reservation zone
 
-        // Can we get one contiguous run?
-        ULONG AssignedRun = RtlFindClearBitsAndSet(&Bitmap, DesiredClusters, 
FirstDesiredCluster);
-        ULONG LengthWritten;
+    // Can we get one contiguous run?
+    ULONG AssignedRun = RtlFindClearBitsAndSet(&Bitmap, DesiredClusters, 
FirstDesiredCluster);
+    ULONG LengthWritten;
 
-        if (AssignedRun != 0xFFFFFFFF)
+    if (AssignedRun != 0xFFFFFFFF)
+    {
+        *FirstAssignedCluster = AssignedRun;
+        *AssignedClusters = DesiredClusters;
+    }
+    else
+    {
+        // we can't get one contiguous run
+        *AssignedClusters = RtlFindNextForwardRunClear(&Bitmap, 
FirstDesiredCluster, FirstAssignedCluster);
+        
+        if (*AssignedClusters == 0)
         {
-            *FirstAssignedCluster = AssignedRun;
-            *AssignedClusters = DesiredClusters;
+            // we couldn't find any runs starting at DesiredFirstCluster
+            *AssignedClusters = RtlFindLongestRunClear(&Bitmap, 
FirstAssignedCluster);
         }
-        else
-        {
-            // we can't get one contiguous run
-            *AssignedClusters = RtlFindNextForwardRunClear(&Bitmap, 
FirstDesiredCluster, FirstAssignedCluster);
-        
-            if (*AssignedClusters == 0)
-            {
-                // we couldn't find any runs starting at DesiredFirstCluster
-                *AssignedClusters = RtlFindLongestRunClear(&Bitmap, 
FirstAssignedCluster);
-            }
             
-        }
-                
-        Status = WriteAttribute(DeviceExt, DataContext, 0, BitmapData, 
(ULONG)BitmapDataSize, &LengthWritten);
     }
-    else
-        Status = STATUS_DISK_FULL;
-
-
+                
+    Status = WriteAttribute(DeviceExt, DataContext, 0, BitmapData, 
(ULONG)BitmapDataSize, &LengthWritten);
+    
     ReleaseAttributeContext(DataContext);
 
     ExFreePoolWithTag(BitmapData, TAG_NTFS);

Reply via email to