:Set_Valid_Operations()
* Refined checks for functionality a bit. e.g. even if a filesystem can't be read, it's still possible to grow it (but shrinking gets disabled). Also removed that stupid grow_only flag from Utils.h and reordered Win_GParted::Set_Valid_Operations()
This commit is contained in:
parent
8a0ed3b6ac
commit
d100935b55
|
@ -1,3 +1,8 @@
|
||||||
|
2004-12-15 Bart Hakvoort <gparted@users.sf.net>
|
||||||
|
|
||||||
|
* Refined checks for functionality a bit. e.g. even if a filesystem can't be read, it's still possible to grow it
|
||||||
|
(but shrinking gets disabled). Also removed that stupid grow_only flag from Utils.h and reordered Win_GParted::Set_Valid_Operations()
|
||||||
|
|
||||||
2004-12-14 Bart Hakvoort <gparted@users.sf.net>
|
2004-12-14 Bart Hakvoort <gparted@users.sf.net>
|
||||||
|
|
||||||
* added support for jfs (create, copy, grow) and hfs (create, copy)
|
* added support for jfs (create, copy, grow) and hfs (create, copy)
|
||||||
|
|
|
@ -50,13 +50,12 @@ struct FS
|
||||||
bool move ; //startpoint and endpoint
|
bool move ; //startpoint and endpoint
|
||||||
bool check ; //some checktool available?
|
bool check ; //some checktool available?
|
||||||
bool copy ;
|
bool copy ;
|
||||||
bool grow_only ; //xfs,jfs (only used in Parted_Core::set_device_partitions)
|
|
||||||
int MIN ;
|
int MIN ;
|
||||||
int MAX ;
|
int MAX ;
|
||||||
|
|
||||||
FS( )
|
FS( )
|
||||||
{
|
{
|
||||||
read = create = grow = shrink = move = check = copy = grow_only = false ;
|
read = create = grow = shrink = move = check = copy = false ;
|
||||||
MIN = 0 ;
|
MIN = 0 ;
|
||||||
MAX = 0 ;
|
MAX = 0 ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,8 @@ void Dialog_Partition_Resize_Move::Set_Data( const Partition & selected_partitio
|
||||||
void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector <Partition> & partitions )
|
void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector <Partition> & partitions )
|
||||||
{
|
{
|
||||||
fs = Get_FS( selected_partition .filesystem, FILESYSTEMS ) ;
|
fs = Get_FS( selected_partition .filesystem, FILESYSTEMS ) ;
|
||||||
|
if ( ! selected_partition .error .empty( ) )
|
||||||
|
fs .shrink = false ;
|
||||||
|
|
||||||
//see if we need a fixed_start
|
//see if we need a fixed_start
|
||||||
if ( fs .move )
|
if ( fs .move )
|
||||||
|
|
|
@ -182,20 +182,13 @@ void GParted_Core::set_device_partitions( Device & device, bool deep_scan )
|
||||||
if ( partition_temp .sectors_used == -1 && partition_temp .error .empty( ) )
|
if ( partition_temp .sectors_used == -1 && partition_temp .error .empty( ) )
|
||||||
{
|
{
|
||||||
partition_temp .error = _("Unable to read the contents of this filesystem!") ;
|
partition_temp .error = _("Unable to read the contents of this filesystem!") ;
|
||||||
|
partition_temp .error += "\n" ;
|
||||||
fs = Get_FS( partition_temp .filesystem, FILESYSTEMS ) ;
|
partition_temp .error += _("Because of this some operations may be unavailable.") ;
|
||||||
|
|
||||||
if ( ! fs .grow_only )
|
|
||||||
{
|
|
||||||
partition_temp .error += "\n" ;
|
|
||||||
partition_temp .error += ("As a result you won't be able to resize this partition.") ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
partition_temp .flags = Get_Flags( c_partition ) ;
|
partition_temp .flags = Get_Flags( c_partition ) ;
|
||||||
|
|
||||||
|
|
||||||
if ( partition_temp .busy )
|
if ( partition_temp .busy )
|
||||||
device .busy = true ;
|
device .busy = true ;
|
||||||
|
|
||||||
|
|
|
@ -603,9 +603,9 @@ void Win_GParted::Set_Valid_Operations()
|
||||||
}
|
}
|
||||||
|
|
||||||
//EXTENDED
|
//EXTENDED
|
||||||
else if ( selected_partition .type == GParted::EXTENDED )
|
if ( selected_partition .type == GParted::EXTENDED )
|
||||||
{
|
{
|
||||||
if ( ! any_logic ) //deletion is only allowed when there are nog logical partitions inside.
|
if ( ! any_logic ) //deletion is only allowed when there are no logical partitions inside.
|
||||||
allow_delete( true ) ;
|
allow_delete( true ) ;
|
||||||
|
|
||||||
if ( ! devices[ current_device ] .readonly )
|
if ( ! devices[ current_device ] .readonly )
|
||||||
|
@ -614,31 +614,11 @@ void Win_GParted::Set_Valid_Operations()
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
fs = Get_FS( selected_partition .filesystem, gparted_core .get_fs( ) ) ;
|
|
||||||
|
|
||||||
//FIXME too much redundacy here (just not in the mood to fix it now :P )
|
|
||||||
//if there was an error reading the filesystem we allow delete and convert ( see also Device::Get_Used_Sectors() )
|
|
||||||
//since growing doesn't affect the space already in use, we allow resinzing of 'grow-only' filesystems
|
|
||||||
if ( ! selected_partition .error .empty( ) )
|
|
||||||
{
|
|
||||||
allow_delete( true ) ;
|
|
||||||
allow_convert( true ) ;
|
|
||||||
|
|
||||||
if ( fs .grow && ! fs .shrink && ! devices[ current_device ] .readonly )
|
|
||||||
{
|
|
||||||
allow_resize( true );
|
|
||||||
|
|
||||||
//only allow copying of real partitions
|
|
||||||
if ( selected_partition .status != GParted::STAT_NEW && selected_partition .status != GParted::STAT_COPY && fs .copy )
|
|
||||||
allow_copy( true ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//PRIMARY and LOGICAL
|
//PRIMARY and LOGICAL
|
||||||
if ( selected_partition .type != GParted::EXTENDED )
|
if ( selected_partition .type == GParted::PRIMARY || selected_partition .type == GParted::LOGICAL )
|
||||||
{
|
{
|
||||||
|
fs = Get_FS( selected_partition .filesystem, gparted_core .get_fs( ) ) ;
|
||||||
|
|
||||||
allow_delete( true ) ;
|
allow_delete( true ) ;
|
||||||
allow_convert( true ) ;
|
allow_convert( true ) ;
|
||||||
|
|
||||||
|
@ -648,7 +628,7 @@ void Win_GParted::Set_Valid_Operations()
|
||||||
allow_resize( true ) ;
|
allow_resize( true ) ;
|
||||||
|
|
||||||
//only allow copying of real partitions
|
//only allow copying of real partitions
|
||||||
if ( selected_partition .status != GParted::STAT_NEW && selected_partition .status != GParted::STAT_COPY && fs .copy )
|
if ( selected_partition .status == GParted::STAT_REAL && fs .copy )
|
||||||
allow_copy( true ) ;
|
allow_copy( true ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -872,9 +852,8 @@ void Win_GParted::activate_resize()
|
||||||
dialog .add_action_widget( button_resize_move, Gtk::RESPONSE_OK ) ;
|
dialog .add_action_widget( button_resize_move, Gtk::RESPONSE_OK ) ;
|
||||||
dialog .show_all_children( ) ;
|
dialog .show_all_children( ) ;
|
||||||
|
|
||||||
if ( dialog.run( ) == Gtk::RESPONSE_CANCEL )
|
if ( dialog .run( ) == Gtk::RESPONSE_CANCEL )
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector <Partition> partitions = devices[ current_device ] .device_partitions ;
|
std::vector <Partition> partitions = devices[ current_device ] .device_partitions ;
|
||||||
|
@ -885,7 +864,7 @@ void Win_GParted::activate_resize()
|
||||||
operations[ t ] .Apply_Operation_To_Visual( partitions ) ;
|
operations[ t ] .Apply_Operation_To_Visual( partitions ) ;
|
||||||
|
|
||||||
|
|
||||||
Dialog_Partition_Resize_Move dialog( gparted_core .get_fs( ), devices[ current_device ] .heads * devices[ current_device ] .sectors ) ;
|
Dialog_Partition_Resize_Move dialog( gparted_core .get_fs( ), devices[ current_device ] .heads * devices[ current_device ] .sectors ) ;
|
||||||
|
|
||||||
if ( selected_partition .type == GParted::LOGICAL )
|
if ( selected_partition .type == GParted::LOGICAL )
|
||||||
{
|
{
|
||||||
|
@ -898,30 +877,29 @@ void Win_GParted::activate_resize()
|
||||||
|
|
||||||
dialog .set_transient_for( *this ) ;
|
dialog .set_transient_for( *this ) ;
|
||||||
|
|
||||||
if ( dialog.run() == Gtk::RESPONSE_OK )
|
if ( dialog .run( ) == Gtk::RESPONSE_OK )
|
||||||
{
|
{
|
||||||
dialog.hide() ;//i want to be sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
|
dialog .hide( ) ;//i want to be sure the dialog is gone _before_ operationslist shows up (only matters if first operation)
|
||||||
|
|
||||||
//if selected_partition is NEW we simply remove the NEW operation from the list and add it again with the new size and position ( unless it's an EXTENDED )
|
//if selected_partition is NEW we simply remove the NEW operation from the list and add it again with the new size and position ( unless it's an EXTENDED )
|
||||||
if ( selected_partition .status == GParted::STAT_NEW && selected_partition.type != GParted::EXTENDED )
|
if ( selected_partition .status == GParted::STAT_NEW && selected_partition.type != GParted::EXTENDED )
|
||||||
{
|
{
|
||||||
//remove operation which creates this partition
|
//remove operation which creates this partition
|
||||||
for ( unsigned int t=0;t<operations.size() ; t++ )
|
for ( unsigned int t = 0 ; t < operations .size( ) ; t++ )
|
||||||
{
|
{
|
||||||
if ( operations[t] .partition_new .partition == selected_partition .partition )
|
if ( operations[ t ] .partition_new .partition == selected_partition .partition )
|
||||||
{
|
{
|
||||||
operations.erase( operations .begin() + t ) ;
|
operations.erase( operations .begin( ) + t ) ;
|
||||||
|
|
||||||
//And add the new partition to the end of the operations list
|
//And add the new partition to the end of the operations list
|
||||||
Add_Operation( GParted::CREATE, dialog.Get_New_Partition() );
|
Add_Operation( GParted::CREATE, dialog .Get_New_Partition( ) );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else//normal move/resize on existing partition
|
else//normal move/resize on existing partition
|
||||||
Add_Operation( GParted::RESIZE_MOVE, dialog.Get_New_Partition() );
|
Add_Operation( GParted::RESIZE_MOVE, dialog .Get_New_Partition( ) );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
11
src/ext2.cc
11
src/ext2.cc
|
@ -35,9 +35,14 @@ FS ext2::get_filesystem_support( )
|
||||||
if ( ! system( "which e2fsck 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which e2fsck 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .check = true ;
|
fs .check = true ;
|
||||||
|
|
||||||
//resizing is a delicate process which requires 3 commands..
|
//resizing is a delicate process ...
|
||||||
if ( ! system( "which resize2fs 1>/dev/null 2>/dev/null" ) && fs .read && fs .check )
|
if ( ! system( "which resize2fs 1>/dev/null 2>/dev/null" ) && fs .check )
|
||||||
fs .grow = fs .shrink = true ;
|
{
|
||||||
|
fs .grow = true ;
|
||||||
|
|
||||||
|
if ( fs .read ) //needed to determine a min filesystemsize..
|
||||||
|
fs .shrink = true ;
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .copy = true ;
|
fs .copy = true ;
|
||||||
|
|
11
src/ext3.cc
11
src/ext3.cc
|
@ -35,9 +35,14 @@ FS ext3::get_filesystem_support( )
|
||||||
if ( ! system( "which e2fsck 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which e2fsck 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .check = true ;
|
fs .check = true ;
|
||||||
|
|
||||||
//resizing is a delicate process which requires 3 commands..
|
//resizing is a delicate process ...
|
||||||
if ( ! system( "which resize2fs 1>/dev/null 2>/dev/null" ) && fs .read && fs .check )
|
if ( ! system( "which resize2fs 1>/dev/null 2>/dev/null" ) && fs .check )
|
||||||
fs .grow = fs .shrink = true ;
|
{
|
||||||
|
fs .grow = true ;
|
||||||
|
|
||||||
|
if ( fs .read ) //needed to determine a min filesystemsize..
|
||||||
|
fs .shrink = true ;
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .copy = true ;
|
fs .copy = true ;
|
||||||
|
|
|
@ -26,7 +26,6 @@ FS jfs::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "jfs" ;
|
fs .filesystem = "jfs" ;
|
||||||
fs .grow_only = true ;
|
|
||||||
|
|
||||||
// if ( ! system( "which xfs_db 1>/dev/null 2>/dev/null" ) )
|
// if ( ! system( "which xfs_db 1>/dev/null 2>/dev/null" ) )
|
||||||
// fs .read = true ;
|
// fs .read = true ;
|
||||||
|
|
11
src/ntfs.cc
11
src/ntfs.cc
|
@ -35,9 +35,14 @@ FS ntfs::get_filesystem_support( )
|
||||||
if ( ! system( "which ntfsfix 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which ntfsfix 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .check = true ;
|
fs .check = true ;
|
||||||
|
|
||||||
//resizing is a delicate process which requires 3 commands..
|
//resizing is a delicate process ...
|
||||||
if ( ! system( "which ntfsresize 1>/dev/null 2>/dev/null" ) && fs .read && fs .check )
|
if ( ! system( "which ntfsresize 1>/dev/null 2>/dev/null" ) && fs .check )
|
||||||
fs .grow = fs .shrink = true ;
|
{
|
||||||
|
fs .grow = true ;
|
||||||
|
|
||||||
|
if ( fs .read ) //needed to determine a min filesystemsize..
|
||||||
|
fs .shrink = true ;
|
||||||
|
}
|
||||||
|
|
||||||
//we need ntfsresize to set correct used/unused after cloning
|
//we need ntfsresize to set correct used/unused after cloning
|
||||||
if ( ! system( "which ntfsclone 1>/dev/null 2>/dev/null" ) && fs .grow )
|
if ( ! system( "which ntfsclone 1>/dev/null 2>/dev/null" ) && fs .grow )
|
||||||
|
|
|
@ -36,9 +36,14 @@ FS reiserfs::get_filesystem_support( )
|
||||||
if ( ! system( "which reiserfsck 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which reiserfsck 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .check = true ;
|
fs .check = true ;
|
||||||
|
|
||||||
//resizing is a delicate process which requires 3 commands..
|
//resizing is a delicate process ...
|
||||||
if ( ! system( "which resize_reiserfs 1>/dev/null 2>/dev/null" ) && fs .read && fs .check )
|
if ( ! system( "which resize_reiserfs 1>/dev/null 2>/dev/null" ) && fs .check )
|
||||||
fs .grow = fs .shrink = true ;
|
{
|
||||||
|
fs .grow = true ;
|
||||||
|
|
||||||
|
if ( fs .read ) //needed to determine a min filesystemsize..
|
||||||
|
fs .shrink = true ;
|
||||||
|
}
|
||||||
|
|
||||||
//we need to call resize_reiserfs after a copy to get proper used/unused
|
//we need to call resize_reiserfs after a copy to get proper used/unused
|
||||||
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) && fs .grow )
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) && fs .grow )
|
||||||
|
|
|
@ -26,7 +26,6 @@ FS xfs::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "xfs" ;
|
fs .filesystem = "xfs" ;
|
||||||
fs .grow_only = true ;
|
|
||||||
|
|
||||||
if ( ! system( "which xfs_db 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which xfs_db 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .read = true ;
|
fs .read = true ;
|
||||||
|
|
Loading…
Reference in New Issue