[luksbootkeyfile] Modernize and refactor C++ finding-a-partition

This commit is contained in:
Adriaan de Groot 2022-04-23 14:07:00 +02:00
parent 19af46faea
commit 1752dd573b

View File

@ -150,42 +150,50 @@ setupLuks( const LuksDevice& d )
} }
static QVariantList static QVariantList
partitions() partitionsFromGlobalStorage()
{ {
Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage();
return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); return globalStorage->value( QStringLiteral( "partitions" ) ).toList();
} }
/// Checks if the partition (represented by @p map) mounts to the given @p path
static bool
hasMountPoint( const QVariantMap& map, const QString& path )
{
const QString mountPoint = map.value( QStringLiteral( "mountPoint" ) ).toString();
return QDir::cleanPath( mountPoint ) == path;
}
static bool
isEncrypted( const QVariantMap& map )
{
return map.contains( QStringLiteral( "luksMapperName" ) );
}
/// Checks for any partition satisfying @p pred
static bool
anyPartition( bool ( *pred )( const QVariantMap& ) )
{
const auto partitions = partitionsFromGlobalStorage();
return std::find_if( partitions.cbegin(),
partitions.cend(),
[ &pred ]( const QVariant& partitionVariant ) { return pred( partitionVariant.toMap() ); } )
!= partitions.cend();
}
static bool static bool
hasUnencryptedSeparateBoot() hasUnencryptedSeparateBoot()
{ {
const QVariantList partitions = ::partitions(); return anyPartition(
for ( const QVariant& partition : partitions ) []( const QVariantMap& partition )
{ { return hasMountPoint( partition, QStringLiteral( "/boot" ) ) && !isEncrypted( partition ); } );
QVariantMap partitionMap = partition.toMap();
QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString();
if ( QDir::cleanPath( mountPoint ) == QStringLiteral( "/boot" ) )
{
return !partitionMap.contains( QStringLiteral( "luksMapperName" ) );
}
}
return false;
} }
static bool static bool
hasEncryptedRoot() hasEncryptedRoot()
{ {
const QVariantList partitions = ::partitions(); return anyPartition( []( const QVariantMap& partition )
for ( const QVariant& partition : partitions ) { return hasMountPoint( partition, QStringLiteral( "/" ) ) && isEncrypted( partition ); } );
{
QVariantMap partitionMap = partition.toMap();
QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString();
if ( QDir::cleanPath( mountPoint ) == QStringLiteral( "/" ) )
{
return partitionMap.contains( QStringLiteral( "luksMapperName" ) );
}
}
return false;
} }
Calamares::JobResult Calamares::JobResult