[partition] Simplify the method execute

- Rename the "size" locals using "sectors" in their name. Size may be
  confusing or not enough specific as it can be interpreted a size in
  Byte.
    partSizeMap -> partSectorsMap,
    totalSize -> totalSectors,
    availablesize -> availableSectors,
    size -> sectors,
    minSize -> minSectors
    maxSize -> maxSectors
- Create a the new local currentSector to iterate over the sectors;
  instead of using the parameter firstSector.
- Remove the variable end that does not help much; too many variable
  already. Expand its expression instead.
main
Gaël PORTAY 4 years ago
parent 81bec68b3d
commit 3016b93c8f

@ -176,11 +176,12 @@ PartitionLayout::execute( Device* dev,
{
QList< Partition* > partList;
// Map each partition entry to its requested size (0 when calculated later)
QMap< const PartitionLayout::PartitionEntry*, qint64 > partSizeMap;
qint64 totalSize = lastSector - firstSector + 1;
qint64 availableSize = totalSize;
QMap< const PartitionLayout::PartitionEntry*, qint64 > partSectorsMap;
const qint64 totalSectors = lastSector - firstSector + 1;
qint64 currentSector, availableSectors = totalSectors;
// Let's check if we have enough space for each partSize
// Let's check if we have enough space for each partitions, using the size
// propery or the min-size property if unit is in percentage.
for ( const auto& part : qAsConst( m_partLayout ) )
{
if ( !part.partSize.isValid() )
@ -191,118 +192,80 @@ PartitionLayout::execute( Device* dev,
// Calculate partition size: Rely on "possibly uninitialized use"
// warnings to ensure that all the cases are covered below.
qint64 size;
// We need to ignore the percent-defined until later
qint64 sectors = 0;
if ( part.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent )
{
size = part.partSize.toSectors( totalSize, dev->logicalSize() );
sectors = part.partSize.toSectors( totalSectors, dev->logicalSize() );
}
else
else if ( part.partMinSize.isValid() )
{
if ( part.partMinSize.isValid() )
{
size = part.partMinSize.toSectors( totalSize, dev->logicalSize() );
}
else
{
size = 0;
}
sectors = part.partMinSize.toSectors( totalSectors, dev->logicalSize() );
}
partSizeMap.insert( &part, size );
availableSize -= size;
partSectorsMap.insert( &part, sectors );
availableSectors -= sectors;
}
// Use partMinSize and see if we can do better afterward.
if ( availableSize < 0 )
// There is not enough space for all partitions, use the min-size property
// and see if we can do better afterward.
if ( availableSectors < 0 )
{
availableSize = totalSize;
availableSectors = totalSectors;
for ( const auto& part : qAsConst( m_partLayout ) )
{
qint64 size;
qint64 sectors = partSectorsMap.value( &part );
if ( part.partMinSize.isValid() )
{
size = part.partMinSize.toSectors( totalSize, dev->logicalSize() );
}
else if ( part.partSize.isValid() )
{
if ( part.partSize.unit() != CalamaresUtils::Partition::SizeUnit::Percent )
{
size = part.partSize.toSectors( totalSize, dev->logicalSize() );
}
else
{
size = 0;
}
sectors = part.partMinSize.toSectors( totalSectors, dev->logicalSize() );
partSectorsMap.insert( &part, sectors );
}
else
{
size = 0;
}
partSizeMap.insert( &part, size );
availableSize -= size;
availableSectors -= sectors;
}
}
// Assign size for percentage-defined partitions
// Assign sectors for percentage-defined partitions.
for ( const auto& part : qAsConst( m_partLayout ) )
{
if ( part.partSize.unit() == CalamaresUtils::Partition::SizeUnit::Percent )
{
qint64 size = partSizeMap.value( &part );
size = part.partSize.toSectors( availableSize + size, dev->logicalSize() );
qint64 sectors = part.partSize.toSectors( availableSectors + partSectorsMap.value( &part ),
dev->logicalSize() );
if ( part.partMinSize.isValid() )
{
qint64 minSize = part.partMinSize.toSectors( totalSize, dev->logicalSize() );
if ( minSize > size )
{
size = minSize;
}
sectors = std::max( sectors, part.partMinSize.toSectors( totalSectors, dev->logicalSize() ) );
}
if ( part.partMaxSize.isValid() )
{
qint64 maxSize = part.partMaxSize.toSectors( totalSize, dev->logicalSize() );
if ( maxSize < size )
{
size = maxSize;
}
sectors = std::min( sectors, part.partMaxSize.toSectors( totalSectors, dev->logicalSize() ) );
}
partSizeMap.insert( &part, size );
partSectorsMap.insert( &part, sectors );
}
}
availableSize = totalSize;
// TODO: Refine partition sizes to make sure there is room for every partition
// Use a default (200-500M ?) minimum size for partition without minSize
// Create the partitions.
currentSector = firstSector;
availableSectors = totalSectors;
for ( const auto& part : qAsConst( m_partLayout ) )
{
qint64 size, end;
Partition* currentPartition = nullptr;
size = partSizeMap.value( &part );
// Adjust partition size based on available space
if ( size > availableSize )
// Adjust partition size based on available space.
qint64 sectors = partSectorsMap.value( &part );
sectors = std::min( sectors, availableSectors );
if ( sectors == 0 )
{
size = availableSize;
continue;
}
end = firstSector + std::max( size - 1, Q_INT64_C( 0 ) );
if ( luksPassphrase.isEmpty() )
{
currentPartition = KPMHelpers::createNewPartition(
parent, *dev, role, part.partFileSystem, firstSector, end, KPM_PARTITION_FLAG( None ) );
parent, *dev, role, part.partFileSystem, currentSector, currentSector + sectors - 1, KPM_PARTITION_FLAG( None ) );
}
else
{
currentPartition = KPMHelpers::createNewEncryptedPartition(
parent, *dev, role, part.partFileSystem, firstSector, end, luksPassphrase, KPM_PARTITION_FLAG( None ) );
parent, *dev, role, part.partFileSystem, currentSector, currentSector + sectors - 1, luksPassphrase, KPM_PARTITION_FLAG( None ) );
}
PartitionInfo::setFormat( currentPartition, true );
PartitionInfo::setMountPoint( currentPartition, part.partMountPoint );
@ -345,8 +308,8 @@ PartitionLayout::execute( Device* dev,
// Some buggy (legacy) BIOSes test if the bootflag of at least one partition is set.
// Otherwise they ignore the device in boot-order, so add it here.
partList.append( currentPartition );
firstSector = end + 1;
availableSize -= size;
currentSector += sectors;
availableSectors -= sectors;
}
return partList;

Loading…
Cancel
Save