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