And implement it on ext2, 3, 4. I don't know all the filesystems
that can have posix permissions, those three will do. if we need
more in the future we implement them, it's two lines of code.
The object QVariant is a native object in the Qt world that represents
any type of value: boolean, integer, string, floating point, date,
UUID...
This change updates the API to use the object QVariant and provide a
more flexible API to represent the filesystem features.
In some cases, it may be necessary to create a filesystem with specific features
enabled/disabled.
This PR makes it possible to create filesystems this way. It does so
by introducing a new m_Features member variable and the createWithFeatures()
function to the FileSystem base class. The latter function is implemented
for the btrfs, ext2/3/4 and FAT filesystems.
Additionnally, the CreateFileSystemJob has been modified to enable
creating/formatting filesystems with specific features enabled.
Differential Revision: https://phabricator.kde.org/D21903
CCBUG: 342178
This allows to use different implementations on different platforms.
E.g. libblkid is not available on FreeBSD.
libparted backend still uses the same libblkid implementation
sfdisk backend reads label and UUID from udev database
When libparted scans luks partitions it calls detectFileSystem
regardless of whether luks is open or closed. This results in
mapperNode being empty, so we need to prevent detectFileSystem
from reporting anything in this case.
Some file systems such as UDF or F2FS only support writing labels when creating
them.
At the moment this only works in new partition dialog and not in the partition
properties dialog.
For reading UDF label and UUID is needed blkid >= 2.30. For creating new
UDF filesystem is needed mkudffs binary from the udftools package.
When creating new UDF fileystem, revision 2.01 for hard disk media is used.
Therefore it is not possible to use it for optical (or other) medias.
Problems:
* Check for min and max capacity is incorrect as it depends on logical
(sector) size of the disk.
* Check for max label length is incorrect too as it depends on characters
itself in label.
* Specifying label is not working yet as FileSystem::create() does not get
label parameter.
* UDF filesystem should be used on unpartitioned disk, without MBR or GPT
and spanning whole disk, but KDE Partition Manager does not support it.
* When MBR is used, MBR partition id should be 0x07, but currently it is
incorrect 0x83. See: https://serverfault.com/a/829172 (same for GPT)
Some filesystems require mountpoint while some deviceNode to change file system
label only. So split writeLabel action into online and offline actions.