Make the partition label length dependent from the file system (#689318)
fixes Bug #689318 - filesystem type specific support for partition name maximum length
This commit is contained in:
parent
2eb50f9590
commit
ecb1f57594
|
@ -158,6 +158,7 @@ public:
|
||||||
static Glib::ustring num_to_str( Sector number ) ;
|
static Glib::ustring num_to_str( Sector number ) ;
|
||||||
static Glib::ustring get_color( FILESYSTEM filesystem ) ;
|
static Glib::ustring get_color( FILESYSTEM filesystem ) ;
|
||||||
static Glib::RefPtr<Gdk::Pixbuf> get_color_as_pixbuf( FILESYSTEM filesystem, int width, int height ) ;
|
static Glib::RefPtr<Gdk::Pixbuf> get_color_as_pixbuf( FILESYSTEM filesystem, int width, int height ) ;
|
||||||
|
static int get_filesystem_label_maxlength( FILESYSTEM filesystem ) ;
|
||||||
static Glib::ustring get_filesystem_string( FILESYSTEM filesystem ) ;
|
static Glib::ustring get_filesystem_string( FILESYSTEM filesystem ) ;
|
||||||
static Glib::ustring get_filesystem_software( FILESYSTEM filesystem ) ;
|
static Glib::ustring get_filesystem_software( FILESYSTEM filesystem ) ;
|
||||||
static bool kernel_supports_fs( const Glib::ustring & fs ) ;
|
static bool kernel_supports_fs( const Glib::ustring & fs ) ;
|
||||||
|
|
|
@ -44,7 +44,7 @@ Dialog_Partition_Label::Dialog_Partition_Label( const Partition & partition )
|
||||||
Gtk::FILL);
|
Gtk::FILL);
|
||||||
//Create Text entry box
|
//Create Text entry box
|
||||||
entry = manage(new Gtk::Entry());
|
entry = manage(new Gtk::Entry());
|
||||||
entry->set_max_length(30);
|
entry->set_max_length( Utils::get_filesystem_label_maxlength( partition.filesystem ) ) ;
|
||||||
entry->set_width_chars(20);
|
entry->set_width_chars(20);
|
||||||
entry->set_activates_default(true);
|
entry->set_activates_default(true);
|
||||||
entry->set_text(partition.get_label());
|
entry->set_text(partition.get_label());
|
||||||
|
|
|
@ -129,7 +129,6 @@ void Dialog_Partition_New::Set_Data( const Partition & partition,
|
||||||
table_create .attach( * Utils::mk_label( Glib::ustring( _("Label:") ) ),
|
table_create .attach( * Utils::mk_label( Glib::ustring( _("Label:") ) ),
|
||||||
0, 1, 3, 4, Gtk::FILL ) ;
|
0, 1, 3, 4, Gtk::FILL ) ;
|
||||||
//Create Text entry box
|
//Create Text entry box
|
||||||
entry .set_max_length( 30 );
|
|
||||||
entry .set_width_chars( 20 );
|
entry .set_width_chars( 20 );
|
||||||
entry .set_activates_default( true );
|
entry .set_activates_default( true );
|
||||||
entry .set_text( partition .get_label() );
|
entry .set_text( partition .get_label() );
|
||||||
|
@ -316,6 +315,9 @@ void Dialog_Partition_New::optionmenu_changed( bool type )
|
||||||
frame_resizer_base->set_rgb_partition_color(color_temp);
|
frame_resizer_base->set_rgb_partition_color(color_temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//set partition name entry box length
|
||||||
|
entry .set_max_length( Utils::get_filesystem_label_maxlength( fs.filesystem ) ) ;
|
||||||
|
|
||||||
frame_resizer_base ->Draw_Partition() ;
|
frame_resizer_base ->Draw_Partition() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
48
src/Utils.cc
48
src/Utils.cc
|
@ -118,6 +118,54 @@ Glib::RefPtr<Gdk::Pixbuf> Utils::get_color_as_pixbuf( FILESYSTEM filesystem, int
|
||||||
return pixbuf ;
|
return pixbuf ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Utils::get_filesystem_label_maxlength( FILESYSTEM filesystem )
|
||||||
|
{
|
||||||
|
switch( filesystem )
|
||||||
|
{
|
||||||
|
//All file systems commented out are not supported for labelling
|
||||||
|
// by either the new partition or label partition operations.
|
||||||
|
case FS_BTRFS : return 255 ;
|
||||||
|
//case FS_EXFAT : return ;
|
||||||
|
case FS_EXT2 : return 16 ;
|
||||||
|
case FS_EXT3 : return 16 ;
|
||||||
|
case FS_EXT4 : return 16 ;
|
||||||
|
case FS_FAT16 : return 11 ;
|
||||||
|
case FS_FAT32 : return 11 ;
|
||||||
|
//mkfs.hfsplus can create hfs and hfs+ file systems with labels up to 255
|
||||||
|
// characters. However there is no specific tool to read the labels and
|
||||||
|
// blkid, the only tool currently available, only display the first 27
|
||||||
|
// and 63 character respectively.
|
||||||
|
// Reference:
|
||||||
|
// util-linux-2.20.1/libblkid/src/superblocks/hfs.c:struct hfs_mdb
|
||||||
|
case FS_HFS : return 27 ;
|
||||||
|
case FS_HFSPLUS : return 63 ;
|
||||||
|
//mkfs.jfs and jfs_tune can create and update labels to 16 characters but
|
||||||
|
// only displays the first 11 characters. This is because version 1 jfs
|
||||||
|
// file systems only have an 11 character field for the label but version
|
||||||
|
// 2 jfs has extra fields containing a 16 character label. mkfs.jfs
|
||||||
|
// writes the extra fields containing the 16 character label, but then
|
||||||
|
// sets it to version 1 jfs. It does this to be backwardly compatible
|
||||||
|
// with jfs before 1.0.18, released May 2002. Blkid does display the
|
||||||
|
// full 16 character label by just ignoring the file system version.
|
||||||
|
// As using jfs_tune to get the label stick with an 11 character limit.
|
||||||
|
// References:
|
||||||
|
// jfsutils-1.1.15/tune/tune.c:main()
|
||||||
|
// jfsutils-1.1.15/mkfs/mkfs.c:create_aggregate()
|
||||||
|
// http://jfs.cvs.sourceforge.net/viewvc/jfs/jfsutils/NEWS?revision=HEAD
|
||||||
|
case FS_JFS : return 11 ;
|
||||||
|
case FS_LINUX_SWAP : return 15 ;
|
||||||
|
//case FS_LVM2_PV : return ;
|
||||||
|
case FS_NILFS2 : return 80 ;
|
||||||
|
case FS_NTFS : return 128 ;
|
||||||
|
case FS_REISER4 : return 16 ;
|
||||||
|
case FS_REISERFS : return 16 ;
|
||||||
|
//case FS_UFS : return ;
|
||||||
|
case FS_XFS : return 12 ;
|
||||||
|
|
||||||
|
default : return 30 ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Glib::ustring Utils::get_filesystem_string( FILESYSTEM filesystem )
|
Glib::ustring Utils::get_filesystem_string( FILESYSTEM filesystem )
|
||||||
{
|
{
|
||||||
switch( filesystem )
|
switch( filesystem )
|
||||||
|
|
Loading…
Reference in New Issue