File indexing completed on 2024-05-12 05:48:28
0001 /* 0002 SPDX-FileCopyrightText: 2017-2020 Andrius Štikonas <andrius@stikonas.eu> 0003 SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho <caiojcarvalho@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #ifndef SFDISKBACKEND__H 0009 #define SFDISKBACKEND__H 0010 0011 #include "backend/corebackend.h" 0012 #include "core/partition.h" 0013 #include "fs/filesystem.h" 0014 0015 #include <QList> 0016 #include <QVariant> 0017 0018 class Device; 0019 class ExternalCommand; 0020 class Partition; 0021 class KPluginFactory; 0022 class QString; 0023 0024 /** Backend plugin for sfdisk 0025 0026 @author Andrius Štikonas <andrius@stikonas.eu> 0027 */ 0028 class SfdiskBackend : public CoreBackend 0029 { 0030 Q_DISABLE_COPY(SfdiskBackend) 0031 0032 public: 0033 SfdiskBackend(QObject* parent, const QList<QVariant>& args); 0034 0035 public: 0036 void initFSSupport() override; 0037 0038 QList<Device*> scanDevices(bool excludeReadOnly = false) override; 0039 QList<Device*> scanDevices(const ScanFlags scanFlags) override; 0040 std::unique_ptr<CoreBackendDevice> openDevice(const Device& d) override; 0041 std::unique_ptr<CoreBackendDevice> openDeviceExclusive(const Device& d) override; 0042 bool closeDevice(std::unique_ptr<CoreBackendDevice> coreDevice) override; 0043 Device* scanDevice(const QString& deviceNode) override; 0044 FileSystem::Type detectFileSystem(const QString& partitionPath) override; 0045 QString readLabel(const QString& deviceNode) const override; 0046 QString readUUID(const QString& deviceNode) const override; 0047 0048 private: 0049 static void readSectorsUsed(const Device& d, Partition& p, const QString& mountPoint); 0050 void scanDevicePartitions(Device& d, const QJsonArray& jsonPartitions); 0051 Partition* scanPartition(Device& d, const QString& partitionNode, const qint64 firstSector, const qint64 lastSector, const QString& partitionType, const bool bootable); 0052 void scanWholeDevicePartition(Device& d); 0053 static void setupPartitionInfo(const Device& d, Partition* partition, const QJsonObject& partitionObject); 0054 bool updateDevicePartitionTable(Device& d, const QJsonObject& jsonPartitionTable); 0055 static PartitionTable::Flags availableFlags(PartitionTable::TableType type); 0056 static FileSystem::Type fileSystemNameToType(const QString& fileSystemName, const QString& version); 0057 static FileSystem::Type runDetectFileSystemCommand(ExternalCommand& command, QString& typeRegExp, QString& versionRegExp, QString& name); 0058 }; 0059 0060 #endif