From e8437d1f187765b6a7447b1cdbdffdeeeb1b8f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= Date: Sat, 6 Jan 2024 21:44:40 +0100 Subject: [PATCH] Re-calculate total blocks when sector size changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Klaus Kämpf --- cpp/devices/disk.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cpp/devices/disk.cpp b/cpp/devices/disk.cpp index 7ae8f275..b771b881 100644 --- a/cpp/devices/disk.cpp +++ b/cpp/devices/disk.cpp @@ -696,11 +696,17 @@ uint32_t Disk::GetSectorSizeInBytes() const void Disk::SetSectorSizeInBytes(uint32_t size_in_bytes) { if (!GetSupportedSectorSizes().contains(size_in_bytes)) { - throw io_exception("Invalid sector size of " + to_string(size_in_bytes) + " byte(s)"); + throw io_exception("Invalid sector size of " + to_string(size_in_bytes) + " byte(s)"); } + uint64_t current_blocks = GetBlockCount(); + uint32_t current_size_shift_count = size_shift_count; + uint64_t current_size = current_blocks << current_size_shift_count; size_shift_count = CalculateShiftCount(size_in_bytes); assert(size_shift_count); + if ((current_blocks > 0) && (current_size_shift_count > 0)) { + SetBlockCount(current_size >> size_shift_count); + } } uint32_t Disk::GetConfiguredSectorSize() const @@ -714,7 +720,7 @@ bool Disk::SetConfiguredSectorSize(uint32_t configured_size) return false; } - configured_sector_size = configured_size; + configured_sector_size = configured_size; return true; }