From c3ccc0de0e910a2fe0d36b59713afaaafe593a78 Mon Sep 17 00:00:00 2001 From: Arnaud Ferraris Date: Thu, 28 Feb 2019 13:31:30 +0100 Subject: [PATCH] [libcalamares] Add a KiB unit This commit creates a _KiB operator for future use by the partition module. It also fixes a typo in one instance of MiBtoBytes(), requiring a couple extra fixes. Signed-off-by: Arnaud Ferraris --- src/libcalamares/utils/Units.h | 21 +++++++++++++++++-- src/modules/fsresizer/ResizeFSJob.cpp | 2 +- .../partition/tests/PartitionJobTests.cpp | 3 ++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/libcalamares/utils/Units.h b/src/libcalamares/utils/Units.h index efc100d59..34f80b17f 100644 --- a/src/libcalamares/utils/Units.h +++ b/src/libcalamares/utils/Units.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2017, Adriaan de Groot + * Copyright 2019, Collabora Ltd * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,10 +25,16 @@ namespace CalamaresUtils { +/** User defined literals, 1_KiB is 1 KibiByte (= 2^10 bytes) */ +constexpr qint64 operator ""_KiB( unsigned long long m ) +{ + return qint64(m) * 1024; +} + /** User defined literals, 1_MiB is 1 MibiByte (= 2^20 bytes) */ constexpr qint64 operator ""_MiB( unsigned long long m ) { - return qint64(m) * 1024 * 1024; + return operator ""_KiB(m) * 1024; } /** User defined literals, 1_GiB is 1 GibiByte (= 2^30 bytes) */ @@ -36,6 +43,11 @@ constexpr qint64 operator ""_GiB( unsigned long long m ) return operator ""_MiB(m) * 1024; } +constexpr qint64 KiBtoBytes( unsigned long long m ) +{ + return operator ""_KiB( m ); +} + constexpr qint64 MiBtoBytes( unsigned long long m ) { return operator ""_MiB( m ); @@ -46,7 +58,12 @@ constexpr qint64 GiBtoBytes( unsigned long long m ) return operator ""_GiB( m ); } -constexpr qint64 MiBToBytes( double m ) +constexpr qint64 KiBtoBytes( double m ) +{ + return qint64(m * 1024); +} + +constexpr qint64 MiBtoBytes( double m ) { return qint64(m * 1024 * 1024); } diff --git a/src/modules/fsresizer/ResizeFSJob.cpp b/src/modules/fsresizer/ResizeFSJob.cpp index 6394075ba..2ce9eba70 100644 --- a/src/modules/fsresizer/ResizeFSJob.cpp +++ b/src/modules/fsresizer/ResizeFSJob.cpp @@ -80,7 +80,7 @@ ResizeFSJob::RelativeSize::apply( qint64 totalSectors, qint64 sectorSize ) case unit_t::None: return -1; case unit_t::Absolute: - return CalamaresUtils::MiBtoBytes( value() ) / sectorSize; + return CalamaresUtils::MiBtoBytes( static_cast( value() ) ) / sectorSize; case unit_t::Percent: if ( value() == 100 ) return totalSectors; // Common-case, avoid futzing around diff --git a/src/modules/partition/tests/PartitionJobTests.cpp b/src/modules/partition/tests/PartitionJobTests.cpp index d3fd67c12..6a7e2ab72 100644 --- a/src/modules/partition/tests/PartitionJobTests.cpp +++ b/src/modules/partition/tests/PartitionJobTests.cpp @@ -349,7 +349,8 @@ PartitionJobTests::testResizePartition() // Make the test data file smaller than the full size of the partition to // accomodate for the file system overhead - const QByteArray testData = generateTestData( CalamaresUtils::MiBtoBytes( qMin( oldSizeMB, newSizeMB ) ) * 3 / 4 ); + const unsigned long long minSizeMB = qMin( oldSizeMB, newSizeMB ); + const QByteArray testData = generateTestData( CalamaresUtils::MiBtoBytes( minSizeMB ) * 3 / 4 ); const QString testName = "test.data"; // Setup: create the test partition