[gparted] Recognise Linux Swap Suspend and Software RAID partitions (#709640)
- From: Curtis Gedak <gedakc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Recognise Linux Swap Suspend and Software RAID partitions (#709640)
- Date: Sat, 19 Oct 2013 20:23:48 +0000 (UTC)
commit fac3f5b86556391a880271371642ac7df68718f6
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date: Sat Oct 5 16:28:24 2013 +0100
Recognise Linux Swap Suspend and Software RAID partitions (#709640)
Recognise in kernel, Linux Swap Suspend partitions. (When hibernated
the kernel write the RAM out to swap space and changes the magic string
from swap space to suspend). Recognition required either
libparted >= 1.8.8.1 or blkid from util-linux >= 2.15 or before that
blkid from e2fsprogs >= 1.39.
Recognise Linux Software RAID partitions. Recognition requires blkid
from util-linux >= 2.15.
Example:
# blkid /dev/sda10 /dev/sda11
/dev/sda10: ... TYPE="swsuspend"
/dev/sda11: ... TYPE="linux_raid_member"
# parted /dev/sda print
Model: ATA SAMSUNG HM500JI (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
...
10 361GB 362GB 1074MB logical swsusp
11 362GB 363GB 1074MB logical raid
Bug #709640 - Linux Swap Suspend and Software RAID partitions not
recognised
include/Utils.h | 56 +++++++++++++++++----------------
src/DialogFeatures.cc | 4 ++-
src/Dialog_Partition_New.cc | 4 ++-
src/GParted_Core.cc | 71 +++++++++++++++++++++++++------------------
src/Utils.cc | 4 ++
src/Win_GParted.cc | 4 ++-
6 files changed, 83 insertions(+), 60 deletions(-)
---
diff --git a/include/Utils.h b/include/Utils.h
index 55fa4db..a768283 100644
--- a/include/Utils.h
+++ b/include/Utils.h
@@ -58,36 +58,38 @@ const Glib::ustring UUID_RANDOM_NTFS_HALF = _("(Half new UUID - will be randomly
enum FILESYSTEM
{
- FS_UNALLOCATED = 0,
- FS_UNKNOWN = 1,
- FS_UNFORMATTED = 2,
- FS_CLEARED = 3, //Clear existing file system signatures
- FS_EXTENDED = 4,
-
- FS_BTRFS = 5,
- FS_EXFAT = 6, /* Also known as fat64 */
- FS_EXT2 = 7,
- FS_EXT3 = 8,
- FS_EXT4 = 9,
- FS_F2FS = 10,
- FS_FAT16 = 11,
- FS_FAT32 = 12,
- FS_HFS = 13,
- FS_HFSPLUS = 14,
- FS_JFS = 15,
- FS_LINUX_SWAP = 16,
- FS_LVM2_PV = 17,
- FS_NILFS2 = 18,
- FS_NTFS = 19,
- FS_REISER4 = 20,
- FS_REISERFS = 21,
- FS_UFS = 22,
- FS_XFS = 23,
-
- FS_USED = 24,
- FS_UNUSED = 25,
-
- FS_LUKS = 26
+ FS_UNALLOCATED = 0,
+ FS_UNKNOWN = 1,
+ FS_UNFORMATTED = 2,
+ FS_CLEARED = 3, //Clear existing file system signatures
+ FS_EXTENDED = 4,
+
+ FS_BTRFS = 5,
+ FS_EXFAT = 6, /* Also known as fat64 */
+ FS_EXT2 = 7,
+ FS_EXT3 = 8,
+ FS_EXT4 = 9,
+ FS_F2FS = 10,
+ FS_FAT16 = 11,
+ FS_FAT32 = 12,
+ FS_HFS = 13,
+ FS_HFSPLUS = 14,
+ FS_JFS = 15,
+ FS_LINUX_SWAP = 16,
+ FS_LVM2_PV = 17,
+ FS_NILFS2 = 18,
+ FS_NTFS = 19,
+ FS_REISER4 = 20,
+ FS_REISERFS = 21,
+ FS_UFS = 22,
+ FS_XFS = 23,
+
+ FS_USED = 24,
+ FS_UNUSED = 25,
+
+ FS_LUKS = 26,
+ FS_LINUX_SWRAID = 27,
+ FS_LINUX_SWSUSPEND = 28
} ;
enum SIZE_UNIT
diff --git a/src/DialogFeatures.cc b/src/DialogFeatures.cc
index 03dba42..8b13cf3 100644
--- a/src/DialogFeatures.cc
+++ b/src/DialogFeatures.cc
@@ -123,10 +123,12 @@ void DialogFeatures::load_filesystems( const std::vector<FS> & FILESYSTEMS )
//fill the features chart with valid file systems
for ( unsigned short t = 0; t < FILESYSTEMS .size() ; t++ )
{
- //Skip unknown, cleared and luks because these are not file systems
+ //Skip non-file systems or file systems only recognised but not otherwise supported
if ( FILESYSTEMS[ t ] .filesystem == FS_UNKNOWN
|| FILESYSTEMS[ t ] .filesystem == FS_CLEARED
|| FILESYSTEMS[ t ] .filesystem == FS_LUKS
+ || FILESYSTEMS[ t ] .filesystem == FS_LINUX_SWRAID
+ || FILESYSTEMS[ t ] .filesystem == FS_LINUX_SWSUSPEND
)
continue ;
show_filesystem( FILESYSTEMS[ t ] ) ;
diff --git a/src/Dialog_Partition_New.cc b/src/Dialog_Partition_New.cc
index 69dbfb0..acf732b 100644
--- a/src/Dialog_Partition_New.cc
+++ b/src/Dialog_Partition_New.cc
@@ -47,13 +47,15 @@ void Dialog_Partition_New::Set_Data( const Partition & partition,
// the order of items in the file system menu, built by Build_Filesystems_Menu().
this ->FILESYSTEMS = FILESYSTEMS ;
- //... remove all non-valid file systems
+ //... remove all non-file systems or file systems only recognised but not otherwise supported
std::vector< FS >::iterator f ;
for ( f = this->FILESYSTEMS .begin(); f != this->FILESYSTEMS .end(); f++ )
{
if ( f ->filesystem == FS_UNKNOWN
|| f ->filesystem == FS_CLEARED
|| f ->filesystem == FS_LUKS
+ || f ->filesystem == FS_LINUX_SWRAID
+ || f ->filesystem == FS_LINUX_SWSUSPEND
)
//Compensate for subsequent 'f++' ...
f = this ->FILESYSTEMS .erase( f ) - 1 ;
diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
index 6c1c8a5..1959efa 100644
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -96,34 +96,36 @@ void GParted_Core::find_supported_filesystems()
FILESYSTEM_MAP .clear() ;
- FILESYSTEM_MAP[ FS_UNKNOWN ] = NULL ;
- FILESYSTEM_MAP[ FS_CLEARED ] = NULL ;
- FILESYSTEM_MAP[ FS_BTRFS ] = new btrfs() ;
- FILESYSTEM_MAP[ FS_EXFAT ] = new exfat() ;
- FILESYSTEM_MAP[ FS_EXT2 ] = new ext2( FS_EXT2 ) ;
- FILESYSTEM_MAP[ FS_EXT3 ] = new ext2( FS_EXT3 ) ;
- FILESYSTEM_MAP[ FS_EXT4 ] = new ext2( FS_EXT4 ) ;
- FILESYSTEM_MAP[ FS_F2FS ] = new f2fs() ;
- FILESYSTEM_MAP[ FS_FAT16 ] = new fat16( FS_FAT16 ) ;
- FILESYSTEM_MAP[ FS_FAT32 ] = new fat16( FS_FAT32 ) ;
- FILESYSTEM_MAP[ FS_HFS ] = new hfs() ;
- FILESYSTEM_MAP[ FS_HFSPLUS ] = new hfsplus() ;
- FILESYSTEM_MAP[ FS_JFS ] = new jfs() ;
- FILESYSTEM_MAP[ FS_LINUX_SWAP ] = new linux_swap() ;
- FILESYSTEM_MAP[ FS_LVM2_PV ] = new lvm2_pv() ;
- FILESYSTEM_MAP[ FS_NILFS2 ] = new nilfs2() ;
- FILESYSTEM_MAP[ FS_NTFS ] = new ntfs() ;
- FILESYSTEM_MAP[ FS_REISER4 ] = new reiser4() ;
- FILESYSTEM_MAP[ FS_REISERFS ] = new reiserfs() ;
- FILESYSTEM_MAP[ FS_UFS ] = new ufs() ;
- FILESYSTEM_MAP[ FS_XFS ] = new xfs() ;
- FILESYSTEM_MAP[ FS_LUKS ] = NULL ;
+ FILESYSTEM_MAP[ FS_UNKNOWN ] = NULL ;
+ FILESYSTEM_MAP[ FS_CLEARED ] = NULL ;
+ FILESYSTEM_MAP[ FS_BTRFS ] = new btrfs() ;
+ FILESYSTEM_MAP[ FS_EXFAT ] = new exfat() ;
+ FILESYSTEM_MAP[ FS_EXT2 ] = new ext2( FS_EXT2 ) ;
+ FILESYSTEM_MAP[ FS_EXT3 ] = new ext2( FS_EXT3 ) ;
+ FILESYSTEM_MAP[ FS_EXT4 ] = new ext2( FS_EXT4 ) ;
+ FILESYSTEM_MAP[ FS_F2FS ] = new f2fs() ;
+ FILESYSTEM_MAP[ FS_FAT16 ] = new fat16( FS_FAT16 ) ;
+ FILESYSTEM_MAP[ FS_FAT32 ] = new fat16( FS_FAT32 ) ;
+ FILESYSTEM_MAP[ FS_HFS ] = new hfs() ;
+ FILESYSTEM_MAP[ FS_HFSPLUS ] = new hfsplus() ;
+ FILESYSTEM_MAP[ FS_JFS ] = new jfs() ;
+ FILESYSTEM_MAP[ FS_LINUX_SWAP ] = new linux_swap() ;
+ FILESYSTEM_MAP[ FS_LVM2_PV ] = new lvm2_pv() ;
+ FILESYSTEM_MAP[ FS_NILFS2 ] = new nilfs2() ;
+ FILESYSTEM_MAP[ FS_NTFS ] = new ntfs() ;
+ FILESYSTEM_MAP[ FS_REISER4 ] = new reiser4() ;
+ FILESYSTEM_MAP[ FS_REISERFS ] = new reiserfs() ;
+ FILESYSTEM_MAP[ FS_UFS ] = new ufs() ;
+ FILESYSTEM_MAP[ FS_XFS ] = new xfs() ;
+ FILESYSTEM_MAP[ FS_LUKS ] = NULL ;
+ FILESYSTEM_MAP[ FS_LINUX_SWRAID ] = NULL ;
+ FILESYSTEM_MAP[ FS_LINUX_SWSUSPEND ] = NULL ;
//Iteration of std::map is ordered according to operator< of the key.
// Hence the FILESYSTEMS vector is constructed in FILESYSTEM enum
- // order: FS_UNKNOWN, FS_CLEARED, FS_BTRFS, ..., FS_XFS, FS_LUKS
- // which ultimately controls the default order of file systems in menus
- // and dialogs.
+ // order: FS_UNKNOWN, FS_CLEARED, FS_BTRFS, ..., FS_LINUX_SWRAID,
+ // LINUX_SWSUSPEND which ultimately controls the default order of file
+ // systems in menus and dialogs.
FILESYSTEMS .clear() ;
FS fs_notsupp;
@@ -1268,6 +1270,11 @@ GParted::FILESYSTEM GParted_Core::get_filesystem( PedDevice* lp_device, PedParti
return GParted::FS_HFSPLUS ;
else if ( fs_type == "ufs" )
return GParted::FS_UFS ;
+ else if ( fs_type == "linux_raid_member" )
+ return FS_LINUX_SWRAID ;
+ else if ( fs_type == "swsusp" ||
+ fs_type == "swsuspend" )
+ return FS_LINUX_SWSUSPEND ;
}
@@ -1468,9 +1475,11 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
if ( ( partitions[ t ] .type == GParted::TYPE_PRIMARY ||
partitions[ t ] .type == GParted::TYPE_LOGICAL
) &&
- partitions[ t ] .filesystem != GParted::FS_LINUX_SWAP &&
- partitions[ t ] .filesystem != GParted::FS_LVM2_PV &&
- partitions[ t ] .filesystem != GParted::FS_LUKS
+ partitions[ t ] .filesystem != FS_LINUX_SWAP &&
+ partitions[ t ] .filesystem != FS_LVM2_PV &&
+ partitions[ t ] .filesystem != FS_LUKS &&
+ partitions[ t ] .filesystem != FS_LINUX_SWRAID &&
+ partitions[ t ] .filesystem != FS_LINUX_SWSUSPEND
)
{
if ( partitions[ t ] .busy )
@@ -1539,8 +1548,10 @@ void GParted_Core::set_used_sectors( std::vector<Partition> & partitions, PedDis
{
for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
{
- if ( partitions[ t ] .filesystem != GParted::FS_LUKS &&
- partitions[ t ] .filesystem != GParted::FS_UNKNOWN
+ if ( partitions[ t ] .filesystem != FS_UNKNOWN &&
+ partitions[ t ] .filesystem != FS_LUKS &&
+ partitions[ t ] .filesystem != FS_LINUX_SWRAID &&
+ partitions[ t ] .filesystem != FS_LINUX_SWSUSPEND
)
{
if ( partitions[ t ] .type == GParted::TYPE_PRIMARY ||
diff --git a/src/Utils.cc b/src/Utils.cc
index 371189b..2b30515 100644
--- a/src/Utils.cc
+++ b/src/Utils.cc
@@ -106,6 +106,8 @@ Glib::ustring Utils::get_color( FILESYSTEM filesystem )
case FS_UNUSED : return "#FFFFFF" ; //white
case FS_LVM2_PV : return "#CC9966" ; // ~ medium brown
case FS_LUKS : return "#625B81" ; //purple dark
+ case FS_LINUX_SWRAID : return "#5A4733" ; // ~ dark brown
+ case FS_LINUX_SWSUSPEND : return "#884631" ; //red dark
default : return "#000000" ;
}
@@ -233,6 +235,8 @@ Glib::ustring Utils::get_filesystem_string( FILESYSTEM filesystem )
case FS_UNUSED : return _("unused") ;
case FS_LVM2_PV : return "lvm2 pv" ;
case FS_LUKS : return "crypt-luks" ;
+ case FS_LINUX_SWRAID : return "linux-raid" ;
+ case FS_LINUX_SWSUSPEND : return "linux-suspend" ;
default : return "" ;
}
diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc
index bfb51b1..f34fe4f 100644
--- a/src/Win_GParted.cc
+++ b/src/Win_GParted.cc
@@ -416,10 +416,12 @@ Gtk::Menu * Win_GParted::create_format_menu()
for ( unsigned int t = 0 ; t < fss .size() ; t++ )
{
- //Skip unknown, cleared and luks because these are not file systems
+ //Skip non-file systems or file systems only recognised but not otherwise supported
if ( fss[ t ] .filesystem == FS_UNKNOWN
|| fss[ t ] .filesystem == FS_CLEARED
|| fss[ t ] .filesystem == FS_LUKS
+ || fss[ t ] .filesystem == FS_LINUX_SWRAID
+ || fss[ t ] .filesystem == FS_LINUX_SWSUSPEND
)
continue ;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]