[luksbootkeyfile] Modernize and refactor C++ finding-a-partition
This commit is contained in:
parent
19af46faea
commit
1752dd573b
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user