From cf45d55b32ae77d4b537cbc71c248cd095c3e769 Mon Sep 17 00:00:00 2001 From: Arnaud Ferraris Date: Fri, 1 Feb 2019 14:02:40 +0100 Subject: [PATCH] [partition] Fix parsing of partition size in partition layout When setting the size of a partition without indicating the unit, two problems occur: - the size is parsed as an integer, not as a string, hence the configuration parsing fails - the size parser doesn't recognize the fact that the size has no units and defaults to 100% This patch fixes the configuration parsing as well as the size string parsing. Signed-off-by: Arnaud Ferraris --- .../partition/core/PartitionCoreModule.cpp | 17 +++++++++++++++-- src/modules/partition/core/PartitionLayout.cpp | 11 +++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index e79fc21e4..16e7c7f34 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -772,17 +772,30 @@ PartitionCoreModule::initLayout() void PartitionCoreModule::initLayout( const QVariantList& config ) { + QString sizeString; + QString minSizeString; + m_partLayout = new PartitionLayout(); for ( const auto& r : config ) { QVariantMap pentry = r.toMap(); + if ( pentry.contains("size") && CalamaresUtils::getString( pentry, "size" ).isEmpty() ) + sizeString.setNum( CalamaresUtils::getInteger( pentry, "size", 0 ) ); + else + sizeString = CalamaresUtils::getString( pentry, "size" ); + + if ( pentry.contains("minSize") && CalamaresUtils::getString( pentry, "minSize" ).isEmpty() ) + minSizeString.setNum( CalamaresUtils::getInteger( pentry, "minSize", 0 ) ); + else + minSizeString = CalamaresUtils::getString( pentry, "minSize" ); + m_partLayout->addEntry( CalamaresUtils::getString( pentry, "name" ), CalamaresUtils::getString( pentry, "mountPoint" ), CalamaresUtils::getString( pentry, "filesystem" ), - CalamaresUtils::getString( pentry, "size" ), - CalamaresUtils::getString( pentry, "minSize" ) + sizeString, + minSizeString ); } } diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index 827fa9c96..f8ff79d2c 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -57,11 +57,18 @@ parseSizeString( QString sizeString, PartitionLayout::SizeUnit *unit ) { double value; bool ok; + QString valueString; + QString unitString; QRegExp rx( "[KkMmGg%]" ); int pos = rx.indexIn( sizeString ); - QString valueString = sizeString.mid( 0, pos ); - QString unitString = sizeString.mid( pos ); + if (pos > 0) + { + valueString = sizeString.mid( 0, pos ); + unitString = sizeString.mid( pos ); + } + else + valueString = sizeString; value = valueString.toDouble( &ok ); if ( !ok )