fixed small bug with resizing and lower limits. use

* src/Dialog_Partition_Resize_Move.cc: fixed small bug with resizing and lower limits.
* src/GParted_Core.cc: use ped_file_system_clobber before creating a filesystem on a partition.
* src/Win_GParted.cc: pasting is now only allowed if unallocated >= copied partition + cylindersize.
  Instead of dividing length device by amount of cylinders i use heads * sectors/track to get cylindersize.
  Changed device busy warning a bit to more decent english (adamw)
* src/ntfs.cc: readded '-Q' to mkntfs. The error about an 'unknown filesystem' was related to detection problems and not to
  faulty creation of the filesystem. Should be solved anyway by implementing ped_file_system_clobber.
  Also removed ntfsfix since it didn't do anything relevant. Instead i use ntfsresize, because this contains relevant checks (szaka)
This commit is contained in:
Bart Hakvoort 2004-11-25 19:21:42 +00:00
parent a5a0fae337
commit 3271197086
5 changed files with 58 additions and 16 deletions

View File

@ -1,3 +1,14 @@
2004-11-24 Bart Hakvoort <gparted@users.sf.net>
* src/Dialog_Partition_Resize_Move.cc: fixed small bug with resizing and lower limits.
* src/GParted_Core.cc: use ped_file_system_clobber before creating a filesystem on a partition.
* src/Win_GParted.cc: pasting is now only allowed if unallocated >= copied partition + cylindersize.
Instead of dividing length device by amount of cylinders i use heads * sectors/track to get cylindersize.
Changed device busy warning a bit to more decent english (adamw)
* src/ntfs.cc: readded '-Q' to mkntfs. The error about an 'unknown filesystem' was related to detection problems and not to
faulty creation of the filesystem. Should be solved anyway by implementing ped_file_system_clobber.
Also removed ntfsfix since it didn't do anything relevant. Instead i use ntfsresize, because this contains relevant checks (szaka)
2004-11-24 Bart Hakvoort <gparted@users.sf.net> 2004-11-24 Bart Hakvoort <gparted@users.sf.net>
* src/TreeView_Detail.cc: renamed columnheader from 'Type' to 'Filesystem'. Dunno why it was called 'Type' (maybe some PM legacy =) ) * src/TreeView_Detail.cc: renamed columnheader from 'Type' to 'Filesystem'. Dunno why it was called 'Type' (maybe some PM legacy =) )
@ -30,7 +41,7 @@
src/GParted_Core.cc, src/GParted_Core.cc,
src/Makefile.am, src/Makefile.am,
include/ntfs.h, include/ntfs.h,
src/ntfs.cc: added full ntfs support. (couldn't test it very will due to the absence of a win32 box :P ) src/ntfs.cc: added full ntfs support. (couldn't test it very well due to the absence of a win32 box :P )
2004-11-22 Bart Hakvoort <gparted@users.sf.net> 2004-11-22 Bart Hakvoort <gparted@users.sf.net>

View File

@ -23,6 +23,11 @@ namespace GParted
Dialog_Partition_Resize_Move::Dialog_Partition_Resize_Move( std::vector<FS> FILESYSTEMS, Sector cylinder_size ) Dialog_Partition_Resize_Move::Dialog_Partition_Resize_Move( std::vector<FS> FILESYSTEMS, Sector cylinder_size )
{ {
this ->FILESYSTEMS = FILESYSTEMS ; this ->FILESYSTEMS = FILESYSTEMS ;
//some disk have a small cylindersize, for safetyreasons i keep this size at >=1
if ( cylinder_size < 2048 )
cylinder_size = 2048 ;
BUF = Sector_To_MB( cylinder_size ) *2 ; BUF = Sector_To_MB( cylinder_size ) *2 ;
} }
@ -111,14 +116,16 @@ void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector <Partit
//since some filesystems have upper and lower limits we need to check for this //since some filesystems have upper and lower limits we need to check for this
long LOWER, UPPER; long LOWER, UPPER;
if ( selected_partition.filesystem == "fat16" && selected_partition .Get_Used_MB() < 32 ) if ( selected_partition .filesystem == "fat16" && selected_partition .Get_Used_MB( ) < 32 )
LOWER = 32 +BUF ; LOWER = 32 ;
else if ( selected_partition.filesystem == "fat32" && selected_partition .Get_Used_MB() < 256 ) else if ( selected_partition .filesystem == "fat32" && selected_partition .Get_Used_MB( ) < 256 )
LOWER = 256 +BUF; LOWER = 256 ;
else if ( selected_partition.filesystem == "reiserfs" && selected_partition .Get_Used_MB() < 40 ) else if ( selected_partition .filesystem == "reiserfs" && selected_partition .Get_Used_MB( ) < 40 )
LOWER = 40 ; LOWER = 40 ;
else else
LOWER = selected_partition .Get_Used_MB() +BUF; LOWER = selected_partition .Get_Used_MB( ) ;
LOWER += BUF ;
//in certain (rare) case LOWER is a bit too high... //in certain (rare) case LOWER is a bit too high...
if ( LOWER > selected_partition .Get_Length_MB( ) ) if ( LOWER > selected_partition .Get_Length_MB( ) )
@ -139,7 +146,7 @@ void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector <Partit
//set values of spinbutton_size //set values of spinbutton_size
spinbutton_size .set_range( LOWER, UPPER ) ; spinbutton_size .set_range( LOWER, UPPER ) ;
spinbutton_size .set_value( selected_partition .Get_Length_MB() ) ; spinbutton_size .set_value( selected_partition .Get_Length_MB( ) ) ;
//set values of spinbutton_after //set values of spinbutton_after
spinbutton_after .set_range( 0, Sector_To_MB( total_length ) - LOWER ) ; spinbutton_after .set_range( 0, Sector_To_MB( total_length ) - LOWER ) ;

