diff --git a/src/modules/partition/core/OsproberEntry.h b/src/modules/partition/core/OsproberEntry.h index 792f22b29..042f6ee9f 100644 --- a/src/modules/partition/core/OsproberEntry.h +++ b/src/modules/partition/core/OsproberEntry.h @@ -1,6 +1,7 @@ /* === This file is part of Calamares - === * * Copyright 2014-2016, Teo Mrnjavac + * Copyright 2018, Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,6 +30,18 @@ struct FstabEntry QString options; int dump; int pass; + + /// Does this entry make sense and is it complete? + bool isValid() const; // implemented in Partutils.cpp + + /** @brief Create an entry from a live of /etc/fstab + * + * Splits the given string (which ought to follow the format + * of /etc/fstab) and returns a corresponding Fstab entry. + * If the string isn't valid (e.g. comment-line, or broken + * fstab entry) then the entry that is returned is invalid. + */ + FstabEntry fromEtcFstab( const QString& ); // implemented in Partutils.cpp }; typedef QList< FstabEntry > FstabEntryList; diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 12aa489db..a6a607d94 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -372,3 +372,31 @@ isEfiBootable( const Partition* candidate ) } } // nmamespace PartUtils + +/* Implementation of methods for FstabEntry, from OsproberEntry.h */ + +bool +FstabEntry::isValid() const +{ + return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty(); +} + +FstabEntry +FstabEntry::fromEtcFstab( const QString& rawLine ) +{ + QString line = rawLine.simplified(); + if ( line.startsWith( '#' ) ) + return FstabEntry{ QString(), QString(), QString(), QString(), 0, 0 }; + + QStringList splitLine = line.split( ' ' ); + if ( splitLine.length() != 6 ) + return FstabEntry{ QString(), QString(), QString(), QString(), 0, 0 }; + + return FstabEntry{ splitLine.at( 0 ), // path, or UUID, or LABEL, etc. + splitLine.at( 1 ), // mount point + splitLine.at( 2 ), // fs type + splitLine.at( 3 ), // options + splitLine.at( 4 ).toInt(), //dump + splitLine.at( 5 ).toInt() //pass + }; + }