Prechádzať zdrojové kódy

LibPartition: Fix end block off by one error

Previously, end block was inconsistent. GUIDPartitionTable treated
end block as an inclusive bound, while MBRPartitionTable and
EBRPartitionTable treated end block as an exclusive bound.
Now all three treat end block as an inclusive upper bound.
Samuel Bowman 3 rokov pred
rodič
commit
2f8c20816e

+ 0 - 3
Userland/Applications/PartitionEditor/PartitionModel.cpp

@@ -42,9 +42,6 @@ GUI::Variant PartitionModel::data(GUI::ModelIndex const& index, GUI::ModelRole r
         case Column::StartBlock:
             return partition.start_block();
         case Column::EndBlock:
-            // FIXME: Either MBR end block is off by one (if supposed to be exclusive bound)
-            //        or GPT end block is off by one (if supposed to be inclusive bound).
-            //        This is an issue in LibPartition.
             return partition.end_block();
         default:
             VERIFY_NOT_REACHED();

+ 1 - 1
Userland/Libraries/LibPartition/EBRPartitionTable.cpp

@@ -77,7 +77,7 @@ EBRPartitionTable::EBRPartitionTable(NonnullRefPtr<Core::File> device)
         if (entry.offset == 0x00) {
             continue;
         }
-        MUST(m_partitions.try_empend(entry.offset, (entry.offset + entry.length), entry.type));
+        MUST(m_partitions.try_empend(entry.offset, (entry.offset + entry.length) - 1, entry.type));
     }
 }
 

+ 2 - 2
Userland/Libraries/LibPartition/MBRPartitionTable.cpp

@@ -82,7 +82,7 @@ MBRPartitionTable::MBRPartitionTable(NonnullRefPtr<Core::File> device_file, u32
         if (entry.offset == 0x00) {
             continue;
         }
-        MUST(m_partitions.try_empend(entry.offset, (entry.offset + entry.length), entry.type));
+        MUST(m_partitions.try_empend(entry.offset, (entry.offset + entry.length) - 1, entry.type));
     }
     m_valid = true;
 }
@@ -106,7 +106,7 @@ MBRPartitionTable::MBRPartitionTable(NonnullRefPtr<Core::File> device_file)
         if (entry.offset == 0x00) {
             continue;
         }
-        MUST(m_partitions.try_empend(entry.offset, (entry.offset + entry.length), entry.type));
+        MUST(m_partitions.try_empend(entry.offset, (entry.offset + entry.length) - 1, entry.type));
     }
     m_valid = true;
 }