P ). Resizing of ext2/3 works perfect now. I've even tested it on the
* Again way too many chances to create a detailed entry (i'm glad i'm the only dev atm :P ). Resizing of ext2/3 works perfect now. I've even tested it on the partition holding my SG seasons =) Implemented checking of filesystems (only internally used atm). Done some overall tweaking, finetuning etc.. release 0.0.7 is getting shape.
This commit is contained in:
parent
53321675f7
commit
bd02bca613
|
@ -1,3 +1,10 @@
|
||||||
|
2004-11-21 Bart Hakvoort <gparted@users.sf.net>
|
||||||
|
|
||||||
|
* Again way too many chances to create a detailed entry (i'm glad i'm the only dev atm :P ).
|
||||||
|
Resizing of ext2/3 works perfect now. I've even tested it on the partition holding my SG seasons =)
|
||||||
|
Implemented checking of filesystems (only internally used atm).
|
||||||
|
Done some overall tweaking, finetuning etc.. release 0.0.7 is getting shape.
|
||||||
|
|
||||||
2004-11-19 Bart Hakvoort <gparted@users.sf.net>
|
2004-11-19 Bart Hakvoort <gparted@users.sf.net>
|
||||||
|
|
||||||
* include/Device.h,
|
* include/Device.h,
|
||||||
|
|
|
@ -26,9 +26,9 @@ namespace GParted
|
||||||
class Dialog_Partition_Copy : public Dialog_Base_Partition
|
class Dialog_Partition_Copy : public Dialog_Base_Partition
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Dialog_Partition_Copy() ;
|
Dialog_Partition_Copy( ) ;
|
||||||
void Set_Data( Partition & selected_partition, Partition & copied_partition );
|
void Set_Data( const Partition & selected_partition, const Partition & copied_partition );
|
||||||
Partition Get_New_Partition() ;
|
Partition Get_New_Partition( ) ;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace GParted
|
||||||
class Dialog_Partition_Resize_Move : public Dialog_Base_Partition
|
class Dialog_Partition_Resize_Move : public Dialog_Base_Partition
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Dialog_Partition_Resize_Move( std::vector<FS> FILESYSTEMS ) ;
|
Dialog_Partition_Resize_Move( std::vector<FS> FILESYSTEMS, Sector cylinder_size ) ;
|
||||||
void Set_Data( const Partition & selected_partition, const std::vector <Partition> & partitions ) ;
|
void Set_Data( const Partition & selected_partition, const std::vector <Partition> & partitions ) ;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -78,21 +78,26 @@ namespace GParted
|
||||||
class FileSystem
|
class FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
FileSystem( ) ;
|
||||||
virtual ~FileSystem( ) { }
|
virtual ~FileSystem( ) { }
|
||||||
|
|
||||||
virtual FS get_filesystem_support( ) = 0 ;
|
virtual FS get_filesystem_support( ) = 0 ;
|
||||||
|
virtual void Set_Used_Sectors( Partition & partition ) = 0 ;
|
||||||
virtual bool Create( const Glib::ustring device_path, const Partition & new_partition ) = 0 ;
|
virtual bool Create( const Glib::ustring device_path, const Partition & new_partition ) = 0 ;
|
||||||
virtual bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) = 0 ;
|
virtual bool Resize( const Partition & partition_new, bool fill_partition = false ) = 0 ;
|
||||||
virtual bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) = 0 ;
|
virtual bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) = 0 ;
|
||||||
|
virtual bool Check_Repair( const Partition & partition ) = 0 ;
|
||||||
virtual int get_estimated_time( long MB_to_Consider ) = 0 ;
|
virtual int get_estimated_time( long MB_to_Consider ) = 0 ;
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::TextBuffer> textbuffer ;
|
Glib::RefPtr<Gtk::TextBuffer> textbuffer ;
|
||||||
|
|
||||||
|
PedDisk *disk ; //see GParted_Core::Set_Used_Sectors() ...
|
||||||
|
long cylinder_size ; //see GParted_Core::Resize()
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool Execute_Command( Glib::ustring command ) ;
|
bool Execute_Command( Glib::ustring command ) ;
|
||||||
|
|
||||||
PedDevice *device ;
|
PedDevice *device ;
|
||||||
PedDisk *disk ;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Update_Textview( ) ;
|
void Update_Textview( ) ;
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
void find_supported_filesystems( ) ;
|
void find_supported_filesystems( ) ;
|
||||||
void get_devices( std::vector<Device> & devices, bool deep_scan ) ;
|
void get_devices( std::vector<Device> & devices, bool deep_scan ) ;
|
||||||
|
|
||||||
int get_estimated_time( Operation & operation ) ;
|
int get_estimated_time( const Operation & operation ) ;
|
||||||
|
|
||||||
void Apply_Operation_To_Disk( Operation & operation );
|
void Apply_Operation_To_Disk( Operation & operation );
|
||||||
|
|
||||||
|
@ -57,13 +57,15 @@ public:
|
||||||
private:
|
private:
|
||||||
void set_device_partitions( Device & device, bool deep_scan = true ) ;
|
void set_device_partitions( Device & device, bool deep_scan = true ) ;
|
||||||
Glib::ustring get_sym_path( const Glib::ustring & real_path ) ;
|
Glib::ustring get_sym_path( const Glib::ustring & real_path ) ;
|
||||||
Sector Get_Used_Sectors( PedPartition *c_partition, const Glib::ustring & sym_path );
|
void Set_Used_Sectors( Partition & partition );
|
||||||
Glib::ustring Get_Flags( PedPartition *c_partition ) ;
|
Glib::ustring Get_Flags( PedPartition *c_partition ) ;
|
||||||
int Create_Empty_Partition( const Glib::ustring & device_path, Partition & new_partition, bool copy = false ) ;
|
int Create_Empty_Partition( const Glib::ustring & device_path, Partition & new_partition, bool copy = false ) ;
|
||||||
bool Resize_Extended( const Glib::ustring & device_path, const Partition & extended ) ;
|
bool Resize_Container_Partition( const Glib::ustring & device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
||||||
|
bool Resize_Normal_Using_Libparted( const Glib::ustring & device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
||||||
|
|
||||||
void Show_Error( Glib::ustring message ) ;
|
void Show_Error( Glib::ustring message ) ;
|
||||||
void set_proper_filesystem( const Glib::ustring & filesystem ) ;
|
void set_proper_filesystem( const Glib::ustring & filesystem ) ;
|
||||||
|
long Get_Cylinder_Size( const Glib::ustring & device_path ) ;
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::TextBuffer> textbuffer;
|
Glib::RefPtr<Gtk::TextBuffer> textbuffer;
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,6 @@ public:
|
||||||
Glib::ustring str_operation ;
|
Glib::ustring str_operation ;
|
||||||
Glib::ustring copied_partition_path ; //for copy operation..
|
Glib::ustring copied_partition_path ; //for copy operation..
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Insert_Unallocated( std::vector<Partition> & partitions, Sector start, Sector end );
|
void Insert_Unallocated( std::vector<Partition> & partitions, Sector start, Sector end );
|
||||||
int Get_Index_Original( std::vector<Partition> & partitions ) ;
|
int Get_Index_Original( std::vector<Partition> & partitions ) ;
|
||||||
|
|
|
@ -66,16 +66,16 @@ public:
|
||||||
const bool inside_extended,
|
const bool inside_extended,
|
||||||
const bool busy ) ;
|
const bool busy ) ;
|
||||||
|
|
||||||
void Set_Used( Sector used ) ;
|
void Set_Unused( Sector sectors_unused ) ;
|
||||||
|
|
||||||
void Set_Unallocated( Sector sector_start, Sector sector_end, bool inside_extended );
|
void Set_Unallocated( Sector sector_start, Sector sector_end, bool inside_extended );
|
||||||
|
|
||||||
//update partition number (used when a logical partition is deleted)
|
//update partition number (used when a logical partition is deleted)
|
||||||
void Update_Number( int new_number );
|
void Update_Number( int new_number );
|
||||||
|
|
||||||
long Get_Length_MB( );
|
const long Get_Length_MB( ) const ;
|
||||||
long Get_Used_MB( );
|
const long Get_Used_MB( ) const ;
|
||||||
long Get_Unused_MB( );
|
const long Get_Unused_MB( ) const ;
|
||||||
|
|
||||||
//some public members
|
//some public members
|
||||||
Glib::ustring partition;//the symbolic path (e.g. /dev/hda1 )
|
Glib::ustring partition;//the symbolic path (e.g. /dev/hda1 )
|
||||||
|
|
|
@ -36,20 +36,20 @@ class TreeView_Detail : public Gtk::TreeView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TreeView_Detail( );
|
TreeView_Detail( );
|
||||||
void Load_Partitions( std::vector<Partition> & partitions ) ;
|
void Load_Partitions( const std::vector<Partition> & partitions ) ;
|
||||||
void Set_Selected( const Partition & partition );
|
void Set_Selected( const Partition & partition );
|
||||||
|
|
||||||
//signals for interclass communication
|
//signals for interclass communication
|
||||||
sigc::signal<void,GdkEventButton *,const Partition &> signal_mouse_click;
|
sigc::signal<void, GdkEventButton *, const Partition & > signal_mouse_click;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Create_Row( const Gtk::TreeRow &, Partition &);
|
void Create_Row( const Gtk::TreeRow & treerow, const Partition & partition );
|
||||||
|
|
||||||
//overridden signal
|
//overridden signal
|
||||||
virtual bool on_button_press_event(GdkEventButton *);
|
virtual bool on_button_press_event(GdkEventButton *);
|
||||||
|
|
||||||
Gtk::TreeRow row,childrow;
|
Gtk::TreeRow row, childrow;
|
||||||
Gtk::TreeIter iter,iter_child;
|
Gtk::TreeIter iter, iter_child;
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::TreeStore> treestore_detail;
|
Glib::RefPtr<Gtk::TreeStore> treestore_detail;
|
||||||
Glib::RefPtr<Gtk::TreeSelection> treeselection;
|
Glib::RefPtr<Gtk::TreeSelection> treeselection;
|
||||||
|
@ -69,7 +69,7 @@ private:
|
||||||
Gtk::TreeModelColumn<Glib::ustring> flags;
|
Gtk::TreeModelColumn<Glib::ustring> flags;
|
||||||
Gtk::TreeModelColumn< Partition > partition_struct; //hidden column ( see also on_button_press_event )
|
Gtk::TreeModelColumn< Partition > partition_struct; //hidden column ( see also on_button_press_event )
|
||||||
|
|
||||||
treeview_detail_Columns() {
|
treeview_detail_Columns( ) {
|
||||||
add( partition ); add( type ); add( type_square ); add( size ); add( used ); add( unused ); add( color ); add( text_color ); add( status_icon ); add( flags ); add(partition_struct);
|
add( partition ); add( type ); add( type_square ); add( size ); add( used ); add( unused ); add( color ); add( text_color ); add( status_icon ); add( flags ); add(partition_struct);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -43,12 +43,14 @@ typedef long long Sector;
|
||||||
struct FS
|
struct FS
|
||||||
{
|
{
|
||||||
Glib::ustring filesystem ;
|
Glib::ustring filesystem ;
|
||||||
|
bool read ; //can we get the amount of used sectors?
|
||||||
bool create ;
|
bool create ;
|
||||||
bool resize ; //only endpoint
|
bool resize ; //only endpoint
|
||||||
bool move ; //startpoint and endpoint
|
bool move ; //startpoint and endpoint
|
||||||
bool check ;
|
bool check ; //some checktool available?
|
||||||
|
bool copy ;
|
||||||
|
|
||||||
FS( ) {create = resize = move = check = false ;}
|
FS( ) {read = create = resize = move = check = copy = false ;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ class VBox_VisualDisk : public Gtk::VBox
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VBox_VisualDisk( const std::vector<Partition> & partitions, const Sector device_length );
|
VBox_VisualDisk( const std::vector<Partition> & partitions, const Sector device_length );
|
||||||
~VBox_VisualDisk();
|
~VBox_VisualDisk( );
|
||||||
void Set_Selected( const Partition & );
|
void Set_Selected( const Partition & );
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Build_Visual_Disk( ) ; //i still dream of some fully resizeable visualdisk....
|
void Build_Visual_Disk( ) ; //i still dream of some fully resizeable visualdisk....
|
||||||
void Create_Visual_Partition( Partition & partition ) ;
|
void Create_Visual_Partition( const Partition & partition ) ;
|
||||||
void Prepare_Legend( std::vector<Glib::ustring> & legend, const std::vector<Partition> & partitions ) ;
|
void Prepare_Legend( std::vector<Glib::ustring> & legend, const std::vector<Partition> & partitions ) ;
|
||||||
void Build_Legend( ) ;
|
void Build_Legend( ) ;
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,11 @@ class ext2 : public FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FS get_filesystem_support( ) ;
|
FS get_filesystem_support( ) ;
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
||||||
bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
int get_estimated_time( long MB_to_Consider ) ;
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,11 @@ class ext3 : public FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FS get_filesystem_support( ) ;
|
FS get_filesystem_support( ) ;
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
||||||
bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
int get_estimated_time( long MB_to_Consider ) ;
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,11 @@ class fat16 : public FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FS get_filesystem_support( ) ;
|
FS get_filesystem_support( ) ;
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
||||||
bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
int get_estimated_time( long MB_to_Consider ) ;
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,9 +28,11 @@ class fat32 : public FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FS get_filesystem_support( );
|
FS get_filesystem_support( );
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
||||||
bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
int get_estimated_time( long MB_to_Consider ) ;
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,9 +28,11 @@ class linux_swap : public FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FS get_filesystem_support( ) ;
|
FS get_filesystem_support( ) ;
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
||||||
bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
int get_estimated_time( long MB_to_Consider ) ;
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,11 @@ class reiserfs : public FileSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FS get_filesystem_support( ) ;
|
FS get_filesystem_support( ) ;
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
bool Create( const Glib::ustring device_path, const Partition & new_partition ) ;
|
||||||
bool Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new ) ;
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
int get_estimated_time( long MB_to_Consider ) ;
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ Dialog_Partition_Copy::Dialog_Partition_Copy()
|
||||||
Set_Confirm_Button( PASTE ) ;
|
Set_Confirm_Button( PASTE ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Partition_Copy::Set_Data( Partition & selected_partition, Partition & copied_partition )
|
void Dialog_Partition_Copy::Set_Data( const Partition & selected_partition, const Partition & copied_partition )
|
||||||
{
|
{
|
||||||
GRIP = true ; //prevents on spinbutton_changed from getting activated prematurely
|
GRIP = true ; //prevents on spinbutton_changed from getting activated prematurely
|
||||||
|
|
||||||
|
@ -36,40 +36,40 @@ void Dialog_Partition_Copy::Set_Data( Partition & selected_partition, Partition
|
||||||
frame_resizer_base ->set_rgb_partition_color( copied_partition .color ) ;
|
frame_resizer_base ->set_rgb_partition_color( copied_partition .color ) ;
|
||||||
|
|
||||||
//set some widely used values...
|
//set some widely used values...
|
||||||
START = selected_partition.sector_start ;
|
START = selected_partition .sector_start ;
|
||||||
total_length = selected_partition.sector_end - selected_partition.sector_start ;
|
total_length = selected_partition .sector_end - selected_partition .sector_start ;
|
||||||
TOTAL_MB = selected_partition .Get_Length_MB() ;
|
TOTAL_MB = selected_partition .Get_Length_MB() ;
|
||||||
MB_PER_PIXEL = (double) TOTAL_MB / 500 ;
|
MB_PER_PIXEL = (double) TOTAL_MB / 500 ;
|
||||||
|
|
||||||
//now calculate proportional length of partition
|
//now calculate proportional length of partition
|
||||||
frame_resizer_base ->set_x_start( 0 ) ;
|
frame_resizer_base ->set_x_start( 0 ) ;
|
||||||
frame_resizer_base ->set_x_end( ( Round( (double) (copied_partition.sector_end - copied_partition.sector_start) / ( (double)total_length/500) )) ) ;
|
frame_resizer_base ->set_x_end( ( Round( (double) (copied_partition .sector_end - copied_partition .sector_start) / ( (double)total_length/500) )) ) ;
|
||||||
frame_resizer_base ->set_used( frame_resizer_base ->get_x_end() ) ;
|
frame_resizer_base ->set_used( frame_resizer_base ->get_x_end( ) ) ;
|
||||||
|
|
||||||
//used to store current positions (see Dialog_Base_Partition::on_signal_resize)
|
//used to store current positions (see Dialog_Base_Partition::on_signal_resize)
|
||||||
this ->x_start = frame_resizer_base ->get_x_start( ) ;
|
this ->x_start = frame_resizer_base ->get_x_start( ) ;
|
||||||
this ->x_end = frame_resizer_base ->get_x_end( ) ;
|
this ->x_end = frame_resizer_base ->get_x_end( ) ;
|
||||||
|
|
||||||
//set values of spinbutton_before
|
//set values of spinbutton_before
|
||||||
spinbutton_before .set_range( 0, TOTAL_MB - copied_partition .Get_Length_MB() -1 ) ;//mind the -1 !!
|
spinbutton_before .set_range( 0, TOTAL_MB - copied_partition .Get_Length_MB( ) -1 ) ;//mind the -1 !!
|
||||||
spinbutton_before .set_value( 0 ) ;
|
spinbutton_before .set_value( 0 ) ;
|
||||||
|
|
||||||
//set values of spinbutton_size (check for fat16 maxsize of 1023 MB)
|
//set values of spinbutton_size (check for fat16 maxsize of 1023 MB)
|
||||||
long UPPER;
|
long UPPER;
|
||||||
if ( copied_partition.filesystem == "fat16" && Sector_To_MB( total_length ) > 1023 )
|
if ( copied_partition .filesystem == "fat16" && Sector_To_MB( total_length ) > 1023 )
|
||||||
UPPER = 1023 ;
|
UPPER = 1023 ;
|
||||||
else
|
else
|
||||||
UPPER = TOTAL_MB ;
|
UPPER = TOTAL_MB ;
|
||||||
|
|
||||||
spinbutton_size .set_range( copied_partition .Get_Length_MB() +1, UPPER ) ;
|
spinbutton_size .set_range( copied_partition .Get_Length_MB( ) +1, UPPER ) ;
|
||||||
spinbutton_size .set_value( copied_partition .Get_Length_MB() ) ;
|
spinbutton_size .set_value( copied_partition .Get_Length_MB( ) ) ;
|
||||||
|
|
||||||
//set values of spinbutton_after
|
//set values of spinbutton_after
|
||||||
spinbutton_after .set_range( 0, TOTAL_MB - copied_partition .Get_Length_MB() -1 ) ;
|
spinbutton_after .set_range( 0, TOTAL_MB - copied_partition .Get_Length_MB( ) -1 ) ;
|
||||||
spinbutton_after .set_value( TOTAL_MB - copied_partition .Get_Length_MB() ) ;
|
spinbutton_after .set_value( TOTAL_MB - copied_partition .Get_Length_MB( ) ) ;
|
||||||
|
|
||||||
//set contents of label_minmax
|
//set contents of label_minmax
|
||||||
Set_MinMax_Text( copied_partition .Get_Length_MB() +1, UPPER ) ;
|
Set_MinMax_Text( copied_partition .Get_Length_MB( ) +1, UPPER ) ;
|
||||||
|
|
||||||
//set global selected_partition (see Dialog_Base_Partition::Get_New_Partition )
|
//set global selected_partition (see Dialog_Base_Partition::Get_New_Partition )
|
||||||
this ->selected_partition = copied_partition ;
|
this ->selected_partition = copied_partition ;
|
||||||
|
|
|
@ -27,7 +27,7 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
|
||||||
this ->set_resizable( false );
|
this ->set_resizable( false );
|
||||||
|
|
||||||
/*TO TRANSLATORS: dialogtitle, looks like Information about /dev/hda3 */
|
/*TO TRANSLATORS: dialogtitle, looks like Information about /dev/hda3 */
|
||||||
this->set_title( String::ucompose( _( "Information about %1"), partition.partition ) );
|
this ->set_title( String::ucompose( _( "Information about %1"), partition .partition ) );
|
||||||
|
|
||||||
init_drawingarea( ) ;
|
init_drawingarea( ) ;
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
|
||||||
|
|
||||||
hbox = manage( new Gtk::HBox( ) );
|
hbox = manage( new Gtk::HBox( ) );
|
||||||
hbox ->pack_start( *image, Gtk::PACK_SHRINK ) ;
|
hbox ->pack_start( *image, Gtk::PACK_SHRINK ) ;
|
||||||
hbox ->pack_start( * mk_label( "<b> " + (Glib::ustring) _( "Libparted message:" ) + " </b>" ), Gtk::PACK_SHRINK ) ;
|
hbox ->pack_start( * mk_label( "<b> " + (Glib::ustring) _( "Warning:" ) + " </b>" ), Gtk::PACK_SHRINK ) ;
|
||||||
|
|
||||||
frame ->set_label_widget( *hbox ) ;
|
frame ->set_label_widget( *hbox ) ;
|
||||||
frame ->add( * mk_label( "<i>" + partition.error + "</i>", true, true, true ) ) ;
|
frame ->add( * mk_label( "<i>" + partition.error + "</i>", true, true, true ) ) ;
|
||||||
|
|
|
@ -42,6 +42,7 @@ void Dialog_Partition_New::Set_Data( const Partition & partition, bool any_exten
|
||||||
this ->new_count = new_count;
|
this ->new_count = new_count;
|
||||||
this ->selected_partition = partition;
|
this ->selected_partition = partition;
|
||||||
this ->FILESYSTEMS = FILESYSTEMS ;
|
this ->FILESYSTEMS = FILESYSTEMS ;
|
||||||
|
this ->FILESYSTEMS .erase( this ->FILESYSTEMS .end( ) ) ;//remove dummy "unknown"
|
||||||
|
|
||||||
FS fs ; fs.filesystem = "extended" ;
|
FS fs ; fs.filesystem = "extended" ;
|
||||||
this ->FILESYSTEMS .push_back( fs ) ;
|
this ->FILESYSTEMS .push_back( fs ) ;
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
namespace GParted
|
namespace GParted
|
||||||
{
|
{
|
||||||
|
|
||||||
Dialog_Partition_Resize_Move::Dialog_Partition_Resize_Move( std::vector<FS> FILESYSTEMS )
|
Dialog_Partition_Resize_Move::Dialog_Partition_Resize_Move( std::vector<FS> FILESYSTEMS, Sector cylinder_size )
|
||||||
{
|
{
|
||||||
this ->FILESYSTEMS = FILESYSTEMS ;
|
this ->FILESYSTEMS = FILESYSTEMS ;
|
||||||
BUF = 5 ;
|
BUF = Sector_To_MB( cylinder_size ) *2 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog_Partition_Resize_Move::Set_Data( const Partition & selected_partition, const std::vector <Partition> & partitions )
|
void Dialog_Partition_Resize_Move::Set_Data( const Partition & selected_partition, const std::vector <Partition> & partitions )
|
||||||
|
|
|
@ -21,14 +21,20 @@
|
||||||
namespace GParted
|
namespace GParted
|
||||||
{
|
{
|
||||||
|
|
||||||
|
FileSystem::FileSystem( )
|
||||||
|
{
|
||||||
|
disk = NULL;
|
||||||
|
cylinder_size = 0 ;
|
||||||
|
}
|
||||||
|
|
||||||
bool FileSystem::Execute_Command( Glib::ustring command )
|
bool FileSystem::Execute_Command( Glib::ustring command )
|
||||||
{
|
{
|
||||||
Glib::Dispatcher dispatcher;
|
Glib::Dispatcher dispatcher;
|
||||||
sigc::connection conn = dispatcher .connect( sigc::mem_fun(*this, &FileSystem::Update_Textview) );
|
sigc::connection conn = dispatcher .connect( sigc::mem_fun(*this, &FileSystem::Update_Textview) );
|
||||||
|
|
||||||
//stderr to stdout
|
//stderr to stdout
|
||||||
command += " 2>&1" ;
|
//command += " 2>&1" ;
|
||||||
|
std::cout << command << std::endl ;
|
||||||
output = command + "\n\n" ;
|
output = command + "\n\n" ;
|
||||||
dispatcher ( ) ;
|
dispatcher ( ) ;
|
||||||
|
|
||||||
|
@ -47,6 +53,7 @@ bool FileSystem::Execute_Command( Glib::ustring command )
|
||||||
output = "" ;
|
output = "" ;
|
||||||
dispatcher ( ) ;
|
dispatcher ( ) ;
|
||||||
|
|
||||||
|
|
||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,25 +3,11 @@
|
||||||
namespace GParted
|
namespace GParted
|
||||||
{
|
{
|
||||||
|
|
||||||
//AFAIK it's not possible to use a C++ memberfunction as a callback for a C libary function (if you know otherwise, PLEASE contact me)
|
|
||||||
Glib::ustring error_message;
|
|
||||||
PedExceptionOption PedException_Handler (PedException* ex)
|
|
||||||
{
|
|
||||||
error_message = Glib::locale_to_utf8( ex ->message ) ;
|
|
||||||
|
|
||||||
std::cout << "\nLIBPARTED MESSAGE ----------------------\n" << error_message << "\n---------------------------\n";
|
|
||||||
|
|
||||||
return PED_EXCEPTION_UNHANDLED ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GParted_Core::GParted_Core( )
|
GParted_Core::GParted_Core( )
|
||||||
{
|
{
|
||||||
device = NULL ;
|
device = NULL ;
|
||||||
disk = NULL ;
|
disk = NULL ;
|
||||||
c_partition = NULL ;
|
c_partition = NULL ;
|
||||||
ped_exception_set_handler( PedException_Handler ) ;
|
|
||||||
|
|
||||||
p_filesystem = NULL ;
|
p_filesystem = NULL ;
|
||||||
textbuffer = Gtk::TextBuffer::create( ) ;
|
textbuffer = Gtk::TextBuffer::create( ) ;
|
||||||
|
@ -52,6 +38,10 @@ void GParted_Core::find_supported_filesystems( )
|
||||||
|
|
||||||
reiserfs fs_reiserfs;
|
reiserfs fs_reiserfs;
|
||||||
FILESYSTEMS .push_back( fs_reiserfs .get_filesystem_support( ) ) ;
|
FILESYSTEMS .push_back( fs_reiserfs .get_filesystem_support( ) ) ;
|
||||||
|
|
||||||
|
//unknown filesystem (default when no match is found)
|
||||||
|
FS fs ; fs .filesystem = "unknown" ;
|
||||||
|
FILESYSTEMS .push_back( fs ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GParted_Core::get_devices( std::vector<Device> & devices, bool deep_scan )
|
void GParted_Core::get_devices( std::vector<Device> & devices, bool deep_scan )
|
||||||
|
@ -110,7 +100,7 @@ void GParted_Core::get_devices( std::vector<Device> & devices, bool deep_scan )
|
||||||
void GParted_Core::set_device_partitions( Device & device, bool deep_scan )
|
void GParted_Core::set_device_partitions( Device & device, bool deep_scan )
|
||||||
{
|
{
|
||||||
Partition partition_temp ;
|
Partition partition_temp ;
|
||||||
Glib::ustring part_path, error ;
|
Glib::ustring part_path ;
|
||||||
int EXT_INDEX = -1 ;
|
int EXT_INDEX = -1 ;
|
||||||
|
|
||||||
//clear partitions
|
//clear partitions
|
||||||
|
@ -131,13 +121,13 @@ void GParted_Core::set_device_partitions( Device & device, bool deep_scan )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
temp = "unknown" ;
|
temp = "unknown" ;
|
||||||
error = _( "Unable to detect filesystem! Possible reasons are:" ) ;
|
partition_temp .error = _( "Unable to detect filesystem! Possible reasons are:" ) ;
|
||||||
error += "\n-";
|
partition_temp .error += "\n-";
|
||||||
error += _( "The filesystem is damaged" ) ;
|
partition_temp .error += _( "The filesystem is damaged" ) ;
|
||||||
error += "\n-" ;
|
partition_temp .error += "\n-" ;
|
||||||
error += _( "The filesystem is unknown to libparted" ) ;
|
partition_temp .error += _( "The filesystem is unknown to libparted" ) ;
|
||||||
error += "\n-";
|
partition_temp .error += "\n-";
|
||||||
error += _( "There is no filesystem available (unformatted)" ) ;
|
partition_temp .error += _( "There is no filesystem available (unformatted)" ) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
partition_temp .Set( part_path,
|
partition_temp .Set( part_path,
|
||||||
|
@ -148,11 +138,21 @@ void GParted_Core::set_device_partitions( Device & device, bool deep_scan )
|
||||||
c_partition ->type,
|
c_partition ->type,
|
||||||
ped_partition_is_busy( c_partition ) );
|
ped_partition_is_busy( c_partition ) );
|
||||||
|
|
||||||
if ( deep_scan )
|
if ( deep_scan && partition_temp .filesystem != "linux-swap" )
|
||||||
partition_temp .Set_Used( Get_Used_Sectors( c_partition, part_path ) ) ;
|
{
|
||||||
|
Set_Used_Sectors( partition_temp ) ;
|
||||||
|
|
||||||
|
//the 'Unknow' filesystem warning overrules this one
|
||||||
|
if ( partition_temp .sectors_used == -1 && partition_temp .error .empty( ) )
|
||||||
|
{
|
||||||
|
partition_temp .error = _("Unable to read the contents of this filesystem!") ;
|
||||||
|
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 ) ;
|
||||||
partition_temp .error = error .empty( ) ? error_message : error ;
|
|
||||||
|
|
||||||
if ( partition_temp .busy )
|
if ( partition_temp .busy )
|
||||||
device .busy = true ;
|
device .busy = true ;
|
||||||
|
@ -203,16 +203,13 @@ void GParted_Core::set_device_partitions( Device & device, bool deep_scan )
|
||||||
device .device_partitions[ EXT_INDEX ] .logicals .push_back( partition_temp ) ;
|
device .device_partitions[ EXT_INDEX ] .logicals .push_back( partition_temp ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
//reset stuff..
|
|
||||||
error = error_message = "" ;
|
|
||||||
|
|
||||||
//next partition (if any)
|
//next partition (if any)
|
||||||
c_partition = ped_disk_next_partition ( disk, c_partition ) ;
|
c_partition = ped_disk_next_partition ( disk, c_partition ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int GParted_Core::get_estimated_time( Operation & operation )
|
int GParted_Core::get_estimated_time( const Operation & operation )
|
||||||
{
|
{
|
||||||
switch ( operation .operationtype )
|
switch ( operation .operationtype )
|
||||||
{
|
{
|
||||||
|
@ -269,13 +266,9 @@ void GParted_Core::Apply_Operation_To_Disk( Operation & operation )
|
||||||
case COPY:
|
case COPY:
|
||||||
if ( ! Copy( operation .device_path, operation .copied_partition_path, operation .partition_new ) )
|
if ( ! Copy( operation .device_path, operation .copied_partition_path, operation .partition_new ) )
|
||||||
Show_Error( String::ucompose( _("Error while copying %1"), operation .partition_new .partition ) ) ;
|
Show_Error( String::ucompose( _("Error while copying %1"), operation .partition_new .partition ) ) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool GParted_Core::Create( const Glib::ustring & device_path, Partition & new_partition )
|
bool GParted_Core::Create( const Glib::ustring & device_path, Partition & new_partition )
|
||||||
{
|
{
|
||||||
if ( new_partition .type == GParted::EXTENDED )
|
if ( new_partition .type == GParted::EXTENDED )
|
||||||
|
@ -316,16 +309,45 @@ bool GParted_Core::Delete( const Glib::ustring & device_path, const Partition &
|
||||||
return return_value ;
|
return return_value ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GParted_Core::Resize(const Glib::ustring & device_path, const Partition & partition_old, const Partition & partition_new )
|
bool GParted_Core::Resize( const Glib::ustring & device_path, const Partition & partition_old, const Partition & partition_new )
|
||||||
{
|
{
|
||||||
if ( partition_old .type == GParted::EXTENDED )
|
if ( partition_old .type == GParted::EXTENDED )
|
||||||
return Resize_Extended( device_path, partition_new ) ;
|
return Resize_Container_Partition( device_path, partition_old, partition_new ) ;
|
||||||
|
|
||||||
|
//these 3 still use libparted's resizer.
|
||||||
|
else if ( partition_old .filesystem == "linux-swap" ||
|
||||||
|
partition_old .filesystem == "fat16" ||
|
||||||
|
partition_old .filesystem == "fat32"
|
||||||
|
)
|
||||||
|
return Resize_Normal_Using_Libparted( device_path, partition_old, partition_new ) ;
|
||||||
|
|
||||||
|
//use custom resize tools..(afaik only resize, no moves)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
set_proper_filesystem( partition_new .filesystem ) ;
|
set_proper_filesystem( partition_new .filesystem ) ;
|
||||||
|
|
||||||
return p_filesystem ->Resize( device_path, partition_old, partition_new ) ;
|
if ( p_filesystem ->Check_Repair( partition_new ) )
|
||||||
|
{
|
||||||
|
//shrinking
|
||||||
|
if ( partition_new .sector_end < partition_old .sector_end )
|
||||||
|
{
|
||||||
|
p_filesystem ->cylinder_size = Get_Cylinder_Size( device_path ) ;
|
||||||
|
|
||||||
|
if ( p_filesystem ->Resize( partition_new ) )
|
||||||
|
Resize_Container_Partition( device_path, partition_old, partition_new ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//growing
|
||||||
|
if ( partition_new .sector_end > partition_old .sector_end )
|
||||||
|
Resize_Container_Partition( device_path, partition_old, partition_new ) ;
|
||||||
|
|
||||||
|
|
||||||
|
p_filesystem ->Check_Repair( partition_new ) ;
|
||||||
|
|
||||||
|
p_filesystem ->Resize( partition_new, true ) ; //expand filesystem to fit exactly in partition
|
||||||
|
|
||||||
|
return p_filesystem ->Check_Repair( partition_new ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false ;
|
return false ;
|
||||||
|
@ -383,64 +405,32 @@ Glib::ustring GParted_Core::get_sym_path( const Glib::ustring & real_path )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Sector GParted_Core::Get_Used_Sectors( PedPartition *c_partition, const Glib::ustring & sym_path)
|
void GParted_Core::Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
/* This is quite an unreliable process, atm i try two different methods, but since both are far from perfect the results are
|
if ( partition .filesystem == "unknown" || partition .filesystem == "linux-swap" )
|
||||||
* questionable.
|
partition .Set_Unused( -1 ) ;
|
||||||
* - first i try geometry.get_used() in libpartedpp, i implemented this function to check the minimal size when resizing a partition. Disadvantage
|
|
||||||
* of this method is the fact it won't work on mounted filesystems. Besides that, its SLOW
|
|
||||||
* - if the former method fails ( result is -1 ) i'll try to read the output from the df command ( df -k --sync <partition path> )
|
|
||||||
* - if this fails the filesystem on the partition is ( more or less ) unknown to the operating system and therefore the unused sectors cannot be calcualted
|
|
||||||
* - as soon as i have my internetconnection back i should ask people with more experience on this stuff for advice !
|
|
||||||
*/
|
|
||||||
|
|
||||||
//check if there is a (known) filesystem
|
else if ( partition .busy )
|
||||||
if ( ! c_partition ->fs_type )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
//used sectors are not relevant for swapspace
|
|
||||||
if ( (Glib::ustring) c_partition ->fs_type ->name == "linux-swap" )
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
//METHOD #1
|
|
||||||
//the getused method doesn't work on mounted partitions and for some filesystems ( i *guess* this is called check by andrew )
|
|
||||||
if ( ! ped_partition_is_busy( c_partition ) && Get_FS( c_partition ->fs_type ->name, FILESYSTEMS ) .create )
|
|
||||||
{
|
{
|
||||||
PedFileSystem *fs = NULL;
|
system( ("df -k --sync " + partition .partition + " | grep " + partition .partition + " > /tmp/.tmp_gparted") .c_str( ) );
|
||||||
PedConstraint *constraint = NULL;
|
|
||||||
|
|
||||||
fs = ped_file_system_open( & c_partition ->geom );
|
|
||||||
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint (fs);
|
|
||||||
ped_file_system_close (fs);
|
|
||||||
if ( constraint && constraint->min_size != -1 )
|
|
||||||
return constraint->min_size ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//METHOD #2
|
|
||||||
//this ony works for mounted ( and therefore known to the OS ) filesystems. My method is quite crude, keep in mind it's only temporary ;-)
|
|
||||||
if ( ped_partition_is_busy( c_partition ) )
|
|
||||||
{
|
|
||||||
Glib::ustring buf;
|
|
||||||
system( ("df -k --sync " + sym_path + " | grep " + sym_path + " > /tmp/.tmp_gparted") .c_str( ) );
|
|
||||||
std::ifstream file_input( "/tmp/.tmp_gparted" );
|
std::ifstream file_input( "/tmp/.tmp_gparted" );
|
||||||
|
|
||||||
file_input >> buf; //skip first value
|
//we need the 4th value
|
||||||
file_input >> buf;
|
file_input >> temp; file_input >> temp; file_input >> temp;file_input >> temp;
|
||||||
if ( buf != "0" && ! buf .empty( ) )
|
if ( ! temp .empty( ) )
|
||||||
|
partition .Set_Unused( atoi( temp .c_str( ) ) * 1024/512 ) ;
|
||||||
|
|
||||||
|
file_input .close( );
|
||||||
|
system( "rm -f /tmp/.tmp_gparted" );
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( Get_FS( partition .filesystem, FILESYSTEMS ) .read )
|
||||||
{
|
{
|
||||||
file_input >> buf;
|
set_proper_filesystem( partition .filesystem ) ;
|
||||||
file_input .close( ); system( "rm -f /tmp/.tmp_gparted" );
|
|
||||||
return atoi( buf .c_str( ) ) * 1024/512 ;
|
|
||||||
}
|
|
||||||
file_input .close( ); system( "rm -f /tmp/.tmp_gparted" );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
p_filesystem ->disk = disk ;
|
||||||
return -1 ; //all methods were unsuccesfull
|
p_filesystem ->Set_Used_Sectors( partition ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int GParted_Core::Create_Empty_Partition( const Glib::ustring & device_path, Partition & new_partition, bool copy )
|
int GParted_Core::Create_Empty_Partition( const Glib::ustring & device_path, Partition & new_partition, bool copy )
|
||||||
|
@ -491,28 +481,70 @@ int GParted_Core::Create_Empty_Partition( const Glib::ustring & device_path, Par
|
||||||
return new_partition .partition_number ;
|
return new_partition .partition_number ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GParted_Core::Resize_Extended( const Glib::ustring & device_path, const Partition & extended )
|
bool GParted_Core::Resize_Container_Partition( const Glib::ustring & device_path, const Partition & partition_old, const Partition & partition_new )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
bool return_value = false ;
|
||||||
|
|
||||||
|
PedConstraint *constraint = NULL ;
|
||||||
|
c_partition = NULL ;
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
if ( open_device_and_disk( device_path, device, disk ) )
|
||||||
{
|
{
|
||||||
PedPartition *c_part = NULL ;
|
if ( partition_old .type == GParted::EXTENDED )
|
||||||
PedConstraint *constraint = NULL ;
|
c_partition = ped_disk_extended_partition( disk ) ;
|
||||||
|
else
|
||||||
|
c_partition = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
||||||
|
|
||||||
c_part = ped_disk_extended_partition( disk ) ;
|
if ( c_partition )
|
||||||
if ( c_part )
|
|
||||||
{
|
{
|
||||||
constraint = ped_constraint_any ( device );
|
constraint = ped_constraint_any( device );
|
||||||
if ( constraint )
|
if ( constraint )
|
||||||
{
|
{
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, extended .sector_start, extended .sector_end ) )
|
if ( ped_disk_set_partition_geom ( disk, c_partition, constraint, partition_new .sector_start, partition_new .sector_end ) )
|
||||||
{
|
|
||||||
ped_partition_set_system ( c_part, NULL );
|
|
||||||
return_value = Commit( disk ) ;
|
return_value = Commit( disk ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
ped_constraint_destroy (constraint);
|
|
||||||
|
}
|
||||||
|
|
||||||
|
close_device_and_disk( device, disk ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep( 1 ) ; //the OS needs time to re-add the devicenode..
|
||||||
|
|
||||||
|
return return_value ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GParted_Core::Resize_Normal_Using_Libparted( const Glib::ustring & device_path, const Partition & partition_old, const Partition & partition_new )
|
||||||
|
{
|
||||||
|
bool return_value = false ;
|
||||||
|
|
||||||
|
PedFileSystem *fs = NULL ;
|
||||||
|
PedConstraint *constraint = NULL ;
|
||||||
|
c_partition = NULL ;
|
||||||
|
|
||||||
|
if ( open_device_and_disk( device_path, device, disk ) )
|
||||||
|
{
|
||||||
|
c_partition = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
||||||
|
if ( c_partition )
|
||||||
|
{
|
||||||
|
fs = ped_file_system_open ( & c_partition ->geom );
|
||||||
|
if ( fs )
|
||||||
|
{
|
||||||
|
constraint = ped_file_system_get_resize_constraint ( fs );
|
||||||
|
if ( constraint )
|
||||||
|
{
|
||||||
|
if ( ped_disk_set_partition_geom ( disk, c_partition, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
||||||
|
ped_file_system_resize ( fs, & c_partition ->geom, NULL )
|
||||||
|
)
|
||||||
|
return_value = Commit( disk ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
|
}
|
||||||
|
|
||||||
|
ped_file_system_close ( fs );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,4 +602,18 @@ void GParted_Core::set_proper_filesystem( const Glib::ustring & filesystem )
|
||||||
p_filesystem ->textbuffer = textbuffer ;
|
p_filesystem ->textbuffer = textbuffer ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long GParted_Core::Get_Cylinder_Size( const Glib::ustring & device_path )
|
||||||
|
{
|
||||||
|
long cylinder_size = 0 ;
|
||||||
|
|
||||||
|
if ( open_device( device_path, device ) )
|
||||||
|
{
|
||||||
|
cylinder_size = Sector_To_MB( device ->bios_geom .heads * device ->bios_geom .sectors ) ;
|
||||||
|
|
||||||
|
close_device_and_disk( device, disk ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cylinder_size ;
|
||||||
|
}
|
||||||
|
|
||||||
} //GParted
|
} //GParted
|
||||||
|
|
|
@ -56,38 +56,37 @@ void Partition::Set( const Glib::ustring & partition,
|
||||||
this ->busy = busy;
|
this ->busy = busy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Partition::Set_Used( Sector used )
|
void Partition::Set_Unused( Sector sectors_unused )
|
||||||
{
|
{
|
||||||
this ->sectors_used = used;
|
this ->sectors_unused = sectors_unused ;
|
||||||
this ->sectors_unused = ( used == -1 ) ? -1 : ( sector_end - sector_start) - used ;
|
this ->sectors_used = ( sectors_unused == -1 ) ? -1 : ( sector_end - sector_start) - sectors_unused ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Partition::Set_Unallocated( Sector sector_start, Sector sector_end, bool inside_extended )
|
void Partition::Set_Unallocated( Sector sector_start, Sector sector_end, bool inside_extended )
|
||||||
{
|
{
|
||||||
this ->Set( _("Unallocated"), -1, GParted::UNALLOCATED, "unallocated", sector_start, sector_end , inside_extended, false);
|
this ->Set( _("Unallocated"), -1, GParted::UNALLOCATED, "unallocated", sector_start, sector_end , inside_extended, false );
|
||||||
this ->error = this ->flags = "" ;
|
this ->error = this ->flags = "" ;
|
||||||
this ->status = GParted::STAT_REAL ;
|
this ->status = GParted::STAT_REAL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Partition::Update_Number( int new_number )
|
void Partition::Update_Number( int new_number )
|
||||||
{ //of course this fails when we have devicenames with numbers over 99
|
{ //of course this fails when we have devicenames with numbers over 99
|
||||||
partition_number >= 10 ? partition = partition.substr( 0, partition.length() -2 ) : partition = partition.substr( 0, partition.length() -1 ) ;
|
partition = partition .substr( 0, partition .length( ) - ( partition_number >= 10 ? 2 : 1 ) ) ;
|
||||||
|
|
||||||
this ->partition_number = new_number;
|
this ->partition_number = new_number;
|
||||||
this ->partition += num_to_str( partition_number ) ;
|
this ->partition += num_to_str( partition_number ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
long Partition::Get_Length_MB( )
|
const long Partition::Get_Length_MB( ) const
|
||||||
{
|
{
|
||||||
return Sector_To_MB( this ->sector_end - this ->sector_start) ;
|
return Sector_To_MB( sector_end - sector_start ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
long Partition::Get_Used_MB( )
|
const long Partition::Get_Used_MB( ) const
|
||||||
{
|
{
|
||||||
return Sector_To_MB( this ->sectors_used) ;
|
return Sector_To_MB( this ->sectors_used ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
long Partition::Get_Unused_MB( )
|
const long Partition::Get_Unused_MB( ) const
|
||||||
{
|
{
|
||||||
return Get_Length_MB( ) - Get_Used_MB( ) ;
|
return Get_Length_MB( ) - Get_Used_MB( ) ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,53 +70,58 @@ TreeView_Detail::TreeView_Detail( )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeView_Detail::Load_Partitions( std::vector<Partition> & partitions )
|
void TreeView_Detail::Load_Partitions( const std::vector<Partition> & partitions )
|
||||||
{
|
{
|
||||||
treestore_detail ->clear() ;
|
treestore_detail ->clear( ) ;
|
||||||
|
|
||||||
for ( unsigned int i=0;i<partitions.size();i++ )
|
for ( unsigned int i = 0 ; i < partitions .size( ) ; i++ )
|
||||||
{
|
{
|
||||||
row = *(treestore_detail->append());
|
row = *( treestore_detail ->append( ) );
|
||||||
Create_Row( row, partitions[i] );
|
Create_Row( row, partitions[ i ] );
|
||||||
|
|
||||||
if ( partitions[i] .type == GParted::EXTENDED )
|
if ( partitions[ i ] .type == GParted::EXTENDED )
|
||||||
{
|
{
|
||||||
for ( unsigned int t=0;t<partitions[i] .logicals .size();t++ )
|
for ( unsigned int t = 0 ; t < partitions[ i ] .logicals .size( ) ; t++ )
|
||||||
{
|
{
|
||||||
childrow = *(treestore_detail->append( row.children() ));
|
childrow = *( treestore_detail ->append( row.children( ) ) );
|
||||||
Create_Row( childrow, partitions[i] .logicals[ t ] );
|
Create_Row( childrow, partitions[ i ] .logicals[ t ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//show logical partitions ( if any )
|
//show logical partitions ( if any )
|
||||||
this->expand_all();
|
this ->expand_all( );
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeView_Detail::Set_Selected( const Partition & partition )
|
void TreeView_Detail::Set_Selected( const Partition & partition )
|
||||||
{
|
{
|
||||||
//look for appropiate row
|
//look for appropiate row
|
||||||
for(iter = treestore_detail->children().begin();iter!=treestore_detail->children().end();iter++ )
|
for( iter = treestore_detail ->children( ) .begin( ) ; iter != treestore_detail ->children( ) .end( ) ; iter++ )
|
||||||
{
|
{
|
||||||
row = *iter;
|
row = *iter;
|
||||||
partition_temp = row[treeview_detail_columns.partition_struct] ;
|
partition_temp = row[ treeview_detail_columns.partition_struct ] ;
|
||||||
//primary's
|
//primary's
|
||||||
if ( partition .sector_start >= partition_temp .sector_start && partition .sector_end <=partition_temp .sector_end && partition.inside_extended == partition_temp.inside_extended )
|
if ( partition .sector_start >= partition_temp .sector_start &&
|
||||||
{ this->set_cursor( (Gtk::TreePath) row); return; }
|
partition .sector_end <=partition_temp .sector_end &&
|
||||||
|
partition.inside_extended == partition_temp.inside_extended )
|
||||||
|
{
|
||||||
|
this ->set_cursor( (Gtk::TreePath) row );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//logicals
|
//logicals
|
||||||
if ( row.children().size() > 0 ) //this is the row with the extended partition, search it's childrows...
|
if ( row .children( ) .size( ) > 0 ) //this is the row with the extended partition, search it's childrows...
|
||||||
{
|
{
|
||||||
for(iter_child = row.children().begin();iter_child != row.children().end();iter_child++ )
|
for( iter_child = row .children( ) .begin( ) ; iter_child != row.children( ) .end( ) ; iter_child++ )
|
||||||
{
|
{
|
||||||
childrow = *iter_child;
|
childrow = *iter_child;
|
||||||
partition_temp = childrow[treeview_detail_columns.partition_struct] ;
|
partition_temp = childrow[ treeview_detail_columns.partition_struct ] ;
|
||||||
|
|
||||||
if ( partition .sector_start >= partition_temp .sector_start && partition .sector_end <= partition_temp.sector_end )
|
if ( partition .sector_start >= partition_temp .sector_start && partition .sector_end <= partition_temp .sector_end )
|
||||||
{
|
{
|
||||||
this->expand_all();
|
this ->expand_all( );
|
||||||
this->set_cursor( (Gtk::TreePath) childrow);
|
this ->set_cursor( (Gtk::TreePath) childrow );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,54 +132,54 @@ void TreeView_Detail::Set_Selected( const Partition & partition )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TreeView_Detail::Create_Row( const Gtk::TreeRow & treerow, Partition & partition )
|
void TreeView_Detail::Create_Row( const Gtk::TreeRow & treerow, const Partition & partition )
|
||||||
{
|
{
|
||||||
//hereby i assume these 2 are mutual exclusive. is this wise?? Time (and bugreports) will tell :)
|
//hereby i assume these 2 are mutual exclusive. is this wise?? Time (and bugreports) will tell :)
|
||||||
if ( partition.busy )
|
if ( partition .busy )
|
||||||
treerow[treeview_detail_columns.status_icon] = render_icon(Gtk::Stock::DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_BUTTON);
|
treerow[ treeview_detail_columns .status_icon ] = render_icon( Gtk::Stock::DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_BUTTON );
|
||||||
else if ( partition.filesystem == "unknown" || partition .error != "" )
|
else if ( partition .filesystem == "unknown" || partition .error != "" )
|
||||||
treerow[treeview_detail_columns.status_icon] = render_icon(Gtk::Stock::DIALOG_WARNING, Gtk::ICON_SIZE_BUTTON);
|
treerow[ treeview_detail_columns .status_icon ] = render_icon( Gtk::Stock::DIALOG_WARNING, Gtk::ICON_SIZE_BUTTON );
|
||||||
|
|
||||||
treerow[treeview_detail_columns.partition] = partition.partition;
|
treerow[ treeview_detail_columns .partition ] = partition .partition;
|
||||||
treerow[treeview_detail_columns.color] = Get_Color( partition .filesystem ) ;
|
treerow[ treeview_detail_columns .color ] = Get_Color( partition .filesystem ) ;
|
||||||
|
|
||||||
partition .type == GParted::UNALLOCATED ? treerow[treeview_detail_columns.text_color] = "darkgrey" : treerow[treeview_detail_columns.text_color] = "black" ;
|
treerow[ treeview_detail_columns .text_color ] = ( partition .type == GParted::UNALLOCATED ) ? "darkgrey" : "black" ;
|
||||||
treerow[treeview_detail_columns.type] = partition.filesystem ;
|
treerow[ treeview_detail_columns .type ] = partition .filesystem ;
|
||||||
treerow[ treeview_detail_columns .type_square ] = "██" ;
|
treerow[ treeview_detail_columns .type_square ] = "██" ;
|
||||||
|
|
||||||
//size
|
//size
|
||||||
treerow[treeview_detail_columns.size] = num_to_str( partition .Get_Length_MB() ) ;
|
treerow[ treeview_detail_columns .size ] = num_to_str( partition .Get_Length_MB( ) ) ;
|
||||||
|
|
||||||
//used
|
//used
|
||||||
if ( partition.sectors_used != -1 )
|
if ( partition .sectors_used != -1 )
|
||||||
treerow[treeview_detail_columns.used] = num_to_str( partition .Get_Used_MB() ) ;
|
treerow[ treeview_detail_columns .used ] = num_to_str( partition .Get_Used_MB( ) ) ;
|
||||||
else
|
else
|
||||||
treerow[treeview_detail_columns.used] = "---" ;
|
treerow[ treeview_detail_columns .used ] = "---" ;
|
||||||
|
|
||||||
//unused
|
//unused
|
||||||
if ( partition .sectors_unused != -1 )
|
if ( partition .sectors_unused != -1 )
|
||||||
treerow[treeview_detail_columns.unused] = num_to_str(partition .Get_Unused_MB() ) ;
|
treerow[ treeview_detail_columns .unused ] = num_to_str( partition .Get_Unused_MB( ) ) ;
|
||||||
else
|
else
|
||||||
treerow[treeview_detail_columns.unused] = "---" ;
|
treerow[ treeview_detail_columns .unused ] = "---" ;
|
||||||
|
|
||||||
//flags
|
//flags
|
||||||
treerow[treeview_detail_columns.flags] = " " + partition .flags ;
|
treerow[ treeview_detail_columns .flags ] = " " + partition .flags ;
|
||||||
|
|
||||||
//hidden column (partition object)
|
//hidden column (partition object)
|
||||||
treerow[treeview_detail_columns.partition_struct] = partition;
|
treerow[ treeview_detail_columns .partition_struct ] = partition;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TreeView_Detail::on_button_press_event(GdkEventButton* event)
|
bool TreeView_Detail::on_button_press_event( GdkEventButton* event )
|
||||||
{
|
{
|
||||||
//Call base class, to allow normal handling,
|
//Call base class, to allow normal handling,
|
||||||
bool return_value = TreeView::on_button_press_event(event);
|
bool return_value = TreeView::on_button_press_event( event );
|
||||||
|
|
||||||
iter = treeselection->get_selected();
|
iter = treeselection ->get_selected( );
|
||||||
|
|
||||||
if ( *iter != 0 )
|
if ( *iter != 0 )
|
||||||
{
|
{
|
||||||
row = *iter;
|
row = *iter;
|
||||||
signal_mouse_click.emit( event, row[treeview_detail_columns.partition_struct] );
|
signal_mouse_click .emit( event, row[ treeview_detail_columns .partition_struct ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
return return_value;
|
return return_value;
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
namespace GParted
|
namespace GParted
|
||||||
{
|
{
|
||||||
|
|
||||||
VBox_VisualDisk::VBox_VisualDisk( const std::vector<Partition> & partitions, const Sector device_length)
|
VBox_VisualDisk::VBox_VisualDisk( const std::vector<Partition> & partitions, const Sector device_length )
|
||||||
{
|
{
|
||||||
this ->partitions = partitions ;
|
this ->partitions = partitions ;
|
||||||
this ->device_length = device_length ;
|
this ->device_length = device_length ;
|
||||||
|
@ -28,8 +28,8 @@ VBox_VisualDisk::VBox_VisualDisk( const std::vector<Partition> & partitions, con
|
||||||
selected_partition = -1;
|
selected_partition = -1;
|
||||||
|
|
||||||
//create frame which contains the visual disk
|
//create frame which contains the visual disk
|
||||||
frame_disk_legend = manage( new Gtk::Frame() ) ;
|
frame_disk_legend = manage( new Gtk::Frame( ) ) ;
|
||||||
frame_disk_legend ->set_shadow_type(Gtk::SHADOW_ETCHED_OUT);
|
frame_disk_legend ->set_shadow_type( Gtk::SHADOW_ETCHED_OUT );
|
||||||
frame_disk_legend ->set_border_width( 5 );
|
frame_disk_legend ->set_border_width( 5 );
|
||||||
hbox_disk_main.pack_start( *frame_disk_legend, Gtk::PACK_EXPAND_PADDING );
|
hbox_disk_main.pack_start( *frame_disk_legend, Gtk::PACK_EXPAND_PADDING );
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@ VBox_VisualDisk::VBox_VisualDisk( const std::vector<Partition> & partitions, con
|
||||||
this->pack_start( hbox_disk_main, Gtk::PACK_SHRINK );
|
this->pack_start( hbox_disk_main, Gtk::PACK_SHRINK );
|
||||||
|
|
||||||
//set and allocated some standard colors
|
//set and allocated some standard colors
|
||||||
color_used.set( "#F8F8BA" ); this ->get_colormap() ->alloc_color( color_used ) ;//bleach yellow ;)
|
color_used.set( "#F8F8BA" ); this ->get_colormap( ) ->alloc_color( color_used ) ;//bleach yellow ;)
|
||||||
color_unused.set( "white" ); this ->get_colormap() ->alloc_color( color_unused ) ;
|
color_unused.set( "white" ); this ->get_colormap( ) ->alloc_color( color_unused ) ;
|
||||||
color_text.set( "black" ); this ->get_colormap() ->alloc_color( color_text ) ;
|
color_text.set( "black" ); this ->get_colormap( ) ->alloc_color( color_text ) ;
|
||||||
|
|
||||||
|
|
||||||
//since disksegments have minimal sizes ( unallocated 15 and partitions 20 pixels ) i do some checking to prevent the visual disk from growing to much
|
//since disksegments have minimal sizes ( unallocated 15 and partitions 20 pixels ) i do some checking to prevent the visual disk from growing to much
|
||||||
|
@ -51,7 +51,7 @@ VBox_VisualDisk::VBox_VisualDisk( const std::vector<Partition> & partitions, con
|
||||||
|
|
||||||
double width, extra_pixels = 0 ;
|
double width, extra_pixels = 0 ;
|
||||||
|
|
||||||
for ( unsigned int t=0; t<partitions.size() ; t++ )
|
for ( unsigned int t = 0; t < partitions .size( ) ; t++ )
|
||||||
{
|
{
|
||||||
width = (double) (partitions[ t ] .sector_end - partitions[ t ] .sector_start) / sectors_per_pixel ;
|
width = (double) (partitions[ t ] .sector_end - partitions[ t ] .sector_start) / sectors_per_pixel ;
|
||||||
|
|
||||||
|
@ -72,102 +72,108 @@ void VBox_VisualDisk::Build_Visual_Disk( )
|
||||||
{
|
{
|
||||||
//since there is a 5 pixel space between every partition.... ( extended adds 2 *5 more, but that doesn't matter that much.
|
//since there is a 5 pixel space between every partition.... ( extended adds 2 *5 more, but that doesn't matter that much.
|
||||||
//NOTE that a part < 20 will also grow to 20, so length in pixels may vary across different devices..
|
//NOTE that a part < 20 will also grow to 20, so length in pixels may vary across different devices..
|
||||||
this ->SCREEN_WIDTH -= ( (partitions .size() -1) *5 ) ;
|
this ->SCREEN_WIDTH -= ( (partitions .size( ) -1) *5 ) ;
|
||||||
|
|
||||||
//create hbox_disk and add to frame
|
//create hbox_disk and add to frame
|
||||||
hbox_disk = manage( new Gtk::HBox() ) ;
|
hbox_disk = manage( new Gtk::HBox( ) ) ;
|
||||||
hbox_disk ->set_spacing( 5 );
|
hbox_disk ->set_spacing( 5 );
|
||||||
frame_disk_legend ->add( *hbox_disk );
|
frame_disk_legend ->add( *hbox_disk );
|
||||||
|
|
||||||
|
|
||||||
//walk through all partitions....
|
//walk through all partitions....
|
||||||
for ( unsigned int i=0;i<partitions.size();i++ )
|
for ( unsigned int i = 0 ; i < partitions .size( ) ; i++ )
|
||||||
{
|
{
|
||||||
Create_Visual_Partition( partitions[i] ) ;
|
Create_Visual_Partition( partitions[ i ] ) ;
|
||||||
|
|
||||||
if ( partitions[i].type != GParted::EXTENDED )
|
if ( partitions[ i ].type != GParted::EXTENDED )
|
||||||
hbox_disk ->pack_start( *( visual_partitions.back() ->drawingarea), Gtk::PACK_SHRINK ) ;
|
hbox_disk ->pack_start( *( visual_partitions .back( ) ->drawingarea ), Gtk::PACK_SHRINK ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
this ->show_all_children() ;
|
this ->show_all_children( ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VBox_VisualDisk::Create_Visual_Partition( Partition & partition )
|
void VBox_VisualDisk::Create_Visual_Partition( const Partition & partition )
|
||||||
{
|
{
|
||||||
int x,y;//for pango_layout check
|
int x,y;//for pango_layout check
|
||||||
|
|
||||||
visual_partition = new Visual_Partition() ;
|
visual_partition = new Visual_Partition( ) ;
|
||||||
visual_partitions.push_back( visual_partition ) ;
|
visual_partitions .push_back( visual_partition ) ;
|
||||||
visual_partitions.back() ->index = visual_partitions .size() -1 ; // <---- BELACHELIJK!! DOE DAAR IETS AAN!!!
|
visual_partitions .back( ) ->index = visual_partitions .size( ) -1 ; // <---- BELACHELIJK!! DOE DAAR IETS AAN!!!
|
||||||
visual_partitions.back() ->sector_start = partition .sector_start ;
|
visual_partitions .back( ) ->sector_start = partition .sector_start ;
|
||||||
|
|
||||||
if ( partition .type == GParted::EXTENDED )
|
if ( partition .type == GParted::EXTENDED )
|
||||||
{
|
{
|
||||||
visual_partitions.back() ->drawingarea = NULL ;//it's just a dummy ;-) ( see Set_Selected() )
|
visual_partitions.back( ) ->drawingarea = NULL ;//it's just a dummy ;-) ( see Set_Selected() )
|
||||||
visual_partitions.back() ->length = 0 ; //keeps total_length clean
|
visual_partitions.back( ) ->length = 0 ; //keeps total_length clean
|
||||||
|
|
||||||
eventbox_extended = manage( new Gtk::EventBox() ) ;
|
eventbox_extended = manage( new Gtk::EventBox( ) ) ;
|
||||||
eventbox_extended ->set_size_request( -1, 60 );
|
eventbox_extended ->set_size_request( -1, 60 );
|
||||||
eventbox_extended ->modify_bg( eventbox_extended ->get_state(), partition .color );
|
eventbox_extended ->modify_bg( eventbox_extended ->get_state( ), partition .color );
|
||||||
hbox_disk ->pack_start( *eventbox_extended, Gtk::PACK_SHRINK ) ;
|
hbox_disk ->pack_start( *eventbox_extended, Gtk::PACK_SHRINK ) ;
|
||||||
|
|
||||||
hbox_extended = manage( new Gtk::HBox() ) ;
|
hbox_extended = manage( new Gtk::HBox( ) ) ;
|
||||||
hbox_extended ->set_border_width( 5 );
|
hbox_extended ->set_border_width( 5 );
|
||||||
hbox_extended ->set_spacing( 5 );
|
hbox_extended ->set_spacing( 5 );
|
||||||
eventbox_extended ->add( *hbox_extended ) ;
|
eventbox_extended ->add( *hbox_extended ) ;
|
||||||
|
|
||||||
for ( unsigned int t=0;t<partition .logicals .size();t++ )
|
for ( unsigned int t = 0 ; t < partition .logicals .size( ) ; t++ )
|
||||||
{
|
{
|
||||||
Create_Visual_Partition( partition .logicals[ t ] ) ;
|
Create_Visual_Partition( partition .logicals[ t ] ) ;
|
||||||
hbox_extended ->pack_start( *( visual_partitions.back() ->drawingarea), Gtk::PACK_SHRINK ) ;
|
hbox_extended ->pack_start( *( visual_partitions .back( ) ->drawingarea ), Gtk::PACK_SHRINK ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
visual_partitions.back() ->length = (int) (SCREEN_WIDTH / (double) ( device_length / (double) ( partition .sector_end - partition .sector_start) ) );
|
visual_partitions .back( ) ->length = (int) (SCREEN_WIDTH / (double) ( device_length / (double) ( partition .sector_end - partition .sector_start) ) );
|
||||||
if ( visual_partitions.back() ->length < 20 )//we need a min. size. Otherwise some small partitions wouldn't be visible
|
if ( visual_partitions .back( ) ->length < 20 )//we need a min. size. Otherwise some small partitions wouldn't be visible
|
||||||
partition .type == GParted::UNALLOCATED ? visual_partitions.back() ->length = 15 : visual_partitions.back() ->length = 20 ;
|
visual_partitions .back( ) ->length = ( partition .type == GParted::UNALLOCATED ) ? 15 : 20 ;
|
||||||
|
|
||||||
if ( partition .inside_extended )
|
if ( partition .inside_extended )
|
||||||
{ visual_partitions.back() ->height = 34 ; visual_partitions.back() ->text_y = 9 ; }
|
{
|
||||||
|
visual_partitions .back( ) ->height = 34 ;
|
||||||
|
visual_partitions .back( ) ->text_y = 9 ;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{ visual_partitions.back() ->height = 44 ;visual_partitions.back() ->text_y = 15 ; }
|
{
|
||||||
|
visual_partitions .back( ) ->height = 44 ;
|
||||||
|
visual_partitions .back( ) ->text_y = 15 ;
|
||||||
|
}
|
||||||
|
|
||||||
if ( partition .type == GParted::UNALLOCATED )
|
if ( partition .type == GParted::UNALLOCATED )
|
||||||
visual_partitions.back() ->used = -1;
|
visual_partitions .back( ) ->used = -1;
|
||||||
else
|
else
|
||||||
visual_partitions.back() ->used = (int) ( (visual_partitions.back() ->length - (BORDER *2)) / (double) ( ( partition .sector_end - partition .sector_start) / (double)partition .sectors_used ) ) ;
|
visual_partitions .back( ) ->used = (int) ( (visual_partitions .back( ) ->length - (BORDER *2)) / (double) ( ( partition .sector_end - partition .sector_start) / (double)partition .sectors_used ) ) ;
|
||||||
|
|
||||||
|
|
||||||
visual_partitions.back() ->color_fs = partition .color;
|
visual_partitions.back( ) ->color_fs = partition .color;
|
||||||
this ->get_colormap() ->alloc_color(visual_partitions.back() ->color_fs);
|
this ->get_colormap( ) ->alloc_color( visual_partitions .back( ) ->color_fs );
|
||||||
|
|
||||||
visual_partitions.back() ->drawingarea = manage( new Gtk::DrawingArea() ) ;
|
visual_partitions .back( ) ->drawingarea = manage( new Gtk::DrawingArea( ) ) ;
|
||||||
visual_partitions.back() ->drawingarea ->set_size_request( visual_partitions.back() ->length +1, 60 );
|
visual_partitions .back( ) ->drawingarea ->set_size_request( visual_partitions .back( ) ->length +1, 60 );
|
||||||
visual_partitions.back() ->drawingarea ->set_events(Gdk::BUTTON_PRESS_MASK);
|
visual_partitions .back( ) ->drawingarea ->set_events( Gdk::BUTTON_PRESS_MASK );
|
||||||
|
|
||||||
//connect signal handlers
|
//connect signal handlers
|
||||||
visual_partitions.back() ->drawingarea ->signal_button_press_event().connect( sigc::bind<Partition>(sigc::mem_fun(*this, &VBox_VisualDisk::on_drawingarea_button_press), partition ) );
|
visual_partitions .back( ) ->drawingarea ->signal_button_press_event( ) .connect( sigc::bind<Partition>(sigc::mem_fun(*this, &VBox_VisualDisk::on_drawingarea_button_press), partition ) );
|
||||||
visual_partitions.back() ->drawingarea ->signal_realize().connect( sigc::bind<Visual_Partition *>(sigc::mem_fun(*this, &VBox_VisualDisk::drawingarea_on_realize), visual_partitions.back() ) );
|
visual_partitions .back( ) ->drawingarea ->signal_realize( ) .connect( sigc::bind<Visual_Partition *>(sigc::mem_fun(*this, &VBox_VisualDisk::drawingarea_on_realize), visual_partitions .back( ) ) );
|
||||||
visual_partitions.back() ->drawingarea ->signal_expose_event().connect( sigc::bind<Visual_Partition *>(sigc::mem_fun(*this, &VBox_VisualDisk::drawingarea_on_expose), visual_partitions.back() ));
|
visual_partitions .back( ) ->drawingarea ->signal_expose_event( ) .connect( sigc::bind<Visual_Partition *>(sigc::mem_fun(*this, &VBox_VisualDisk::drawingarea_on_expose), visual_partitions .back( ) ));
|
||||||
|
|
||||||
//create pangolayout and see if it fits in the visual partition
|
//create pangolayout and see if it fits in the visual partition
|
||||||
str_temp = partition .partition + "\n" + String::ucompose( _("%1 MB"), partition .Get_Length_MB() ) ;
|
str_temp = partition .partition + "\n" + String::ucompose( _("%1 MB"), partition .Get_Length_MB( ) ) ;
|
||||||
visual_partitions.back() ->pango_layout = visual_partitions.back() ->drawingarea ->create_pango_layout ( str_temp ) ;
|
visual_partitions .back( ) ->pango_layout = visual_partitions .back( ) ->drawingarea ->create_pango_layout ( str_temp ) ;
|
||||||
|
|
||||||
visual_partitions.back() ->pango_layout ->get_pixel_size( x, y ) ;
|
visual_partitions .back( ) ->pango_layout ->get_pixel_size( x, y ) ;
|
||||||
if ( visual_partitions.back() ->length - BORDER * 2 -2 < x )
|
if ( visual_partitions .back( ) ->length - BORDER * 2 -2 < x )
|
||||||
visual_partitions.back() ->pango_layout ->set_text( "" ) ;
|
visual_partitions .back( ) ->pango_layout ->set_text( "" ) ;
|
||||||
|
|
||||||
//tooltip
|
//tooltip
|
||||||
str_temp = "" ;
|
str_temp = "" ;
|
||||||
if ( partition .type != GParted::UNALLOCATED )
|
if ( partition .type != GParted::UNALLOCATED )
|
||||||
str_temp = partition .filesystem + "\n" ;
|
str_temp = partition .filesystem + "\n" ;
|
||||||
|
|
||||||
str_temp += partition .partition + "\n" + String::ucompose( _("%1 MB"), partition .Get_Length_MB() ) ;
|
str_temp += partition .partition + "\n" + String::ucompose( _("%1 MB"), partition .Get_Length_MB( ) ) ;
|
||||||
tooltips.set_tip( *(visual_partitions.back() ->drawingarea), str_temp ) ;
|
tooltips .set_tip( *( visual_partitions.back( ) ->drawingarea ), str_temp ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VBox_VisualDisk::Prepare_Legend( std::vector<Glib::ustring> & legend, const std::vector<Partition> & partitions )
|
void VBox_VisualDisk::Prepare_Legend( std::vector<Glib::ustring> & legend, const std::vector<Partition> & partitions )
|
||||||
|
@ -256,9 +262,9 @@ void VBox_VisualDisk::Set_Selected( const Partition & partition )
|
||||||
|
|
||||||
void VBox_VisualDisk::drawingarea_on_realize( Visual_Partition* vp )
|
void VBox_VisualDisk::drawingarea_on_realize( Visual_Partition* vp )
|
||||||
{
|
{
|
||||||
vp ->gc = Gdk::GC::create( vp ->drawingarea ->get_window() );
|
vp ->gc = Gdk::GC::create( vp ->drawingarea ->get_window( ) );
|
||||||
|
|
||||||
vp ->drawingarea ->get_window() ->set_background( vp ->color_fs );
|
vp ->drawingarea ->get_window( ) ->set_background( vp ->color_fs );
|
||||||
//eventmasks necessary for tooltips
|
//eventmasks necessary for tooltips
|
||||||
vp ->drawingarea ->add_events( Gdk::ENTER_NOTIFY_MASK );
|
vp ->drawingarea ->add_events( Gdk::ENTER_NOTIFY_MASK );
|
||||||
vp ->drawingarea ->add_events( Gdk::LEAVE_NOTIFY_MASK );
|
vp ->drawingarea ->add_events( Gdk::LEAVE_NOTIFY_MASK );
|
||||||
|
@ -267,25 +273,25 @@ void VBox_VisualDisk::drawingarea_on_realize( Visual_Partition* vp )
|
||||||
|
|
||||||
bool VBox_VisualDisk::drawingarea_on_expose( GdkEventExpose * ev, Visual_Partition* vp )
|
bool VBox_VisualDisk::drawingarea_on_expose( GdkEventExpose * ev, Visual_Partition* vp )
|
||||||
{
|
{
|
||||||
vp ->drawingarea ->get_window() ->clear() ;
|
vp ->drawingarea ->get_window( ) ->clear( ) ;
|
||||||
|
|
||||||
if ( vp ->used != -1 ) //if not unknown or unallocated
|
if ( vp ->used != -1 ) //if not unknown or unallocated
|
||||||
{
|
{
|
||||||
vp ->gc ->set_foreground( color_used );
|
vp ->gc ->set_foreground( color_used );
|
||||||
vp ->drawingarea ->get_window() ->draw_rectangle( vp ->gc, true, BORDER,BORDER, vp ->used, vp ->height );
|
vp ->drawingarea ->get_window( ) ->draw_rectangle( vp ->gc, true, BORDER, BORDER, vp ->used, vp ->height );
|
||||||
|
|
||||||
vp ->gc ->set_foreground( color_unused );
|
vp ->gc ->set_foreground( color_unused );
|
||||||
vp ->drawingarea ->get_window() ->draw_rectangle( vp ->gc, true, BORDER + vp ->used, BORDER, vp ->length - vp ->used - BORDER *2 , vp ->height );
|
vp ->drawingarea ->get_window( ) ->draw_rectangle( vp ->gc, true, BORDER + vp ->used, BORDER, vp ->length - vp ->used - BORDER *2 , vp ->height );
|
||||||
}
|
}
|
||||||
|
|
||||||
vp ->gc ->set_foreground( color_text );
|
vp ->gc ->set_foreground( color_text );
|
||||||
vp ->drawingarea ->get_window() ->draw_layout( vp ->gc, BORDER +2, vp ->text_y, vp ->pango_layout ) ;
|
vp ->drawingarea ->get_window( ) ->draw_layout( vp ->gc, BORDER +2, vp ->text_y, vp ->pango_layout ) ;
|
||||||
|
|
||||||
//if partition is selected one..
|
//if partition is selected one..
|
||||||
if ( vp ->index == selected_partition )
|
if ( vp ->index == selected_partition )
|
||||||
{
|
{
|
||||||
vp ->gc ->set_foreground( color_used );
|
vp ->gc ->set_foreground( color_used );
|
||||||
vp ->drawingarea ->get_window() ->draw_rectangle( vp ->gc, false, 4,4,vp ->length-8, vp ->height +8 );
|
vp ->drawingarea ->get_window( ) ->draw_rectangle( vp ->gc, false, 4, 4, vp ->length -8, vp ->height +8 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -293,24 +299,24 @@ bool VBox_VisualDisk::drawingarea_on_expose( GdkEventExpose * ev, Visual_Partiti
|
||||||
|
|
||||||
bool VBox_VisualDisk::on_drawingarea_button_press( GdkEventButton *event, const Partition & partition )
|
bool VBox_VisualDisk::on_drawingarea_button_press( GdkEventButton *event, const Partition & partition )
|
||||||
{
|
{
|
||||||
signal_mouse_click.emit( event, partition );
|
signal_mouse_click .emit( event, partition );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
VBox_VisualDisk::~VBox_VisualDisk()
|
VBox_VisualDisk::~VBox_VisualDisk( )
|
||||||
{
|
{
|
||||||
for ( unsigned int t=0;t< visual_partitions.size() ; t++ )
|
for ( unsigned int t = 0 ; t < visual_partitions .size( ) ; t++ )
|
||||||
{
|
{
|
||||||
this ->get_colormap() ->free_colors( visual_partitions[t] ->color_fs, 1 ) ;
|
this ->get_colormap( ) ->free_colors( visual_partitions[ t ] ->color_fs, 1 ) ;
|
||||||
delete visual_partitions[t] ;
|
delete visual_partitions[ t ] ;
|
||||||
}
|
}
|
||||||
|
|
||||||
visual_partitions.clear() ;
|
visual_partitions .clear( ) ;
|
||||||
|
|
||||||
//free the allocated colors
|
//free the allocated colors
|
||||||
this ->get_colormap() ->free_colors( color_used, 1 ) ;
|
this ->get_colormap( ) ->free_colors( color_used, 1 ) ;
|
||||||
this ->get_colormap() ->free_colors( color_unused, 1 ) ;
|
this ->get_colormap( ) ->free_colors( color_unused, 1 ) ;
|
||||||
this ->get_colormap() ->free_colors( color_text, 1 ) ;
|
this ->get_colormap( ) ->free_colors( color_text, 1 ) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -585,7 +585,7 @@ 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" && copied_partition .Get_Length_MB( ) < selected_partition .Get_Length_MB( ) )
|
||||||
allow_paste( true ) ;
|
allow_paste( true ) ;
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
|
@ -611,7 +611,9 @@ 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 )
|
if ( selected_partition .status != GParted::STAT_NEW &&
|
||||||
|
selected_partition .status != GParted::STAT_COPY &&
|
||||||
|
Get_FS( selected_partition .filesystem, gparted_core .get_fs( ) ) .copy )
|
||||||
allow_copy( true ) ;
|
allow_copy( true ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,13 +835,13 @@ void Win_GParted::activate_resize()
|
||||||
|
|
||||||
std::vector <Partition> partitions = devices[ current_device ] .device_partitions ;
|
std::vector <Partition> partitions = devices[ current_device ] .device_partitions ;
|
||||||
|
|
||||||
if ( operations.size() )
|
if ( operations .size( ) )
|
||||||
for (unsigned int t=0;t<operations.size();t++ )
|
for (unsigned int t = 0 ; t < operations .size( ) ; t++ )
|
||||||
if ( operations[t]. device_path == devices[ current_device ] .path )
|
if ( operations[ t ] .device_path == devices[ current_device ] .path )
|
||||||
operations[ t ] .Apply_Operation_To_Visual( partitions ) ;
|
operations[ t ] .Apply_Operation_To_Visual( partitions ) ;
|
||||||
|
|
||||||
|
|
||||||
Dialog_Partition_Resize_Move dialog( gparted_core .get_fs( ) ) ;
|
Dialog_Partition_Resize_Move dialog( gparted_core .get_fs( ), devices[ current_device ] .length / devices[ current_device ] .cylinders ) ;
|
||||||
|
|
||||||
if ( selected_partition .type == GParted::LOGICAL )
|
if ( selected_partition .type == GParted::LOGICAL )
|
||||||
{
|
{
|
||||||
|
|
101
src/ext2.cc
101
src/ext2.cc
|
@ -26,79 +26,67 @@ FS ext2::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "ext2" ;
|
fs .filesystem = "ext2" ;
|
||||||
|
if ( ! system( "which dumpe2fs 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .read = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which mkfs.ext2 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which e2fsck 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .check = true ;
|
||||||
|
|
||||||
|
//resizing is a delicate process which requires 3 commands..
|
||||||
|
if ( ! system( "which resize2fs 1>/dev/null 2>/dev/null" ) && fs .read && fs .check )
|
||||||
fs .resize = true ;
|
fs .resize = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .copy = true ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext2::Create( const Glib::ustring device_path, const Partition & new_partition )
|
void ext2::Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
char c_buf[ 512 ] ;
|
||||||
|
FILE *f ;
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
Glib::ustring output ;
|
||||||
|
Sector free_blocks = -1, blocksize = -1 ;
|
||||||
|
|
||||||
|
//get free blocks..
|
||||||
|
f = popen( ( "dumpe2fs -h " + partition .partition ) .c_str( ), "r" ) ;
|
||||||
|
while ( fgets( c_buf, 512, f ) )
|
||||||
{
|
{
|
||||||
PedPartition *c_part = NULL ;
|
output = Glib::locale_to_utf8( c_buf ) ;
|
||||||
PedFileSystemType *fs_type = NULL ;
|
|
||||||
PedFileSystem *fs = NULL ;
|
|
||||||
|
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (new_partition .sector_end + new_partition .sector_start) / 2 ) ;
|
//free blocks
|
||||||
if ( c_part )
|
if ( output .find( "Free blocks" ) < output .length( ) )
|
||||||
{
|
free_blocks = atoi( (output .substr( output .find( ":" ) +1, output .length( ) ) ) .c_str( ) ) ;
|
||||||
fs_type = ped_file_system_type_get( "ext2" ) ;
|
|
||||||
if ( fs_type )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_create( & c_part ->geom, fs_type, NULL );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
if ( ped_partition_set_system( c_part, fs_type ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_file_system_close( fs );
|
//blocksize
|
||||||
}
|
if ( output .find( "Block size:" ) < output .length( ) )
|
||||||
}
|
blocksize = atoi( (output .substr( output .find( ":" ) +1, output .length( ) ) ) .c_str( ) ) ;
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk ) ;
|
|
||||||
}
|
}
|
||||||
|
pclose( f ) ;
|
||||||
|
|
||||||
return return_value ;
|
if ( free_blocks > -1 && blocksize > -1 )
|
||||||
|
partition .Set_Unused( free_blocks * blocksize / 512 ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext2::Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new )
|
bool ext2::Create( const Glib::ustring device_path, const Partition & new_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
return Execute_Command( "mkfs.ext2 " + new_partition .partition ) ;
|
||||||
|
}
|
||||||
|
|
||||||
PedPartition *c_part = NULL ;
|
bool ext2::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
PedFileSystem *fs = NULL ;
|
{
|
||||||
PedConstraint *constraint = NULL ;
|
Glib::ustring str_temp = "resize2fs " + partition_new .partition ;
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
if ( ! fill_partition )
|
||||||
{
|
str_temp += " " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size ) + "M" ;
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
|
||||||
if ( c_part )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_open ( & c_part->geom );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs );
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
|
||||||
ped_file_system_resize ( fs, & c_part->geom, NULL ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
return Execute_Command( str_temp ) ;
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close ( fs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext2::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool ext2::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
@ -106,9 +94,14 @@ bool ext2::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest
|
||||||
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ext2::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return Execute_Command( "e2fsck -fy " + partition .partition ) ;
|
||||||
|
}
|
||||||
|
|
||||||
int ext2::get_estimated_time( long MB_to_Consider )
|
int ext2::get_estimated_time( long MB_to_Consider )
|
||||||
{
|
{
|
||||||
return 1 + MB_to_Consider / 500 ;
|
return -1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
107
src/ext3.cc
107
src/ext3.cc
|
@ -26,89 +26,67 @@ FS ext3::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "ext3" ;
|
fs .filesystem = "ext3" ;
|
||||||
|
if ( ! system( "which dumpe2fs 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .read = true ;
|
||||||
|
|
||||||
if ( ! system( "which tune2fs 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which mkfs.ext3 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which e2fsck 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .check = true ;
|
||||||
|
|
||||||
|
//resizing is a delicate process which requires 3 commands..
|
||||||
|
if ( ! system( "which resize2fs 1>/dev/null 2>/dev/null" ) && fs .read && fs .check )
|
||||||
fs .resize = true ;
|
fs .resize = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .copy = true ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext3::Create( const Glib::ustring device_path, const Partition & new_partition )
|
void ext3::Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
char c_buf[ 512 ] ;
|
||||||
|
FILE *f ;
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
Glib::ustring output ;
|
||||||
{
|
Sector free_blocks = -1, blocksize = -1 ;
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
PedFileSystemType *fs_type = NULL ;
|
|
||||||
PedFileSystem *fs = NULL ;
|
|
||||||
|
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (new_partition .sector_end + new_partition .sector_start) / 2 ) ;
|
//get free blocks..
|
||||||
if ( c_part )
|
f = popen( ( "dumpe2fs -h " + partition .partition ) .c_str( ), "r" ) ;
|
||||||
|
while ( fgets( c_buf, 512, f ) )
|
||||||
{
|
{
|
||||||
fs_type = ped_file_system_type_get( "ext2" ) ;
|
output = Glib::locale_to_utf8( c_buf ) ;
|
||||||
if ( fs_type )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_create( & c_part ->geom, fs_type, NULL );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
if ( ped_partition_set_system(c_part, fs_type ) )
|
|
||||||
{
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
sleep( 1 ) ;
|
//free blocks
|
||||||
//system( ("tune2fs -j " + new_partition .partition) .c_str( ) ) ;
|
if ( output .find( "Free blocks" ) < output .length( ) )
|
||||||
Execute_Command( "tune2fs -j " + new_partition .partition ) ;
|
free_blocks = atoi( (output .substr( output .find( ":" ) +1, output .length( ) ) ) .c_str( ) ) ;
|
||||||
|
|
||||||
|
//blocksize
|
||||||
|
if ( output .find( "Block size:" ) < output .length( ) )
|
||||||
|
blocksize = atoi( (output .substr( output .find( ":" ) +1, output .length( ) ) ) .c_str( ) ) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
pclose( f ) ;
|
||||||
|
|
||||||
ped_file_system_close( fs );
|
if ( free_blocks > -1 && blocksize > -1 )
|
||||||
}
|
partition .Set_Unused( free_blocks * blocksize / 512 ) ;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext3::Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new )
|
bool ext3::Create( const Glib::ustring device_path, const Partition & new_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
return Execute_Command( "mkfs.ext3 " + new_partition .partition ) ;
|
||||||
|
}
|
||||||
|
|
||||||
PedPartition *c_part = NULL ;
|
bool ext3::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
PedFileSystem *fs = NULL ;
|
{
|
||||||
PedConstraint *constraint = NULL ;
|
Glib::ustring str_temp = "resize2fs " + partition_new .partition ;
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
if ( ! fill_partition )
|
||||||
{
|
str_temp += " " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size ) + "M" ;
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
|
||||||
if ( c_part )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_open ( & c_part->geom );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs );
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
|
||||||
ped_file_system_resize ( fs, & c_part->geom, NULL ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
return Execute_Command( str_temp ) ;
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close ( fs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext3::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool ext3::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
@ -116,9 +94,14 @@ bool ext3::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest
|
||||||
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ext3::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return Execute_Command( "e2fsck -fy " + partition .partition ) ;
|
||||||
|
}
|
||||||
|
|
||||||
int ext3::get_estimated_time( long MB_to_Consider )
|
int ext3::get_estimated_time( long MB_to_Consider )
|
||||||
{
|
{
|
||||||
return 1 + MB_to_Consider / 400 ;
|
return -1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} //GParted
|
} //GParted
|
||||||
|
|
76
src/fat16.cc
76
src/fat16.cc
|
@ -26,13 +26,46 @@ FS fat16::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "fat16" ;
|
fs .filesystem = "fat16" ;
|
||||||
|
fs .read = true ; //provided by libparted
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
fs .resize = true ;
|
fs .resize = true ;
|
||||||
fs .move = true ;
|
fs .move = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .copy = true ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fat16::Set_Used_Sectors( Partition & partition )
|
||||||
|
{
|
||||||
|
PedFileSystem *fs = NULL;
|
||||||
|
PedConstraint *constraint = NULL;
|
||||||
|
PedPartition *c_part = NULL ;
|
||||||
|
|
||||||
|
if ( disk )
|
||||||
|
{
|
||||||
|
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
||||||
|
if ( c_part )
|
||||||
|
{
|
||||||
|
fs = ped_file_system_open( & c_part ->geom );
|
||||||
|
|
||||||
|
if ( fs )
|
||||||
|
{
|
||||||
|
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
||||||
|
if ( constraint )
|
||||||
|
{
|
||||||
|
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
|
}
|
||||||
|
|
||||||
|
ped_file_system_close( fs ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool fat16::Create( const Glib::ustring device_path, const Partition & new_partition )
|
bool fat16::Create( const Glib::ustring device_path, const Partition & new_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
bool return_value = false ;
|
||||||
|
@ -66,40 +99,10 @@ bool fat16::Create( const Glib::ustring device_path, const Partition & new_parti
|
||||||
return return_value ;
|
return return_value ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat16::Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new )
|
bool fat16::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
//handled in GParted_Core::Resize_Normal_Using_Libparted
|
||||||
|
return false ;
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
PedFileSystem *fs = NULL ;
|
|
||||||
PedConstraint *constraint = NULL ;
|
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
|
||||||
{
|
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
|
||||||
if ( c_part )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_open ( & c_part->geom );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs );
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
|
||||||
ped_file_system_resize ( fs, & c_part->geom, NULL ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close ( fs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat16::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool fat16::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
@ -107,9 +110,14 @@ bool fat16::Copy( const Glib::ustring & src_part_path, const Glib::ustring & des
|
||||||
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fat16::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
int fat16::get_estimated_time( long MB_to_Consider )
|
int fat16::get_estimated_time( long MB_to_Consider )
|
||||||
{
|
{
|
||||||
return 1 ;
|
return -1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
} //GParted
|
} //GParted
|
||||||
|
|
76
src/fat32.cc
76
src/fat32.cc
|
@ -26,6 +26,7 @@ FS fat32::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "fat32" ;
|
fs .filesystem = "fat32" ;
|
||||||
|
fs .read = true ; //provided by libparted
|
||||||
|
|
||||||
//find out if we can create fat32 filesystems
|
//find out if we can create fat32 filesystems
|
||||||
if ( ! system( "which mkdosfs 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which mkdosfs 1>/dev/null 2>/dev/null" ) )
|
||||||
|
@ -35,48 +36,50 @@ FS fat32::get_filesystem_support( )
|
||||||
fs .resize = true ;
|
fs .resize = true ;
|
||||||
fs .move = true ;
|
fs .move = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .copy = true ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fat32::Set_Used_Sectors( Partition & partition )
|
||||||
|
{
|
||||||
|
PedFileSystem *fs = NULL;
|
||||||
|
PedConstraint *constraint = NULL;
|
||||||
|
PedPartition *c_part = NULL ;
|
||||||
|
|
||||||
|
if ( disk )
|
||||||
|
{
|
||||||
|
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
||||||
|
if ( c_part )
|
||||||
|
{
|
||||||
|
fs = ped_file_system_open( & c_part ->geom );
|
||||||
|
|
||||||
|
if ( fs )
|
||||||
|
{
|
||||||
|
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
||||||
|
if ( constraint )
|
||||||
|
{
|
||||||
|
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
|
}
|
||||||
|
|
||||||
|
ped_file_system_close( fs ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool fat32::Create( const Glib::ustring device_path, const Partition & new_partition )
|
bool fat32::Create( const Glib::ustring device_path, const Partition & new_partition )
|
||||||
{
|
{
|
||||||
return Execute_Command( "mkdosfs -F32 " + new_partition .partition ) ;
|
return Execute_Command( "mkdosfs -F32 " + new_partition .partition ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat32::Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new )
|
bool fat32::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
//handled in GParted_Core::Resize_Normal_Using_Libparted
|
||||||
|
return false ;
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
PedFileSystem *fs = NULL ;
|
|
||||||
PedConstraint *constraint = NULL ;
|
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
|
||||||
{
|
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
|
||||||
if ( c_part )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_open ( & c_part->geom );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs );
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
|
||||||
ped_file_system_resize ( fs, & c_part->geom, NULL ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close ( fs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat32::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool fat32::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
@ -84,9 +87,14 @@ bool fat32::Copy( const Glib::ustring & src_part_path, const Glib::ustring & des
|
||||||
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool fat32::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
int fat32::get_estimated_time( long MB_to_Consider )
|
int fat32::get_estimated_time( long MB_to_Consider )
|
||||||
{
|
{
|
||||||
return 1 + MB_to_Consider / 5000 ;
|
return -1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,13 +26,21 @@ FS linux_swap::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "linux-swap" ;
|
fs .filesystem = "linux-swap" ;
|
||||||
|
fs .read = false ; //used/unused isn't relevant for swapspace
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
fs .resize = true ;
|
fs .resize = true ;
|
||||||
fs .move = true ;
|
fs .move = true ;
|
||||||
|
|
||||||
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .copy = true ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void linux_swap::Set_Used_Sectors( Partition & partition )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
bool linux_swap::Create( const Glib::ustring device_path, const Partition & new_partition )
|
bool linux_swap::Create( const Glib::ustring device_path, const Partition & new_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
bool return_value = false ;
|
||||||
|
@ -66,40 +74,10 @@ bool linux_swap::Create( const Glib::ustring device_path, const Partition & new_
|
||||||
return return_value ;
|
return return_value ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool linux_swap::Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new )
|
bool linux_swap::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
//handled in GParted_Core::Resize_Normal_Using_Libparted
|
||||||
|
return false ;
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
PedFileSystem *fs = NULL ;
|
|
||||||
PedConstraint *constraint = NULL ;
|
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
|
||||||
{
|
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
|
||||||
if ( c_part )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_open ( & c_part->geom );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs );
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
|
||||||
ped_file_system_resize ( fs, & c_part->geom, NULL ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close ( fs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool linux_swap::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool linux_swap::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
@ -107,6 +85,11 @@ bool linux_swap::Copy( const Glib::ustring & src_part_path, const Glib::ustring
|
||||||
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool linux_swap::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
int linux_swap::get_estimated_time( long MB_to_Consider )
|
int linux_swap::get_estimated_time( long MB_to_Consider )
|
||||||
{
|
{
|
||||||
return 1 + MB_to_Consider / 5000 ;
|
return 1 + MB_to_Consider / 5000 ;
|
||||||
|
|
|
@ -30,6 +30,7 @@ FS reiserfs::get_filesystem_support( )
|
||||||
static void * test_handle = NULL ;
|
static void * test_handle = NULL ;
|
||||||
if ( (test_handle = dlopen("libreiserfs.so", RTLD_NOW)) )
|
if ( (test_handle = dlopen("libreiserfs.so", RTLD_NOW)) )
|
||||||
{
|
{
|
||||||
|
fs .read = true ;
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
fs .resize = true ;
|
fs .resize = true ;
|
||||||
|
|
||||||
|
@ -37,9 +38,41 @@ FS reiserfs::get_filesystem_support( )
|
||||||
test_handle = NULL ;
|
test_handle = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
|
fs .copy = true ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void reiserfs::Set_Used_Sectors( Partition & partition )
|
||||||
|
{
|
||||||
|
PedFileSystem *fs = NULL;
|
||||||
|
PedConstraint *constraint = NULL;
|
||||||
|
PedPartition *c_part = NULL ;
|
||||||
|
|
||||||
|
if ( disk )
|
||||||
|
{
|
||||||
|
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
||||||
|
if ( c_part )
|
||||||
|
{
|
||||||
|
fs = ped_file_system_open( & c_part ->geom );
|
||||||
|
|
||||||
|
if ( fs )
|
||||||
|
{
|
||||||
|
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
||||||
|
if ( constraint )
|
||||||
|
{
|
||||||
|
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
|
}
|
||||||
|
|
||||||
|
ped_file_system_close( fs ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool reiserfs::Create( const Glib::ustring device_path, const Partition & new_partition )
|
bool reiserfs::Create( const Glib::ustring device_path, const Partition & new_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
bool return_value = false ;
|
||||||
|
@ -73,40 +106,9 @@ bool reiserfs::Create( const Glib::ustring device_path, const Partition & new_pa
|
||||||
return return_value ;
|
return return_value ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool reiserfs::Resize( const Glib::ustring device_path, const Partition & partition_old, const Partition & partition_new )
|
bool reiserfs::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
bool return_value = false ;
|
return false ;
|
||||||
|
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
PedFileSystem *fs = NULL ;
|
|
||||||
PedConstraint *constraint = NULL ;
|
|
||||||
|
|
||||||
if ( open_device_and_disk( device_path, device, disk ) )
|
|
||||||
{
|
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition_old .sector_end + partition_old .sector_start) / 2 ) ;
|
|
||||||
if ( c_part )
|
|
||||||
{
|
|
||||||
fs = ped_file_system_open ( & c_part->geom );
|
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs );
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
if ( ped_disk_set_partition_geom ( disk, c_part, constraint, partition_new .sector_start, partition_new .sector_end ) &&
|
|
||||||
ped_file_system_resize ( fs, & c_part->geom, NULL ) )
|
|
||||||
return_value = Commit( disk ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close ( fs );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close_device_and_disk( device, disk ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool reiserfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool reiserfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
@ -114,6 +116,11 @@ bool reiserfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring &
|
||||||
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool reiserfs::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
int reiserfs::get_estimated_time( long MB_to_Consider )
|
int reiserfs::get_estimated_time( long MB_to_Consider )
|
||||||
{
|
{
|
||||||
return 1 + MB_to_Consider / 1000 ;
|
return 1 + MB_to_Consider / 1000 ;
|
||||||
|
|
Loading…
Reference in New Issue