View File

@ -288,9 +288,20 @@ bool GParted_Core::Create( const Glib::ustring & device_path, Partition & new_pa
} }
bool GParted_Core::Convert_FS( const Glib::ustring & device_path, const Partition & partition ) bool GParted_Core::Convert_FS( const Glib::ustring & device_path, const Partition & partition )
{ {
set_proper_filesystem( partition .filesystem ) ; //remove all filesystem signatures...
if ( open_device_and_disk( device_path, device, disk ) )
{
c_partition = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
if ( c_partition )
ped_file_system_clobber ( & c_partition ->geom ) ;
close_device_and_disk( device, disk ) ;
}
set_proper_filesystem( partition .filesystem ) ;
return p_filesystem ->Create( device_path, partition ) ; return p_filesystem ->Create( device_path, partition ) ;
} }
@ -470,6 +481,9 @@ int GParted_Core::Create_Empty_Partition( const Glib::ustring & device_path, Par
if ( ped_disk_add_partition ( disk, c_part, constraint ) && Commit( disk ) ) if ( ped_disk_add_partition ( disk, c_part, constraint ) && Commit( disk ) )
{ {
//remove all filesystem signatures...
ped_file_system_clobber ( & c_part ->geom ) ;
sleep( 1 ) ;//the OS needs some time to create the devicenode in /dev sleep( 1 ) ;//the OS needs some time to create the devicenode in /dev
new_partition .partition = ped_partition_get_path( c_part ) ; new_partition .partition = ped_partition_get_path( c_part ) ;

View File

@ -586,8 +586,16 @@ void Win_GParted::Set_Valid_Operations()
allow_new( true ); allow_new( true );
//find out if there is a copied partition and if it fits inside this unallocated space //find out if there is a copied partition and if it fits inside this unallocated space
if ( copied_partition .partition != "NONE" && copied_partition .Get_Length_MB( ) < selected_partition .Get_Length_MB( ) ) if ( copied_partition .partition != "NONE" )
allow_paste( true ) ; {
//calculate cylindersize
long cylinder_size = Sector_To_MB( devices[ current_device ] .heads * devices[ current_device ] .sectors ) ;
if ( cylinder_size < 1 )
cylinder_size = 1 ;
if ( (copied_partition .Get_Length_MB( ) + cylinder_size) < selected_partition .Get_Length_MB( ) )
allow_paste( true ) ;
}
return ; return ;
} }
@ -846,7 +854,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 ] .length / devices[ current_device ] .cylinders ) ; 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 )
{ {
@ -1161,7 +1169,7 @@ void Win_GParted::activate_apply()
str_temp += "</span>\n\n" ; str_temp += "</span>\n\n" ;
str_temp += _("A busy device is a device with at least one mounted partition.") ; str_temp += _("A busy device is a device with at least one mounted partition.") ;
str_temp += "\n"; str_temp += "\n";
str_temp += _("Since making changes to a busy device may confuse the kernel it is advisable to reboot your computer.") ; str_temp += _("Because making changes to a busy device may confuse the kernel, you are advised to reboot your computer.") ;
Gtk::MessageDialog dialog( *this, str_temp, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_OK, true ); Gtk::MessageDialog dialog( *this, str_temp, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_OK, true );
dialog .run( ) ; dialog .run( ) ;

View File

@ -72,7 +72,7 @@ void ntfs::Set_Used_Sectors( Partition & partition )
bool ntfs::Create( const Glib::ustring device_path, const Partition & new_partition ) bool ntfs::Create( const Glib::ustring device_path, const Partition & new_partition )
{ {
return Execute_Command( "mkntfs " + new_partition .partition ) ; return Execute_Command( "mkntfs -Q " + new_partition .partition ) ;
} }
bool ntfs::Resize( const Partition & partition_new, bool fill_partition ) bool ntfs::Resize( const Partition & partition_new, bool fill_partition )
@ -95,7 +95,9 @@ bool ntfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest
bool ntfs::Check_Repair( const Partition & partition ) bool ntfs::Check_Repair( const Partition & partition )
{ {
return Execute_Command( "ntfsfix " + partition .partition ) ; //according to Szaka it's best to use ntfsresize to check the partition for errors
//since --info is read-only i'll leave it out. just calling ntfsresize --force has also a tendency of fixing stuff :)
return Execute_Command( "echo y | ntfsresize -f " + partition .partition ) ;
} }
int ntfs::get_estimated_time( long MB_to_Consider ) int ntfs::get_estimated_time( long MB_to_Consider )