Set unallocated space for paste or resize/move operations (#499202)
When pasting a copied partition into free space or move/resizing a partition set its space utilisation so that any unallocated space within the partition is displayed correctly before the operation is applied. NOTE: If the file system does not support file system resizing the Paste and Move/Resize dialogs don't allow resizing the partition so the preview will always be correct, unlike the case in the previous patch: Set unallocated space when performing simple operations (#499202) Also remove the deprecated and no longer used Partition::Set_Unused() and Partition::set_used() methods. Bug #499202 - gparted does not see the difference if partition size differs from filesystem size
This commit is contained in:
parent
04f5250644
commit
7ddbc9bd92
|
@ -72,8 +72,6 @@ public:
|
|||
bool inside_extended,
|
||||
bool busy ) ;
|
||||
|
||||
void Set_Unused( Sector sectors_unused ) ;
|
||||
void set_used( Sector sectors_used ) ;
|
||||
void set_sector_usage( Sector sectors_fs_size, Sector sectors_fs_unused ) ;
|
||||
bool significant_unallocated_space() const ;
|
||||
|
||||
|
|
|
@ -138,6 +138,7 @@ Partition Dialog_Base_Partition::Get_New_Partition( Byte_Value sector_size )
|
|||
{
|
||||
//set sector size of new partition
|
||||
selected_partition .sector_size = sector_size;
|
||||
Sector old_size = selected_partition .get_sector_length() ;
|
||||
|
||||
//FIXME: Partition size is limited to just less than 1024 TeraBytes due
|
||||
// to the maximum value of signed 4 byte integer.
|
||||
|
@ -163,10 +164,6 @@ Partition Dialog_Base_Partition::Get_New_Partition( Byte_Value sector_size )
|
|||
if ( ( START + total_length -1 - selected_partition .sector_end ) < (MEBIBYTE / sector_size) )
|
||||
selected_partition .sector_end = START + total_length -1 ;
|
||||
|
||||
//set new value of unused..
|
||||
if ( selected_partition .sectors_used != -1 )
|
||||
selected_partition .sectors_unused = selected_partition .get_sector_length() - selected_partition .sectors_used ;
|
||||
|
||||
//set alignment
|
||||
switch ( optionmenu_alignment .get_history() )
|
||||
{
|
||||
|
@ -194,6 +191,29 @@ Partition Dialog_Base_Partition::Get_New_Partition( Byte_Value sector_size )
|
|||
default : selected_partition .alignment = ALIGN_MEBIBYTE ;
|
||||
}
|
||||
|
||||
//update partition usage
|
||||
if ( selected_partition .sectors_used != -1 && selected_partition .sectors_unused != -1 )
|
||||
{
|
||||
Sector new_size = selected_partition .get_sector_length() ;
|
||||
if ( old_size == new_size )
|
||||
{
|
||||
//Pasting into new same sized partition or moving partition keeping the same size,
|
||||
// therefore only block copy operation will be performed maintaining file system size.
|
||||
selected_partition .set_sector_usage(
|
||||
selected_partition .sectors_used + selected_partition .sectors_unused,
|
||||
selected_partition .sectors_unused ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Pasting into new larger partition or (moving and) resizing partition larger or smaller,
|
||||
// therefore block copy followed by file system grow or shrink operations will be
|
||||
// performed making the file system fill the partition.
|
||||
selected_partition .set_sector_usage(
|
||||
new_size,
|
||||
new_size - selected_partition .sectors_used ) ;
|
||||
}
|
||||
}
|
||||
|
||||
selected_partition .free_space_before = Sector(spinbutton_before .get_value_as_int()) * (MEBIBYTE / sector_size) ;
|
||||
|
||||
//if the original before value has not changed, then set indicator to keep start sector unchanged
|
||||
|
|
|
@ -105,8 +105,11 @@ void Dialog_Partition_Copy::Set_Data( const Partition & selected_partition, cons
|
|||
this ->selected_partition .type =
|
||||
selected_partition .inside_extended ? GParted::TYPE_LOGICAL : GParted::TYPE_PRIMARY ;
|
||||
//Handle situation where src sector size is smaller than dst sector size and an additional partial dst sector is required.
|
||||
this ->selected_partition .set_used(
|
||||
( (copied_partition .sectors_used * copied_partition .sector_size)
|
||||
this ->selected_partition .set_sector_usage(
|
||||
( ( ( copied_partition .sectors_used + copied_partition .sectors_unused ) * copied_partition .sector_size )
|
||||
+ ( selected_partition .sector_size - 1 )
|
||||
) / selected_partition .sector_size,
|
||||
( ( copied_partition .sectors_unused * copied_partition .sector_size )
|
||||
+ ( selected_partition .sector_size - 1 )
|
||||
) / selected_partition .sector_size ) ;
|
||||
|
||||
|
|
|
@ -83,32 +83,8 @@ void Partition::Set( const Glib::ustring & device_path,
|
|||
this ->color .set( Utils::get_color( filesystem ) );
|
||||
}
|
||||
|
||||
//Deprecated method of setting file system free space, which assumes
|
||||
// the file system fills the partition.
|
||||
void Partition::Set_Unused( Sector sectors_unused )
|
||||
{
|
||||
if ( sectors_unused <= get_sector_length() )
|
||||
{
|
||||
this ->sectors_unused = sectors_unused ;
|
||||
this ->sectors_used = ( sectors_unused == -1 ) ? -1 : get_sector_length() - sectors_unused ;
|
||||
this ->sectors_unallocated = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
//Deprecated method of setting file system used space, which assumes
|
||||
// the file system fills the partition.
|
||||
void Partition::set_used( Sector sectors_used )
|
||||
{
|
||||
if ( sectors_used < get_sector_length() )
|
||||
{
|
||||
this ->sectors_used = sectors_used ;
|
||||
this ->sectors_unused = ( sectors_used == -1 ) ? -1 : get_sector_length() - sectors_used ;
|
||||
this ->sectors_unallocated = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
//Preferred method of setting file system size and free space, which also
|
||||
// calculates unallocated space. Set sectors_fs_size = -1 for unknown.
|
||||
//Set file system size and free space, which also calculates unallocated
|
||||
// space. Set sectors_fs_size = -1 for unknown.
|
||||
void Partition::set_sector_usage( Sector sectors_fs_size, Sector sectors_fs_unused )
|
||||
{
|
||||
Sector length = get_sector_length() ;
|
||||
|
|
Loading…
Reference in New Issue