kpmcore/src/backend/corebackendpartitiontable.h

159 lines
6.1 KiB
C++

/*
SPDX-FileCopyrightText: 2010-2011 Volker Lanz <vl@fidra.de>
SPDX-FileCopyrightText: 2014-2018 Andrius Štikonas <andrius@stikonas.eu>
SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org>
SPDX-FileCopyrightText: 2015 Chris Campbell <c.j.campbell@ed.ac.uk>
SPDX-FileCopyrightText: 2020 Gaël PORTAY <gael.portay@collabora.com>
SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef KPMCORE_COREBACKENDPARTITIONTABLE_H
#define KPMCORE_COREBACKENDPARTITIONTABLE_H
#include "core/partitiontable.h"
#include "fs/filesystem.h"
#include <QtGlobal>
class CoreBackendPartition;
class Report;
class Partition;
/**
* Interface class to represent a partition table in the backend.
* @author Volker Lanz <vl@fidra.de>
*/
class CoreBackendPartitionTable
{
public:
virtual ~CoreBackendPartitionTable() {}
public:
/**
* Open the partition table
* @return true on success
*/
virtual bool open() = 0;
/**
* Commit changes to the partition table to disk and to the OS.
* @param timeout timeout in seconds to wait for the commit to succeed
* @return true on success
*/
virtual bool commit(quint32 timeout = 10) = 0;
/**
* Delete a partition.
* @param report the report to write information to
* @param partition the Partition to delete
* @return true on success
*/
virtual bool deletePartition(Report& report, const Partition& partition) = 0;
/**
* Delete a file system on disk so it cannot be detected anymore.
* @param report the report to write information to
* @param partition the Partition for which to clobber the file system
* @return true on success
*/
virtual bool clobberFileSystem(Report& report, const Partition& partition) = 0;
/**
* Resize a file system to a new length.
* @param report the report to write information to
* @param partition the partition the FileSystem to resize is on
* @param newLength the new length for the FileSystem in sectors
* @return true on success
*/
virtual bool resizeFileSystem(Report& report, const Partition& partition, qint64 newLength) = 0;
/**
* Detect which FileSystem is present at a given start sector.
* @param report the report to write information to
* @param device the Device on which the FileSystem resides
* @param sector the sector where to look for a FileSystem
* @return the detected FileSystem::Type
*/
virtual FileSystem::Type detectFileSystemBySector(Report& report, const Device& device, qint64 sector) = 0;
/**
* Create a new partition.
* @param report the report to write information to
* @param partition the new partition to create on disk
* @return the new number the OS sees the partition under (e.g. 7 for "/dev/sda7") or -1 on failure
*/
virtual QString createPartition(Report& report, const Partition& partition) = 0;
/**
* Update the geometry for a partition in the partition table.
* @param report the report to write information to
* @param partition the partition to update the geometry for
* @param sector_start the new start sector for the partition
* @param sector_end the new last sector for the partition
* @return true on success
*/
virtual bool updateGeometry(Report& report, const Partition& partition, qint64 sector_start, qint64 sector_end) = 0;
/**
* Get the UUID of a partition in the partition table (GPT only).
* The partition UUID is known as PARTUUID by several utilities. The device-manager links
* the device under /dev/disk/by-partuuid/<uuid>.
* @param report the report to write information to
* @param partition the partition to get the UUID for
* @return the partition UUID
*/
virtual QString getPartitionUUID(Report& report, const Partition& partition) = 0;
/**
* Set the label of a partition in the partition table (GPT only).
* The label is set in the GPT partition name entry. The partition name is known as PARTLABEL by
* several utilities. The device-manager links the device under /dev/disk/by-partlabel/<label>.
* @param report the report to write information to
* @param partition the partition to set the label for
* @param label the new label for the partition
* @return true on success
*/
virtual bool setPartitionLabel(Report& report, const Partition& partition, const QString& label) = 0;
/**
* Set the UUID of a partition in the partition table (GPT only).
* The partition UUID is known as PARTUUID by several utilities. The device-manager links
* the device under /dev/disk/by-partuuid/<uuid>.
* @param report the report to write information to
* @param partition the partition to set the UUID for
* @param uuid the new UUID for the partition
* @return true on success
*/
virtual bool setPartitionUUID(Report& report, const Partition& partition, const QString& uuid) = 0;
/**
* Set the attributes of a partition in the partition table (GPT only).
* @param report the report to write information to
* @param partition the partition to set the attributes for
* @param attrs the new attributes for the partition
* @return true on success
*/
virtual bool setPartitionAttributes(Report& report, const Partition& partition, quint64 attrs) = 0;
/**
* Set the system type (e.g. 83 for Linux) of a partition. The type to set is taken from
* the partition's file system.
* @param report the report to write information to
* @param partition the partition to set the system type for
* @return true on success
*/
virtual bool setPartitionSystemType(Report& report, const Partition& partition) = 0;
/**
* Set a flag for the partition
* @param report the Report to write information to
* @param flag the flag to set
* @param state the state to set the flag to (i.e., on or off)
* @return true on success
*/
virtual bool setFlag(Report& report, const Partition& partition, PartitionTable::Flag flag, bool state) = 0;
};
#endif