changed the way devices and partitions store their devicepaths. Instead of

* changed the way devices and partitions store their devicepaths.
  Instead of holding a 'realpath' and a symbolic path we store paths
  in a list. This allows for improved detection of mountpoins, free
  space, etc..

  Also fixed a nasty bug which showed up when you copy a partition
  from one device to another. (thanks to mario for the report)
This commit is contained in:
Bart Hakvoort 2006-03-14 21:37:47 +00:00
parent 7fdcec2b1d
commit 6d8b169e73
26 changed files with 408 additions and 246 deletions

View File

@ -1,3 +1,13 @@
2006-03-14 Bart Hakvoort <hakvoort@cvs.gnome.org>
* changed the way devices and partitions store their devicepaths.
Instead of holding a 'realpath' and a symbolic path we store paths
in a list. This allows for improved detection of mountpoins, free
space, etc..
Also fixed a nasty bug which showed up when you copy a partition
from one device to another. (thanks to mario for the report)
2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org> 2006-03-09 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/Makefile.am, * include/Makefile.am,

View File

@ -29,9 +29,13 @@ class Device
public: public:
Device() ; Device() ;
~Device() ; ~Device() ;
void add_path( const Glib::ustring & path, bool clear_paths = false ) ;
void add_paths( const std::vector<Glib::ustring> & paths, bool clear_paths = false ) ;
Glib::ustring get_path() ;
std::vector<Glib::ustring> get_paths() ;
void Reset() ; void Reset() ;
std::vector<Partition> partitions ; std::vector<Partition> partitions ;
Sector length; Sector length;
long heads ; long heads ;
@ -39,16 +43,18 @@ public:
long cylinders ; long cylinders ;
Sector cylsize ; Sector cylsize ;
Glib::ustring model; Glib::ustring model;
Glib::ustring path;
Glib::ustring realpath;
Glib::ustring disktype; Glib::ustring disktype;
int max_prims ; int max_prims ;
int highest_busy ; int highest_busy ;
bool readonly ; bool readonly ;
private: private:
void sort_paths_and_remove_duplicates() ;
static bool compare_paths( const Glib::ustring & A, const Glib::ustring & B ) ;
std::vector<Glib::ustring> paths ;
}; };
} //GParted } //GParted

View File

@ -77,14 +77,13 @@ private:
std::map< Glib::ustring, std::vector<Glib::ustring> > & map ) ; std::map< Glib::ustring, std::vector<Glib::ustring> > & map ) ;
void init_maps() ; void init_maps() ;
void set_mountpoints( std::vector<Partition> & partitions ) ; void set_mountpoints( std::vector<Partition> & partitions ) ;
void set_short_paths( std::vector<Partition> & partitions ) ;
void set_used_sectors( std::vector<Partition> & partitions ) ; void set_used_sectors( std::vector<Partition> & partitions ) ;
void insert_unallocated( const Glib::ustring & device_path, void insert_unallocated( const Glib::ustring & device_path,
std::vector<Partition> & partitions, std::vector<Partition> & partitions,
Sector start, Sector start,
Sector end, Sector end,
bool inside_extended ) ; bool inside_extended ) ;
Glib::ustring get_short_path( const Glib::ustring & real_path ) ; std::vector<Glib::ustring> get_alternate_paths( const Glib::ustring & path ) ;
void LP_Set_Used_Sectors( Partition & partition ); void LP_Set_Used_Sectors( Partition & partition );
void set_flags( Partition & partition ) ; void set_flags( Partition & partition ) ;
int create_empty_partition( Partition & new_partition, int create_empty_partition( Partition & new_partition,
@ -122,7 +121,7 @@ private:
std::map< Glib::ustring, std::vector<Glib::ustring> > mount_info ; std::map< Glib::ustring, std::vector<Glib::ustring> > mount_info ;
std::map< Glib::ustring, std::vector<Glib::ustring> > fstab_info ; std::map< Glib::ustring, std::vector<Glib::ustring> > fstab_info ;
std::map< Glib::ustring, Glib::ustring > short_paths ; std::map< Glib::ustring, Glib::ustring > alternate_paths ;
std::map< Glib::ustring, Glib::ustring >::iterator iter ; std::map< Glib::ustring, Glib::ustring >::iterator iter ;
std::map< Glib::ustring, std::vector<Glib::ustring> >::iterator iter_mp ; std::map< Glib::ustring, std::vector<Glib::ustring> >::iterator iter_mp ;

View File

@ -47,6 +47,7 @@ class Partition
{ {
public: public:
Partition() ; Partition() ;
Partition( const Glib::ustring & path ) ;
~Partition() ; ~Partition() ;
void Reset() ; void Reset() ;
@ -64,18 +65,23 @@ public:
void Set_Unused( Sector sectors_unused ) ; void Set_Unused( Sector sectors_unused ) ;
void Set_Unallocated( const Glib::ustring & device_path, Sector sector_start, Sector sector_end, bool inside_extended ); void Set_Unallocated( const Glib::ustring & device_path,
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 );
Sector get_length() const ; void add_path( const Glib::ustring & path, bool clear_paths = false ) ;
void add_paths( const std::vector<Glib::ustring> & paths, bool clear_paths = false ) ;
Sector get_length() const ;
Glib::ustring get_path() const ;
std::vector<Glib::ustring> get_paths() const ;
bool operator==( const Partition & partition ) const ; bool operator==( const Partition & partition ) const ;
//some public members //some public members
Glib::ustring partition;//the symbolic path (e.g. /dev/hda1 )
Glib::ustring realpath ;
Glib::ustring device_path ; Glib::ustring device_path ;
int partition_number; int partition_number;
PartitionType type;// UNALLOCATED, PRIMARY, LOGICAL, etc... PartitionType type;// UNALLOCATED, PRIMARY, LOGICAL, etc...
@ -90,15 +96,19 @@ public:
bool busy; bool busy;
Glib::ustring error; Glib::ustring error;
std::vector<Glib::ustring> flags ; std::vector<Glib::ustring> flags ;
std::vector<Glib::ustring> mountpoints ; std::vector<Glib::ustring> mountpoints ;//FIXME: it's better to make this one private as well to prevent segfaults
//when callong mountpoints .front() on an empty list.
std::vector<Partition> logicals ; std::vector<Partition> logicals ;
bool strict ; bool strict ;
private: private:
void sort_paths_and_remove_duplicates() ;
static bool compare_paths( const Glib::ustring & A, const Glib::ustring & B ) ;
std::vector<Glib::ustring> paths ;
}; };
}//GParted }//GParted

View File

@ -27,13 +27,62 @@ Device::Device()
void Device::Reset() void Device::Reset()
{ {
paths .clear() ;
partitions .clear() ; partitions .clear() ;
length = cylsize = 0 ; length = cylsize = 0 ;
heads = sectors = cylinders = 0 ; heads = sectors = cylinders = 0 ;
model = path = realpath = disktype = "" ; model = disktype = "" ;
max_prims = highest_busy = 0 ; max_prims = highest_busy = 0 ;
readonly = false ; readonly = false ;
} }
void Device::add_path( const Glib::ustring & path, bool clear_paths )
{
if ( clear_paths )
paths .clear() ;
paths .push_back( path ) ;
sort_paths_and_remove_duplicates() ;
}
void Device::add_paths( const std::vector<Glib::ustring> & paths, bool clear_paths )
{
if ( clear_paths )
this ->paths .clear() ;
this ->paths .insert( this ->paths .end(), paths .begin(), paths .end() ) ;
sort_paths_and_remove_duplicates() ;
}
Glib::ustring Device::get_path()
{
if ( paths .size() > 0 )
return paths .front() ;
return "" ;
}
std::vector<Glib::ustring> Device::get_paths()
{
return paths ;
}
void Device::sort_paths_and_remove_duplicates()
{
//remove duplicates
std::sort( paths .begin(), paths .end() ) ;
paths .erase( std::unique( paths .begin(), paths .end() ), paths .end() ) ;
//sort on length
std::sort( paths .begin(), paths .end(), compare_paths ) ;
}
bool Device::compare_paths( const Glib::ustring & A, const Glib::ustring & B )
{
return A .length() < B .length() ;
}
Device::~Device() Device::~Device()
{ {

View File

@ -32,7 +32,7 @@ Dialog_Partition_Copy::Dialog_Partition_Copy( const FS & fs, Sector cylinder_siz
void Dialog_Partition_Copy::Set_Data( const Partition & selected_partition, const Partition & copied_partition ) void Dialog_Partition_Copy::Set_Data( const Partition & selected_partition, const Partition & copied_partition )
{ {
this ->set_title( String::ucompose( _("Paste %1"), copied_partition .partition ) ) ; this ->set_title( String::ucompose( _("Paste %1"), copied_partition .get_path() ) ) ;
//set partition color //set partition color
frame_resizer_base ->set_rgb_partition_color( copied_partition .color ) ; frame_resizer_base ->set_rgb_partition_color( copied_partition .color ) ;
@ -86,6 +86,7 @@ void Dialog_Partition_Copy::Set_Data( const Partition & selected_partition, cons
//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 ;
this ->selected_partition .device_path = selected_partition .device_path ;
this ->selected_partition .inside_extended = selected_partition .inside_extended ; this ->selected_partition .inside_extended = selected_partition .inside_extended ;
this ->selected_partition .type = this ->selected_partition .type =
selected_partition .inside_extended ? GParted::TYPE_LOGICAL : GParted::TYPE_PRIMARY ; selected_partition .inside_extended ? GParted::TYPE_LOGICAL : GParted::TYPE_PRIMARY ;

View File

@ -28,7 +28,7 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
this ->set_has_separator( false ) ; this ->set_has_separator( 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 .get_path() ) );
init_drawingarea( ) ; init_drawingarea( ) ;
@ -102,6 +102,7 @@ void Dialog_Partition_Info::init_drawingarea( )
//calculate proportional width of used and unused //calculate proportional width of used and unused
used = unused = 0 ; used = unused = 0 ;
//FIXME: use Partition::get_length()..
used = Utils::Round( (400 - BORDER *2) / ( static_cast<double>(partition .sector_end - partition .sector_start) / partition .sectors_used ) ) ; used = Utils::Round( (400 - BORDER *2) / ( static_cast<double>(partition .sector_end - partition .sector_start) / partition .sectors_used ) ) ;
unused = 400 - used - BORDER *2 ; unused = 400 - used - BORDER *2 ;
@ -120,7 +121,7 @@ void Dialog_Partition_Info::init_drawingarea( )
//set text of pangolayout //set text of pangolayout
pango_layout = drawingarea .create_pango_layout( pango_layout = drawingarea .create_pango_layout(
partition .partition + "\n" + Utils::format_size( partition .get_length() ) ) ; partition .get_path() + "\n" + Utils::format_size( partition .get_length() ) ) ;
} }
void Dialog_Partition_Info::Display_Info( ) void Dialog_Partition_Info::Display_Info( )
@ -173,19 +174,21 @@ void Dialog_Partition_Info::Display_Info( )
if ( partition .type != GParted::TYPE_UNALLOCATED && partition .status != GParted::STAT_NEW ) if ( partition .type != GParted::TYPE_UNALLOCATED && partition .status != GParted::STAT_NEW )
{ {
//path //path
table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Path:" ) + "</b>" ), 0, 1, top, bottom, Gtk::FILL ) ; table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Path:" ) + "</b>" ),
table ->attach( * Utils::mk_label( partition .partition ), 1, 2, top++, bottom++, Gtk::FILL ) ; 0, 1,
top, bottom,
//only show realpath if it's diffent from the short path... Gtk::FILL ) ;
if ( partition .partition != partition .realpath ) table ->attach( * Utils::mk_label( Glib::build_path( "\n", partition .get_paths() ) ),
{ 1, 2,
table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Real Path:" ) + "</b>" ), 0, 1, top, bottom, Gtk::FILL ) ; top++, bottom++,
table ->attach( * Utils::mk_label( partition .realpath ), 1, 2, top++, bottom++, Gtk::FILL ) ; Gtk::FILL ) ;
}
//status //status
Glib::ustring str_temp ; Glib::ustring str_temp ;
table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Status:" ) + "</b>" ), 0,1, top, bottom, Gtk::FILL) ; table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Status:" ) + "</b>" ),
0, 1,
top, bottom,
Gtk::FILL) ;
if ( partition .busy ) if ( partition .busy )
{ {
if ( partition .type == GParted::TYPE_EXTENDED ) if ( partition .type == GParted::TYPE_EXTENDED )
@ -219,15 +222,16 @@ void Dialog_Partition_Info::Display_Info( )
//total sectors //total sectors
table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Total Sectors:" ) + "</b>" ), 0, 1, top, bottom, Gtk::FILL ) ; table ->attach( * Utils::mk_label( "<b>" + (Glib::ustring) _( "Total Sectors:" ) + "</b>" ), 0, 1, top, bottom, Gtk::FILL ) ;
//FIXME: use Partition::get_length() here..
table ->attach( * Utils::mk_label( Utils::num_to_str( partition .sector_end - partition .sector_start ) ), 1, 2, top++, bottom++, Gtk::FILL ) ; table ->attach( * Utils::mk_label( Utils::num_to_str( partition .sector_end - partition .sector_start ) ), 1, 2, top++, bottom++, Gtk::FILL ) ;
} }
Dialog_Partition_Info::~Dialog_Partition_Info( ) Dialog_Partition_Info::~Dialog_Partition_Info()
{ {
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 ) ;
this ->get_colormap( ) ->free_colors( color_partition, 1 ) ; this ->get_colormap() ->free_colors( color_partition, 1 ) ;
} }
} //GParted } //GParted

View File

@ -66,12 +66,12 @@ void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector<Partiti
//see if we need a fixed_start //see if we need a fixed_start
if ( fs .move ) if ( fs .move )
{ {
this ->set_title( String::ucompose( _("Resize/Move %1"), selected_partition .partition ) ) ; set_title( String::ucompose( _("Resize/Move %1"), selected_partition .get_path() ) ) ;
frame_resizer_base ->set_fixed_start( false ) ; frame_resizer_base ->set_fixed_start( false ) ;
} }
else else
{ {
this ->set_title( String::ucompose( _("Resize %1"), selected_partition .partition) ) ; set_title( String::ucompose( _("Resize %1"), selected_partition .get_path() ) ) ;
this ->fixed_start = true; this ->fixed_start = true;
frame_resizer_base ->set_fixed_start( true ) ; frame_resizer_base ->set_fixed_start( true ) ;
spinbutton_before .set_sensitive( false ) ; spinbutton_before .set_sensitive( false ) ;

View File

@ -84,6 +84,8 @@ void DrawingAreaVisualDisk::set_static_data( const std::vector<Partition> & part
{ {
Sector p_length ; Sector p_length ;
visual_partition vp ; visual_partition vp ;
//FIXME: any particular reason why Partition::get_length() isn't used in this function?
//i'm also not sure why we use 'vp' this way.. Lets either use it or drop it :)
for ( unsigned int t = 0 ; t < partitions .size() ; t++ ) for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
{ {
@ -109,7 +111,7 @@ void DrawingAreaVisualDisk::set_static_data( const std::vector<Partition> & part
partitions[ t ] .sector_end - partitions[ t ] .sector_start ) ; partitions[ t ] .sector_end - partitions[ t ] .sector_start ) ;
else else
visual_partitions .back() .pango_layout = create_pango_layout( visual_partitions .back() .pango_layout = create_pango_layout(
partitions[ t ] .partition + "\n" + Utils::format_size( partitions[ t ] .get_length() ) ) ; partitions[ t ] .get_path() + "\n" + Utils::format_size( partitions[ t ] .get_length() ) ) ;
} }
} }

View File

@ -7,7 +7,7 @@ Glib::ustring ped_error ; //see e.g. ped_exception_handler()
namespace GParted namespace GParted
{ {
GParted_Core::GParted_Core() GParted_Core::GParted_Core()
{ {
lp_device = NULL ; lp_device = NULL ;
@ -17,7 +17,6 @@ GParted_Core::GParted_Core()
ped_exception_set_handler( ped_exception_handler ) ; ped_exception_set_handler( ped_exception_handler ) ;
//get valid flags ... //get valid flags ...
for ( PedPartitionFlag flag = ped_partition_flag_next( static_cast<PedPartitionFlag>( NULL ) ) ; for ( PedPartitionFlag flag = ped_partition_flag_next( static_cast<PedPartitionFlag>( NULL ) ) ;
flag ; flag ;
@ -128,8 +127,9 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
temp_device .Reset() ; temp_device .Reset() ;
//device info.. //device info..
temp_device .path = get_short_path( device_paths[ t ] ) ; temp_device .add_path( device_paths[ t ] ) ;
temp_device .realpath = lp_device ->path ; temp_device .add_paths( get_alternate_paths( temp_device .get_path() ) ) ;
temp_device .model = lp_device ->model ; temp_device .model = lp_device ->model ;
temp_device .heads = lp_device ->bios_geom .heads ; temp_device .heads = lp_device ->bios_geom .heads ;
temp_device .sectors = lp_device ->bios_geom .sectors ; temp_device .sectors = lp_device ->bios_geom .sectors ;
@ -148,7 +148,6 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
temp_device .max_prims = ped_disk_get_max_primary_partition_count( lp_disk ) ; temp_device .max_prims = ped_disk_get_max_primary_partition_count( lp_disk ) ;
set_device_partitions( temp_device ) ; set_device_partitions( temp_device ) ;
set_short_paths( temp_device .partitions ) ;
set_mountpoints( temp_device .partitions ) ; set_mountpoints( temp_device .partitions ) ;
set_used_sectors( temp_device .partitions ) ; set_used_sectors( temp_device .partitions ) ;
@ -162,7 +161,10 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
temp_device .max_prims = -1 ; temp_device .max_prims = -1 ;
Partition partition_temp ; Partition partition_temp ;
partition_temp .Set_Unallocated( temp_device .path, 0, temp_device .length, false ); partition_temp .Set_Unallocated( temp_device .get_path(),
0,
temp_device .length,
false );
temp_device .partitions .push_back( partition_temp ); temp_device .partitions .push_back( partition_temp );
} }
@ -174,7 +176,7 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
//clear leftover information... //clear leftover information...
//NOTE that we cannot clear mountinfo since it might be needed in get_all_mountpoints() //NOTE that we cannot clear mountinfo since it might be needed in get_all_mountpoints()
short_paths .clear() ; alternate_paths .clear() ;
fstab_info .clear() ; fstab_info .clear() ;
} }
@ -208,7 +210,7 @@ void GParted_Core::read_mountpoints_from_file( const Glib::ustring & filename,
void GParted_Core::init_maps() void GParted_Core::init_maps()
{ {
short_paths .clear() ; alternate_paths .clear() ;
mount_info .clear() ; mount_info .clear() ;
fstab_info .clear() ; fstab_info .clear() ;
@ -226,7 +228,7 @@ void GParted_Core::init_maps()
iter_mp ->second .end() ) ; iter_mp ->second .end() ) ;
} }
//initialize shortpaths... //initialize alternate_paths...
std::string line ; std::string line ;
std::ifstream proc_partitions( "/proc/partitions" ) ; std::ifstream proc_partitions( "/proc/partitions" ) ;
if ( proc_partitions ) if ( proc_partitions )
@ -238,9 +240,14 @@ void GParted_Core::init_maps()
{ {
line = "/dev/" ; line = "/dev/" ;
line += c_str ; line += c_str ;
if ( realpath( line .c_str(), c_str ) ) if ( realpath( line .c_str(), c_str ) && line != c_str )
short_paths[ c_str ] = line ; {
//because we can make no assumption about which path libparted will detect
//we add all combinations.
alternate_paths[ c_str ] = line ;
alternate_paths[ line ] = c_str ;
}
} }
proc_partitions .close() ; proc_partitions .close() ;
@ -320,35 +327,39 @@ void GParted_Core::set_device_partitions( Device & device )
{ {
case PED_PARTITION_NORMAL: case PED_PARTITION_NORMAL:
case PED_PARTITION_LOGICAL: case PED_PARTITION_LOGICAL:
partition_temp .Set( device .path, partition_temp .Set( device .get_path(),
ped_partition_get_path( lp_partition ), ped_partition_get_path( lp_partition ),
lp_partition ->num, lp_partition ->num,
lp_partition ->type == 0 ? GParted::TYPE_PRIMARY : GParted::TYPE_LOGICAL, lp_partition ->type == 0 ?
GParted::TYPE_PRIMARY : GParted::TYPE_LOGICAL,
get_filesystem(), get_filesystem(),
lp_partition ->geom .start, lp_partition ->geom .start,
lp_partition ->geom .end, lp_partition ->geom .end,
lp_partition ->type, lp_partition ->type,
ped_partition_is_busy( lp_partition ) ); ped_partition_is_busy( lp_partition ) );
partition_temp .add_paths( get_alternate_paths( partition_temp .get_path() ) ) ;
set_flags( partition_temp ) ; set_flags( partition_temp ) ;
if ( partition_temp .busy && partition_temp .partition_number > device .highest_busy ) if ( partition_temp .busy && partition_temp .partition_number > device .highest_busy )
device .highest_busy = partition_temp .partition_number ; device .highest_busy = partition_temp .partition_number ;
break ; break ;
case PED_PARTITION_EXTENDED: case PED_PARTITION_EXTENDED:
partition_temp.Set( device .path, partition_temp .Set( device .get_path(),
ped_partition_get_path( lp_partition ), ped_partition_get_path( lp_partition ),
lp_partition ->num, lp_partition ->num,
GParted::TYPE_EXTENDED, GParted::TYPE_EXTENDED,
GParted::FS_EXTENDED, GParted::FS_EXTENDED,
lp_partition ->geom .start, lp_partition ->geom .start,
lp_partition ->geom .end, lp_partition ->geom .end,
false, false,
ped_partition_is_busy( lp_partition ) ); ped_partition_is_busy( lp_partition ) );
partition_temp .add_paths( get_alternate_paths( partition_temp .get_path() ) ) ;
set_flags( partition_temp ) ; set_flags( partition_temp ) ;
EXT_INDEX = device .partitions .size() ; EXT_INDEX = device .partitions .size() ;
break ; break ;
@ -370,13 +381,13 @@ void GParted_Core::set_device_partitions( Device & device )
} }
if ( EXT_INDEX > -1 ) if ( EXT_INDEX > -1 )
insert_unallocated( device .path, insert_unallocated( device .get_path(),
device .partitions[ EXT_INDEX ] .logicals, device .partitions[ EXT_INDEX ] .logicals,
device .partitions[ EXT_INDEX ] .sector_start, device .partitions[ EXT_INDEX ] .sector_start,
device .partitions[ EXT_INDEX ] .sector_end, device .partitions[ EXT_INDEX ] .sector_end,
true ) ; true ) ;
insert_unallocated( device .path, device .partitions, 0, device .length -1, false ) ; insert_unallocated( device .get_path(), device .partitions, 0, device .length -1, false ) ;
} }
void GParted_Core::set_mountpoints( std::vector<Partition> & partitions ) void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
@ -389,15 +400,22 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
{ {
if ( partitions[ t ] .busy ) if ( partitions[ t ] .busy )
{ {
iter_mp = mount_info .find( partitions[ t ] .partition ); for ( unsigned int i = 0 ; i < partitions[ t ] .get_paths() .size() ; i++ )
if ( iter_mp != mount_info .end() ) {
partitions[ t ] .mountpoints = iter_mp ->second ; iter_mp = mount_info .find( partitions[ t ] .get_paths()[ i ] ) ;
else if ( iter_mp != mount_info .end() )
{
partitions[ t ] .mountpoints = iter_mp ->second ;
break ;
}
}
if ( partitions[ t ] .mountpoints .empty() )
partitions[ t ] .error = _("Unable to find mountpoint") ; partitions[ t ] .error = _("Unable to find mountpoint") ;
} }
else else
{ {
iter_mp = fstab_info .find( partitions[ t ] .partition ); iter_mp = fstab_info .find( partitions[ t ] .get_path() );
if ( iter_mp != fstab_info .end() ) if ( iter_mp != fstab_info .end() )
partitions[ t ] .mountpoints = iter_mp ->second ; partitions[ t ] .mountpoints = iter_mp ->second ;
} }
@ -406,27 +424,18 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions )
set_mountpoints( partitions[ t ] .logicals ) ; set_mountpoints( partitions[ t ] .logicals ) ;
} }
} }
void GParted_Core::set_short_paths( std::vector<Partition> & partitions ) std::vector<Glib::ustring> GParted_Core::get_alternate_paths( const Glib::ustring & path )
{ {
for ( unsigned int t =0 ; t < partitions .size() ; t++ ) std::vector<Glib::ustring> paths ;
{
partitions[ t ] .partition = get_short_path( partitions[ t ] .partition ) ; iter = alternate_paths .find( path ) ;
if ( iter != alternate_paths .end() )
paths .push_back( iter ->second ) ;
if ( partitions[ t ] .type == GParted::TYPE_EXTENDED ) return paths ;
set_short_paths( partitions[ t ] .logicals ) ;
}
} }
Glib::ustring GParted_Core::get_short_path( const Glib::ustring & real_path )
{
iter = short_paths .find( real_path );
if ( iter != short_paths .end() )
return iter ->second ;
return real_path ;
}
void GParted_Core::set_used_sectors( std::vector<Partition> & partitions ) void GParted_Core::set_used_sectors( std::vector<Partition> & partitions )
{ {
struct statvfs sfs ; struct statvfs sfs ;
@ -686,15 +695,13 @@ bool GParted_Core::copy( const Glib::ustring & src_part_path,
std::vector<OperationDetails> & operation_details ) std::vector<OperationDetails> & operation_details )
{ {
set_proper_filesystem( partition_dest .filesystem ) ; set_proper_filesystem( partition_dest .filesystem ) ;
Partition src_partition( src_part_path ) ;
Partition src_partition ;
src_partition .partition = src_part_path ;
return ( p_filesystem && return ( p_filesystem &&
p_filesystem ->Check_Repair( src_partition, operation_details ) && p_filesystem ->Check_Repair( src_partition, operation_details ) &&
create_empty_partition( partition_dest, operation_details, true ) > 0 && create_empty_partition( partition_dest, operation_details, true ) > 0 &&
set_partition_type( partition_dest, operation_details ) && set_partition_type( partition_dest, operation_details ) &&
p_filesystem ->Copy( src_part_path, partition_dest .partition, operation_details ) && p_filesystem ->Copy( src_part_path, partition_dest .get_path(), operation_details ) &&
p_filesystem ->Check_Repair( partition_dest, operation_details ) ) ; p_filesystem ->Check_Repair( partition_dest, operation_details ) ) ;
} }
@ -827,6 +834,7 @@ int GParted_Core::create_empty_partition( Partition & new_partition,
NULL, NULL,
new_partition .sector_start, new_partition .sector_start,
new_partition .sector_end ) ; new_partition .sector_end ) ;
if ( lp_partition ) if ( lp_partition )
{ {
if ( new_partition .strict ) if ( new_partition .strict )
@ -843,12 +851,14 @@ int GParted_Core::create_empty_partition( Partition & new_partition,
if ( constraint ) if ( constraint )
{ {
//FIXME: i should use the length of the copied partition as min_size
//maybe we can set the used from new_partition to this size?
if ( copy ) if ( copy )
constraint ->min_size = new_partition .get_length() ; constraint ->min_size = new_partition .get_length() ;
if ( ped_disk_add_partition( lp_disk, lp_partition, constraint ) && commit() ) if ( ped_disk_add_partition( lp_disk, lp_partition, constraint ) && commit() )
{ {
new_partition .partition = ped_partition_get_path( lp_partition ) ; new_partition .add_path( ped_partition_get_path( lp_partition ), true ) ;
new_partition .partition_number = lp_partition ->num ; new_partition .partition_number = lp_partition ->num ;
Sector start = lp_partition ->geom .start ; Sector start = lp_partition ->geom .start ;
@ -857,7 +867,7 @@ int GParted_Core::create_empty_partition( Partition & new_partition,
operation_details .back() .sub_details .push_back( operation_details .back() .sub_details .push_back(
OperationDetails( OperationDetails(
"<i>" + "<i>" +
String::ucompose( _("path: %1"), new_partition .partition ) + "\n" + String::ucompose( _("path: %1"), new_partition .get_path() ) + "\n" +
String::ucompose( _("start: %1"), start ) + "\n" + String::ucompose( _("start: %1"), start ) + "\n" +
String::ucompose( _("end: %1"), end ) + "\n" + String::ucompose( _("end: %1"), end ) + "\n" +
String::ucompose( _("size: %1"), Utils::format_size( end - start + 1 ) ) + String::ucompose( _("size: %1"), Utils::format_size( end - start + 1 ) ) +
@ -877,7 +887,7 @@ int GParted_Core::create_empty_partition( Partition & new_partition,
( (
new_partition .type == GParted::TYPE_EXTENDED || new_partition .type == GParted::TYPE_EXTENDED ||
( (
wait_for_node( new_partition .partition ) && wait_for_node( new_partition .get_path() ) &&
erase_filesystem_signatures( new_partition ) erase_filesystem_signatures( new_partition )
) )
) )
@ -992,7 +1002,7 @@ bool GParted_Core::resize_container_partition( const Partition & partition_old,
} }
else else
{ {
return_value &= wait_for_node( partition_new .partition ) ; return_value &= wait_for_node( partition_new .get_path() ) ;
operation_details .back() .status = return_value ? OperationDetails::SUCCES : OperationDetails::ERROR ; operation_details .back() .status = return_value ? OperationDetails::SUCCES : OperationDetails::ERROR ;
return return_value ; return return_value ;
@ -1108,7 +1118,7 @@ bool GParted_Core::set_partition_type( const Partition & partition,
(partition .sector_end + partition .sector_start) / 2 ) ; (partition .sector_end + partition .sector_start) / 2 ) ;
if ( lp_partition && ped_partition_set_system( lp_partition, fs_type ) && commit() ) if ( lp_partition && ped_partition_set_system( lp_partition, fs_type ) && commit() )
return_value = wait_for_node( partition .partition ) ; return_value = wait_for_node( partition .get_path() ) ;
} }
close_device_and_disk() ; close_device_and_disk() ;
@ -1216,6 +1226,5 @@ PedExceptionOption GParted_Core::ped_exception_handler( PedException * e )
return PED_EXCEPTION_UNHANDLED ; return PED_EXCEPTION_UNHANDLED ;
} }
} //GParted } //GParted

View File

@ -23,7 +23,10 @@ Operation::Operation()
{ {
} }
Operation::Operation( const Device & device, const Partition & partition_original, const Partition & partition_new, OperationType operationtype ) Operation::Operation( const Device & device,
const Partition & partition_original,
const Partition & partition_new,
OperationType operationtype )
{ {
this ->device = device ; this ->device = device ;
this ->partition_original = partition_original; this ->partition_original = partition_original;
@ -34,8 +37,10 @@ Operation::Operation( const Device & device, const Partition & partition_origina
if ( operationtype == COPY ) if ( operationtype == COPY )
{ {
copied_partition_path = partition_new .partition ; copied_partition_path = partition_new .get_path() ;
this ->partition_new .partition = String::ucompose( _("copy of %1"), this ->partition_new .partition ); this ->partition_new .add_path(
String::ucompose( _("copy of %1"), this ->partition_new .get_path() ),
true ) ;
} }
} }
@ -50,14 +55,14 @@ Glib::ustring Operation::Get_String( )
if (partition_original.type == GParted::TYPE_LOGICAL) if (partition_original.type == GParted::TYPE_LOGICAL)
temp = _("Logical Partition") ; temp = _("Logical Partition") ;
else else
temp = partition_original .partition ; temp = partition_original .get_path() ;
/*TO TRANSLATORS: looks like Delete /dev/hda2 (ntfs, 345 MiB) from /dev/hda */ /*TO TRANSLATORS: looks like Delete /dev/hda2 (ntfs, 345 MiB) from /dev/hda */
return String::ucompose( _("Delete %1 (%2, %3) from %4"), return String::ucompose( _("Delete %1 (%2, %3) from %4"),
temp, temp,
Utils::Get_Filesystem_String( partition_original .filesystem ), Utils::Get_Filesystem_String( partition_original .filesystem ),
Utils::format_size( partition_original .get_length() ), Utils::format_size( partition_original .get_length() ),
device .path ) ; device .get_path() ) ;
case CREATE : case CREATE :
switch( partition_new.type ) switch( partition_new.type )
@ -78,10 +83,10 @@ Glib::ustring Operation::Get_String( )
/*TO TRANSLATORS: looks like Create Logical Partition #1 (ntfs, 345 MiB) on /dev/hda */ /*TO TRANSLATORS: looks like Create Logical Partition #1 (ntfs, 345 MiB) on /dev/hda */
return String::ucompose( _("Create %1 #%2 (%3, %4) on %5"), return String::ucompose( _("Create %1 #%2 (%3, %4) on %5"),
temp, temp,
partition_new.partition_number, partition_new .partition_number,
Utils::Get_Filesystem_String( partition_new.filesystem ), Utils::Get_Filesystem_String( partition_new .filesystem ),
Utils::format_size( partition_new .get_length() ), Utils::format_size( partition_new .get_length() ),
device .path ) ; device .get_path() ) ;
case RESIZE_MOVE: case RESIZE_MOVE:
//if startsector has changed we consider it a move //if startsector has changed we consider it a move
@ -90,11 +95,11 @@ Glib::ustring Operation::Get_String( )
{ {
if ( partition_new .sector_start > partition_original .sector_start ) if ( partition_new .sector_start > partition_original .sector_start )
temp = String::ucompose( _("Move %1 forward by %2"), temp = String::ucompose( _("Move %1 forward by %2"),
partition_new .partition, partition_new .get_path(),
Utils::format_size( diff ) ) ; Utils::format_size( diff ) ) ;
else else
temp = String::ucompose( _("Move %1 backward by %2"), temp = String::ucompose( _("Move %1 backward by %2"),
partition_new .partition, partition_new .get_path(),
Utils::format_size( diff ) ) ; Utils::format_size( diff ) ) ;
} }
@ -104,12 +109,12 @@ Glib::ustring Operation::Get_String( )
{ {
if ( temp .empty() ) if ( temp .empty() )
temp = String::ucompose( _("Resize %1 from %2 to %3"), temp = String::ucompose( _("Resize %1 from %2 to %3"),
partition_new.partition, partition_new .get_path(),
Utils::format_size( partition_original .get_length() ), Utils::format_size( partition_original .get_length() ),
Utils::format_size( partition_new .get_length() ) ) ; Utils::format_size( partition_new .get_length() ) ) ;
else else
temp += " " + String::ucompose( _("and Resize %1 from %2 to %3"), temp += " " + String::ucompose( _("and Resize %1 from %2 to %3"),
partition_new.partition, partition_new .get_path(),
Utils::format_size( partition_original .get_length() ), Utils::format_size( partition_original .get_length() ),
Utils::format_size( partition_new .get_length() ) ) ; Utils::format_size( partition_new .get_length() ) ) ;
} }
@ -119,14 +124,14 @@ Glib::ustring Operation::Get_String( )
case FORMAT : case FORMAT :
/*TO TRANSLATORS: looks like Format /dev/hda4 as linux-swap */ /*TO TRANSLATORS: looks like Format /dev/hda4 as linux-swap */
return String::ucompose( _("Format %1 as %2"), return String::ucompose( _("Format %1 as %2"),
partition_original .partition, partition_original .get_path(),
Utils::Get_Filesystem_String( partition_new .filesystem ) ) ; Utils::Get_Filesystem_String( partition_new .filesystem ) ) ;
case COPY : case COPY :
/*TO TRANSLATORS: looks like Copy /dev/hda4 to /dev/hdd (start at 250 MiB) */ /*TO TRANSLATORS: looks like Copy /dev/hda4 to /dev/hdd (start at 250 MiB) */
return String::ucompose( _("Copy %1 to %2 (start at %3)"), return String::ucompose( _("Copy %1 to %2 (start at %3)"),
partition_new .partition, partition_new .get_path(),
device .path, device .get_path(),
Utils::format_size( partition_new .sector_start ) ) ; Utils::format_size( partition_new .sector_start ) ) ;
default : default :
@ -153,7 +158,7 @@ void Operation::Apply_Operation_To_Visual( std::vector<Partition> & partitions )
void Operation::Insert_Unallocated( std::vector<Partition> & partitions, Sector start, Sector end, bool inside_extended ) void Operation::Insert_Unallocated( std::vector<Partition> & partitions, Sector start, Sector end, bool inside_extended )
{ {
Partition UNALLOCATED ; Partition UNALLOCATED ;
UNALLOCATED .Set_Unallocated( device .path, 0, 0, inside_extended ) ; UNALLOCATED .Set_Unallocated( device .get_path(), 0, 0, inside_extended ) ;
//if there are no partitions at all.. //if there are no partitions at all..
if ( partitions .empty( ) ) if ( partitions .empty( ) )
@ -244,7 +249,10 @@ void Operation::Apply_Delete_To_Visual( std::vector<Partition> & partitions )
partitions[ ext ] .logicals[ t ] .Update_Number( partitions[ ext ] .logicals[ t ] .partition_number -1 ); partitions[ ext ] .logicals[ t ] .Update_Number( partitions[ ext ] .logicals[ t ] .partition_number -1 );
Insert_Unallocated( partitions[ ext ] .logicals, partitions[ ext ] .sector_start, partitions[ ext ] .sector_end, true ) ; Insert_Unallocated( partitions[ ext ] .logicals,
partitions[ ext ] .sector_start,
partitions[ ext ] .sector_end,
true ) ;
} }
} }
@ -261,7 +269,10 @@ void Operation::Apply_Create_To_Visual( std::vector<Partition> & partitions )
unsigned int ext = get_index_extended( partitions ) ; unsigned int ext = get_index_extended( partitions ) ;
partitions[ ext ] .logicals[ Get_Index_Original( partitions[ ext ] .logicals ) ] = partition_new ; partitions[ ext ] .logicals[ Get_Index_Original( partitions[ ext ] .logicals ) ] = partition_new ;
Insert_Unallocated( partitions[ ext ] .logicals, partitions[ ext ] .sector_start, partitions[ ext ] .sector_end, true ) ; Insert_Unallocated( partitions[ ext ] .logicals,
partitions[ ext ] .sector_start,
partitions[ ext ] .sector_end,
true ) ;
} }
} }
@ -285,13 +296,18 @@ void Operation::Apply_Resize_Move_Extended_To_Visual( std::vector<Partition> & p
//stuff INSIDE extended partition //stuff INSIDE extended partition
ext = get_index_extended( partitions ) ; ext = get_index_extended( partitions ) ;
if ( partitions[ ext ] .logicals .size( ) && partitions[ ext ] .logicals .front( ) .type == GParted::TYPE_UNALLOCATED ) if ( partitions[ ext ] .logicals .size() &&
partitions[ ext ] .logicals .erase( partitions[ ext ] .logicals .begin( ) ) ; partitions[ ext ] .logicals .front() .type == GParted::TYPE_UNALLOCATED )
partitions[ ext ] .logicals .erase( partitions[ ext ] .logicals .begin() ) ;
if ( partitions[ ext ] .logicals .size( ) && partitions[ ext ] .logicals .back( ) .type == GParted::TYPE_UNALLOCATED ) if ( partitions[ ext ] .logicals .size() &&
partitions[ ext ] .logicals .erase( partitions[ ext ] .logicals .end( ) -1 ) ; partitions[ ext ] .logicals .back() .type == GParted::TYPE_UNALLOCATED )
partitions[ ext ] .logicals .erase( partitions[ ext ] .logicals .end() -1 ) ;
Insert_Unallocated( partitions[ ext ] .logicals, partitions[ ext ] .sector_start, partitions[ ext ] .sector_end, true ) ; Insert_Unallocated( partitions[ ext ] .logicals,
partitions[ ext ] .sector_start,
partitions[ ext ] .sector_end,
true ) ;
} }
} //GParted } //GParted

View File

@ -24,10 +24,18 @@ Partition::Partition()
{ {
Reset() ; Reset() ;
} }
Partition::Partition( const Glib::ustring & path )
{
Reset() ;
paths .push_back( path ) ;
}
void Partition::Reset() void Partition::Reset()
{ {
partition = realpath = error = "" ; paths .clear() ;
error .clear() ;
status = GParted::STAT_REAL ; status = GParted::STAT_REAL ;
type = GParted::TYPE_UNALLOCATED ; type = GParted::TYPE_UNALLOCATED ;
filesystem = GParted::FS_UNALLOCATED ; filesystem = GParted::FS_UNALLOCATED ;
@ -50,7 +58,9 @@ void Partition::Set( const Glib::ustring & device_path,
bool busy ) bool busy )
{ {
this ->device_path = device_path ; this ->device_path = device_path ;
this ->partition = realpath = partition;
paths .push_back( partition ) ;
this ->partition_number = partition_number; this ->partition_number = partition_number;
this ->type = type; this ->type = type;
this ->filesystem = filesystem; this ->filesystem = filesystem;
@ -59,7 +69,7 @@ void Partition::Set( const Glib::ustring & device_path,
this ->inside_extended = inside_extended; this ->inside_extended = inside_extended;
this ->busy = busy; this ->busy = busy;
this ->color.set( Utils::Get_Color( filesystem ) ); this ->color .set( Utils::Get_Color( filesystem ) );
} }
void Partition::Set_Unused( Sector sectors_unused ) void Partition::Set_Unused( Sector sectors_unused )
@ -71,10 +81,13 @@ void Partition::Set_Unused( Sector sectors_unused )
} }
} }
void Partition::Set_Unallocated( const Glib::ustring & device_path, Sector sector_start, Sector sector_end, bool inside_extended ) void Partition::Set_Unallocated( const Glib::ustring & device_path,
Sector sector_start,
Sector sector_end,
bool inside_extended )
{ {
Reset() ; Reset() ;
Set( device_path, Set( device_path,
Utils::Get_Filesystem_String( GParted::FS_UNALLOCATED ), Utils::Get_Filesystem_String( GParted::FS_UNALLOCATED ),
-1, -1,
@ -89,19 +102,59 @@ void Partition::Set_Unallocated( const Glib::ustring & device_path, Sector secto
} }
void Partition::Update_Number( int new_number ) void Partition::Update_Number( int new_number )
{ {
this ->partition = unsigned int index ;
partition .substr( 0, partition .find( Utils::num_to_str( partition_number ) ) ) + for ( unsigned int t = 0 ; t < paths .size() ; t++ )
Utils::num_to_str( new_number ) ; {
index = paths[ t ] .rfind( Utils::num_to_str( partition_number ) ) ;
if ( index < paths[ t ] .length() )
paths[ t ] .replace( index,
Utils::num_to_str( partition_number ) .length(),
Utils::num_to_str( new_number ) ) ;
}
partition_number = new_number;
}
this ->partition_number = new_number; void Partition::add_path( const Glib::ustring & path, bool clear_paths )
{
if ( clear_paths )
paths .clear() ;
paths .push_back( path ) ;
sort_paths_and_remove_duplicates() ;
}
void Partition::add_paths( const std::vector<Glib::ustring> & paths, bool clear_paths )
{
if ( clear_paths )
this ->paths .clear() ;
this ->paths .insert( this ->paths .end(), paths .begin(), paths .end() ) ;
sort_paths_and_remove_duplicates() ;
} }
Sector Partition::get_length() const Sector Partition::get_length() const
{ {
return sector_end - sector_start + 1 ; return sector_end - sector_start + 1 ;
} }
Glib::ustring Partition::get_path() const
{
if ( paths .size() > 0 )
return paths .front() ;
return "" ;
}
std::vector<Glib::ustring> Partition::get_paths() const
{
return paths ;
}
bool Partition::operator==( const Partition & partition ) const bool Partition::operator==( const Partition & partition ) const
{ {
return this ->partition_number == partition .partition_number && return this ->partition_number == partition .partition_number &&
@ -109,6 +162,21 @@ bool Partition::operator==( const Partition & partition ) const
this ->type == partition .type ; this ->type == partition .type ;
} }
void Partition::sort_paths_and_remove_duplicates()
{
//remove duplicates
std::sort( paths .begin(), paths .end() ) ;
paths .erase( std::unique( paths .begin(), paths .end() ), paths .end() ) ;
//sort on length
std::sort( paths .begin(), paths .end(), compare_paths ) ;
}
bool Partition::compare_paths( const Glib::ustring & A, const Glib::ustring & B )
{
return A .length() < B .length() ;
}
Partition::~Partition() Partition::~Partition()
{ {
} }

View File

@ -156,7 +156,7 @@ void TreeView_Detail::create_row( const Gtk::TreeRow & treerow, const Partition
treerow[ treeview_detail_columns .error_icon ] = treerow[ treeview_detail_columns .error_icon ] =
render_icon( Gtk::Stock::DIALOG_WARNING, Gtk::ICON_SIZE_BUTTON ); render_icon( Gtk::Stock::DIALOG_WARNING, Gtk::ICON_SIZE_BUTTON );
treerow[ treeview_detail_columns .path ] = partition .partition ; treerow[ treeview_detail_columns .path ] = partition .get_path() ;
//this fixes a weird issue (see #169683 for more info) //this fixes a weird issue (see #169683 for more info)
if ( partition .type == GParted::TYPE_EXTENDED && partition .busy ) if ( partition .type == GParted::TYPE_EXTENDED && partition .busy )

View File

@ -28,15 +28,17 @@ Sector Utils::Round( double double_value )
return static_cast<Sector>( double_value + 0.5 ) ; return static_cast<Sector>( double_value + 0.5 ) ;
} }
Gtk::Label * Utils::mk_label( const Glib::ustring & text, bool use_markup, bool align_left, bool wrap, const Glib::ustring & text_color ) Gtk::Label * Utils::mk_label( const Glib::ustring & text,
bool use_markup,
bool align_left,
bool wrap,
const Glib::ustring & text_color )
{ {
Gtk::Label * label = manage( new Gtk::Label( text ) ) ; Gtk::Label * label = manage( new Gtk::Label( text,
align_left ? Gtk::ALIGN_LEFT : Gtk::ALIGN_CENTER,
Gtk::ALIGN_TOP ) ) ;
label ->set_use_markup( use_markup ) ; label ->set_use_markup( use_markup ) ;
if ( align_left )
label ->set_alignment( Gtk::ALIGN_LEFT ) ;
label ->set_line_wrap( wrap ) ; label ->set_line_wrap( wrap ) ;
if ( text_color != "black" ) if ( text_color != "black" )

View File

@ -321,11 +321,6 @@ void Win_GParted::init_device_info()
device_info .push_back( Utils::mk_label( "" ) ) ; device_info .push_back( Utils::mk_label( "" ) ) ;
table ->attach( * device_info .back(), 1,2, top++, bottom++, Gtk::FILL); table ->attach( * device_info .back(), 1,2, top++, bottom++, Gtk::FILL);
//real path
table ->attach( * Utils::mk_label( " <b>" + (Glib::ustring) _( "Real Path:" ) + "</b>" ) , 0,1,top, bottom ,Gtk::FILL);
device_info .push_back( Utils::mk_label( "" ) ) ;
table ->attach( * device_info .back(), 1,2, top++, bottom++, Gtk::FILL);
vbox_info .pack_start( *table, Gtk::PACK_SHRINK ); vbox_info .pack_start( *table, Gtk::PACK_SHRINK );
//DETAILED DEVICE INFO //DETAILED DEVICE INFO
@ -441,13 +436,13 @@ void Win_GParted::refresh_combo_devices()
treerow = *( liststore_devices ->append() ) ; treerow = *( liststore_devices ->append() ) ;
treerow[ treeview_devices_columns .icon ] = treerow[ treeview_devices_columns .icon ] =
render_icon( Gtk::Stock::HARDDISK, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ; render_icon( Gtk::Stock::HARDDISK, Gtk::ICON_SIZE_LARGE_TOOLBAR ) ;
treerow[ treeview_devices_columns .device ] = devices[ i ] .path ; treerow[ treeview_devices_columns .device ] = devices[ i ] .get_path() ;
treerow[ treeview_devices_columns .size ] = "(" + Utils::format_size( devices[ i ] .length ) + ")" ; treerow[ treeview_devices_columns .size ] = "(" + Utils::format_size( devices[ i ] .length ) + ")" ;
//devices submenu.... //devices submenu....
menu ->items() .push_back( Gtk::Menu_Helpers::RadioMenuElem( menu ->items() .push_back( Gtk::Menu_Helpers::RadioMenuElem(
radio_group, radio_group,
devices[ i ] .path + "\t(" + Utils::format_size( devices[ i ] .length ) + ")", devices[ i ] .get_path() + "\t(" + Utils::format_size( devices[ i ] .length ) + ")",
sigc::bind<unsigned int>( sigc::mem_fun(*this, &Win_GParted::radio_devices_changed), i ) ) ) ; sigc::bind<unsigned int>( sigc::mem_fun(*this, &Win_GParted::radio_devices_changed), i ) ) ) ;
} }
@ -510,8 +505,7 @@ void Win_GParted::Fill_Label_Device_Info( bool clear )
//global info... //global info...
device_info[ t++ ] ->set_text( devices[ current_device ] .model ) ; device_info[ t++ ] ->set_text( devices[ current_device ] .model ) ;
device_info[ t++ ] ->set_text( Utils::format_size( devices[ current_device ] .length ) ) ; device_info[ t++ ] ->set_text( Utils::format_size( devices[ current_device ] .length ) ) ;
device_info[ t++ ] ->set_text( devices[ current_device ] .path ) ; device_info[ t++ ] ->set_text( Glib::build_path( "\n", devices[ current_device ] .get_paths() ) ) ;
device_info[ t++ ] ->set_text( devices[ current_device ] .realpath ) ;
//detailed info //detailed info
device_info[ t++ ] ->set_text( devices[ current_device ] .disktype ) ; device_info[ t++ ] ->set_text( devices[ current_device ] .disktype ) ;
@ -578,8 +572,8 @@ void Win_GParted::Refresh_Visual()
//make all operations visible //make all operations visible
for ( unsigned int t = 0 ; t < operations .size(); t++ ) for ( unsigned int t = 0 ; t < operations .size(); t++ )
{ { //FIXME: overload == operator for Device and use that instead of this..
if ( operations[ t ] .device .path == devices[ current_device ] .path ) if ( operations[ t ] .device .get_path() == devices[ current_device ] .get_path() )
operations[ t ] .Apply_Operation_To_Visual( partitions ) ; operations[ t ] .Apply_Operation_To_Visual( partitions ) ;
treerow = *( liststore_operations ->append() ); treerow = *( liststore_operations ->append() );
@ -605,7 +599,7 @@ void Win_GParted::Refresh_Visual()
primary_count = 0; primary_count = 0;
for ( unsigned int t = 0 ; t < partitions .size() ; t++ ) for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
{ {
if ( partitions[ t ] .partition == copied_partition .partition ) if ( partitions[ t ] .get_path() == copied_partition .get_path() )
copied_partition = partitions[ t ] ; copied_partition = partitions[ t ] ;
switch ( partitions[ t ] .type ) switch ( partitions[ t ] .type )
@ -673,7 +667,7 @@ void Win_GParted::set_valid_operations()
dynamic_cast<Gtk::Label*>(menu_partition .items()[ 10 ] .get_child() ) ->set_label( _("unmount") ) ; dynamic_cast<Gtk::Label*>(menu_partition .items()[ 10 ] .get_child() ) ->set_label( _("unmount") ) ;
//no partition selected... //no partition selected...
if ( selected_partition .partition .empty() ) if ( ! selected_partition .get_paths() .size() )
return ; return ;
//if there's something, there's some info ;) //if there's something, there's some info ;)
@ -717,7 +711,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 .empty() && ! devices[ current_device ] .readonly ) if ( ! copied_partition .get_path() .empty() && ! devices[ current_device ] .readonly )
{ {
Sector required_size ; Sector required_size ;
if ( copied_partition .filesystem == GParted::FS_XFS ) if ( copied_partition .filesystem == GParted::FS_XFS )
@ -824,7 +818,7 @@ void Win_GParted::combo_devices_changed()
{ {
//set new current device //set new current device
current_device = combo_devices .get_active_row_number() ; current_device = combo_devices .get_active_row_number() ;
this ->set_title( String::ucompose( _("%1 - GParted"), devices[ current_device ] .path ) ); set_title( String::ucompose( _("%1 - GParted"), devices[ current_device ] .get_path() ) );
//refresh label_device_info //refresh label_device_info
Fill_Label_Device_Info(); Fill_Label_Device_Info();
@ -876,10 +870,10 @@ void Win_GParted::menu_gparted_refresh_devices( )
//show read-only warning if necessary //show read-only warning if necessary
Glib::ustring readonly_paths ; Glib::ustring readonly_paths ;
//FIXME: push relevant devices in vector en construct error using Glib::build_path
for ( unsigned int t = 0 ; t < devices .size() ; t++ ) for ( unsigned int t = 0 ; t < devices .size() ; t++ )
if ( devices[ t ] .readonly ) if ( devices[ t ] .readonly )
readonly_paths += "\n- " + devices[ t ] .path ; readonly_paths += "\n- " + devices[ t ] .get_path() ;
if ( ! readonly_paths .empty() ) if ( ! readonly_paths .empty() )
{ {
@ -901,8 +895,8 @@ void Win_GParted::menu_gparted_refresh_devices( )
//but anyone who removes the sourcedevice before applying the operations gets what he/she deserves :-) //but anyone who removes the sourcedevice before applying the operations gets what he/she deserves :-)
unsigned int i ; unsigned int i ;
for ( unsigned int t = 0 ; t < operations .size() ; t++ ) for ( unsigned int t = 0 ; t < operations .size() ; t++ )
{ {//FIXME same as above, use Device::==
for ( i = 0 ; i < devices .size() && devices[ i ] .path != operations[ t ] .device .path ; i++ ) {} for ( i = 0 ; i < devices .size() && devices[ i ] .get_path() != operations[ t ] .device .get_path() ; i++ ) {}
if ( i >= devices .size() ) if ( i >= devices .size() )
operations .erase( operations .begin() + t-- ) ;//decrease t bij one.. operations .erase( operations .begin() + t-- ) ;//decrease t bij one..
@ -1111,10 +1105,10 @@ bool Win_GParted::max_amount_prim_reached()
void Win_GParted::activate_resize() void Win_GParted::activate_resize()
{ {
std::vector<Partition> partitions = devices[ current_device ] .partitions ; std::vector<Partition> partitions = devices[ current_device ] .partitions ;
//FIXME use DEvice::==
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 .get_path() == devices[ current_device ] .get_path() )
operations[ t ] .Apply_Operation_To_Visual( partitions ) ; operations[ t ] .Apply_Operation_To_Visual( partitions ) ;
Dialog_Partition_Resize_Move dialog( gparted_core .get_fs( selected_partition .filesystem ), Dialog_Partition_Resize_Move dialog( gparted_core .get_fs( selected_partition .filesystem ),
@ -1142,7 +1136,7 @@ void Win_GParted::activate_resize()
//remove operation which creates this partition //remove operation which creates this partition
for ( unsigned int t = 0 ; t < operations .size() ; t++ ) for ( unsigned int t = 0 ; t < operations .size() ; t++ )
{ {
if ( operations[ t ] .partition_new .partition == selected_partition .partition ) if ( operations[ t ] .partition_new == selected_partition )
{ {
operations.erase( operations .begin() + t ) ; operations.erase( operations .begin() + t ) ;
@ -1225,7 +1219,7 @@ void Win_GParted::activate_delete()
selected_partition .partition_number < devices[ current_device ] .highest_busy ) selected_partition .partition_number < devices[ current_device ] .highest_busy )
{ {
Gtk::MessageDialog dialog( *this, Gtk::MessageDialog dialog( *this,
String::ucompose( _( "Unable to delete %1!"), selected_partition .partition ), String::ucompose( _( "Unable to delete %1!"), selected_partition .get_path() ),
false, false,
Gtk::MESSAGE_ERROR, Gtk::MESSAGE_ERROR,
Gtk::BUTTONS_OK, Gtk::BUTTONS_OK,
@ -1239,12 +1233,12 @@ void Win_GParted::activate_delete()
return; return;
} }
//if partition is on the clipboard... //if partition is on the clipboard...(NOTE: we can't use Partition::== here..)
if ( selected_partition .partition == copied_partition .partition ) if ( selected_partition .get_path() == copied_partition .get_path() )
{ {
Gtk::MessageDialog dialog( *this, Gtk::MessageDialog dialog( *this,
String::ucompose( _( "Are you sure you want to delete %1?"), String::ucompose( _( "Are you sure you want to delete %1?"),
selected_partition .partition ), selected_partition .get_path() ),
false, false,
Gtk::MESSAGE_QUESTION, Gtk::MESSAGE_QUESTION,
Gtk::BUTTONS_NONE, Gtk::BUTTONS_NONE,
@ -1254,7 +1248,7 @@ void Win_GParted::activate_delete()
/*TO TRANSLATORS: dialogtitle, looks like Delete /dev/hda2 (ntfs, 2345 MiB) */ /*TO TRANSLATORS: dialogtitle, looks like Delete /dev/hda2 (ntfs, 2345 MiB) */
dialog .set_title( String::ucompose( _("Delete %1 (%2, %3)"), dialog .set_title( String::ucompose( _("Delete %1 (%2, %3)"),
selected_partition .partition, selected_partition .get_path(),
Utils::Get_Filesystem_String( selected_partition .filesystem ), Utils::Get_Filesystem_String( selected_partition .filesystem ),
Utils::format_size( selected_partition .get_length() ) ) ); Utils::format_size( selected_partition .get_length() ) ) );
dialog .add_button( Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL ); dialog .add_button( Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL );
@ -1267,7 +1261,7 @@ void Win_GParted::activate_delete()
} }
//if deleted partition was on the clipboard we erase it... //if deleted partition was on the clipboard we erase it...
if ( selected_partition .partition == copied_partition .partition ) if ( selected_partition .get_path() == copied_partition .get_path() )
copied_partition .Reset() ; copied_partition .Reset() ;
/* if deleted one is NEW, it doesn't make sense to add it to the operationslist, /* if deleted one is NEW, it doesn't make sense to add it to the operationslist,
@ -1277,7 +1271,7 @@ void Win_GParted::activate_delete()
{ {
//remove all operations done on this new partition (this includes creation) //remove all operations done on this new partition (this includes creation)
for ( int t = 0 ; t < static_cast<int>( operations .size() ) ; t++ ) for ( int t = 0 ; t < static_cast<int>( operations .size() ) ; t++ )
if ( operations[ t ] .partition_new .partition == selected_partition .partition ) if ( operations[ t ] .partition_new .get_path() == selected_partition .get_path() )
operations.erase( operations .begin() + t-- ) ; operations.erase( operations .begin() + t-- ) ;
//determine lowest possible new_count //determine lowest possible new_count
@ -1337,9 +1331,9 @@ void Win_GParted::activate_format( GParted::FILESYSTEM new_fs )
} }
//ok we made it. lets create an fitting partition object //ok we made it. lets create an fitting partition object
Partition part_temp; Partition part_temp ;
part_temp .Set( devices[ current_device ] .path, part_temp .Set( devices[ current_device ] .get_path(),
selected_partition .partition, selected_partition .get_path(),
selected_partition .partition_number, selected_partition .partition_number,
selected_partition .type, new_fs, selected_partition .type, new_fs,
selected_partition .sector_start, selected_partition .sector_start,
@ -1355,7 +1349,7 @@ void Win_GParted::activate_format( GParted::FILESYSTEM new_fs )
//remove operation which creates this partition //remove operation which creates this partition
for ( unsigned int t = 0 ; t < operations .size() ; t++ ) for ( unsigned int t = 0 ; t < operations .size() ; t++ )
{ {
if ( operations[ t ] .partition_new .partition == selected_partition .partition ) if ( operations[ t ] .partition_new == selected_partition )
{ {
operations .erase( operations .begin() +t ) ; operations .erase( operations .begin() +t ) ;
@ -1413,7 +1407,7 @@ void Win_GParted::thread_mount_partition( bool * succes, Glib::ustring * error )
*succes = true ; *succes = true ;
for ( unsigned int t = 0 ; t < selected_partition .mountpoints .size() ; t++ ) for ( unsigned int t = 0 ; t < selected_partition .mountpoints .size() ; t++ )
if ( Utils::execute_command( "mount -v " + selected_partition .partition + " " + selected_partition .mountpoints[ t ], if ( Utils::execute_command( "mount -v " + selected_partition .get_path() + " " + selected_partition .mountpoints[ t ],
dummy, dummy,
*error ) ) *error ) )
{ {
@ -1432,9 +1426,9 @@ void Win_GParted::thread_toggle_swap( bool * succes, Glib::ustring * error )
Glib::ustring dummy ; Glib::ustring dummy ;
if ( selected_partition .busy ) if ( selected_partition .busy )
*succes = ! Utils::execute_command( "swapoff -v " + selected_partition .partition + " && sync", dummy, *error ) ; *succes = ! Utils::execute_command( "swapoff -v " + selected_partition .get_path() + " && sync", dummy, *error ) ;
else else
*succes = ! Utils::execute_command( "swapon -v " + selected_partition .partition + " && sync", dummy, *error ) ; *succes = ! Utils::execute_command( "swapon -v " + selected_partition .get_path() + " && sync", dummy, *error ) ;
pulse = false ; pulse = false ;
} }
@ -1452,8 +1446,9 @@ void Win_GParted::toggle_swap_mount_state()
sigc::mem_fun( *this, &Win_GParted::thread_toggle_swap ), &succes, &error ), true ) ; sigc::mem_fun( *this, &Win_GParted::thread_toggle_swap ), &succes, &error ), true ) ;
show_pulsebar( show_pulsebar(
String::ucompose( selected_partition .busy ? _("Deactivating swap on %1") : _("Activating swap on %1"), String::ucompose(
selected_partition .partition ) ) ; selected_partition .busy ? _("Deactivating swap on %1") : _("Activating swap on %1"),
selected_partition .get_path() ) ) ;
if ( ! succes ) if ( ! succes )
{ {
@ -1477,14 +1472,14 @@ void Win_GParted::toggle_swap_mount_state()
thread = Glib::Thread::create( sigc::bind<bool *, Glib::ustring *>( thread = Glib::Thread::create( sigc::bind<bool *, Glib::ustring *>(
sigc::mem_fun( *this, &Win_GParted::thread_unmount_partition ), &succes, &error ), true ) ; sigc::mem_fun( *this, &Win_GParted::thread_unmount_partition ), &succes, &error ), true ) ;
show_pulsebar( String::ucompose( _("Unmounting %1"), selected_partition .partition ) ) ; show_pulsebar( String::ucompose( _("Unmounting %1"), selected_partition .get_path() ) ) ;
} }
else else
{ {
thread = Glib::Thread::create( sigc::bind<bool *, Glib::ustring *>( thread = Glib::Thread::create( sigc::bind<bool *, Glib::ustring *>(
sigc::mem_fun( *this, &Win_GParted::thread_mount_partition ), &succes, &error ), true ) ; sigc::mem_fun( *this, &Win_GParted::thread_mount_partition ), &succes, &error ), true ) ;
show_pulsebar( String::ucompose( _("mounting %1"), selected_partition .partition ) ) ; show_pulsebar( String::ucompose( _("mounting %1"), selected_partition .get_path() ) ) ;
} }
@ -1492,7 +1487,7 @@ void Win_GParted::toggle_swap_mount_state()
{ {
Gtk::MessageDialog dialog( *this, Gtk::MessageDialog dialog( *this,
String::ucompose( selected_partition .busy ? _("Could not unmount %1") : _("Could not mount %1"), String::ucompose( selected_partition .busy ? _("Could not unmount %1") : _("Could not mount %1"),
selected_partition .partition ), selected_partition .get_path() ),
false, false,
Gtk::MESSAGE_ERROR, Gtk::MESSAGE_ERROR,
Gtk::BUTTONS_OK, Gtk::BUTTONS_OK,
@ -1509,7 +1504,7 @@ void Win_GParted::toggle_swap_mount_state()
void Win_GParted::activate_disklabel() void Win_GParted::activate_disklabel()
{ {
Dialog_Disklabel dialog( devices[ current_device ] .path, gparted_core .get_disklabeltypes() ) ; Dialog_Disklabel dialog( devices[ current_device ] .get_path(), gparted_core .get_disklabeltypes() ) ;
dialog .set_transient_for( *this ); dialog .set_transient_for( *this );
if ( dialog .run() == Gtk::RESPONSE_OK ) if ( dialog .run() == Gtk::RESPONSE_OK )
@ -1517,19 +1512,19 @@ void Win_GParted::activate_disklabel()
Gtk::MessageDialog m_dialog( *this, Gtk::MessageDialog m_dialog( *this,
String::ucompose( _("Are you sure you want to create a %1 disklabel on %2?"), String::ucompose( _("Are you sure you want to create a %1 disklabel on %2?"),
dialog .Get_Disklabel(), dialog .Get_Disklabel(),
devices[ current_device ] .path ), devices[ current_device ] .get_path() ),
false, false,
Gtk::MESSAGE_QUESTION, Gtk::MESSAGE_QUESTION,
Gtk::BUTTONS_CANCEL, Gtk::BUTTONS_CANCEL,
true ) ; true ) ;
m_dialog .set_secondary_text( String::ucompose( _("This operation will destroy all data on %1!"), m_dialog .set_secondary_text( String::ucompose( _("This operation will destroy all data on %1!"),
devices[ current_device ] .path ) ) ; devices[ current_device ] .get_path() ) ) ;
m_dialog .add_button( _("Create"), Gtk::RESPONSE_OK ); m_dialog .add_button( _("Create"), Gtk::RESPONSE_OK );
if ( m_dialog .run() == Gtk::RESPONSE_OK && if ( m_dialog .run() == Gtk::RESPONSE_OK &&
! gparted_core .Set_Disklabel( devices[ current_device ] .path, dialog .Get_Disklabel() ) ) ! gparted_core .Set_Disklabel( devices[ current_device ] .get_path(), dialog .Get_Disklabel() ) )
{ {
Gtk::MessageDialog dialog( *this, Gtk::MessageDialog dialog( *this,
_("Error while setting new disklabel"), _("Error while setting new disklabel"),

View File

@ -51,7 +51,7 @@ FS ext2::get_filesystem_support()
void ext2::Set_Used_Sectors( Partition & partition ) void ext2::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( "dumpe2fs -h " + partition .partition, output, error, true ) ) if ( ! Utils::execute_command( "dumpe2fs -h " + partition .get_path(), output, error, true ) )
{ {
index = output .find( "Free blocks:" ) ; index = output .find( "Free blocks:" ) ;
if ( index >= output .length() || if ( index >= output .length() ||
@ -76,7 +76,7 @@ bool ext2::Create( const Partition & new_partition, std::vector<OperationDetails
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_EXT2 ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_EXT2 ) ) ) ) ;
if ( ! execute_command( "mkfs.ext2 " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkfs.ext2 " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -97,7 +97,7 @@ bool ext2::Resize( const Partition & partition_new,
else else
operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ; operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ;
Glib::ustring str_temp = "resize2fs " + partition_new .partition ; Glib::ustring str_temp = "resize2fs " + partition_new .get_path() ;
if ( ! fill_partition ) if ( ! fill_partition )
str_temp += " " + Utils::num_to_str( Utils::Round( Utils::sector_to_unit( str_temp += " " + Utils::num_to_str( Utils::Round( Utils::sector_to_unit(
@ -127,9 +127,7 @@ bool ext2::Copy( const Glib::ustring & src_part_path,
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
Partition partition ; return Resize( Partition( dest_part_path ), operation_details, true ) ;
partition .partition = dest_part_path ;
return Resize( partition, operation_details, true ) ;
} }
operation_details .back() .status = OperationDetails::ERROR ; operation_details .back() .status = OperationDetails::ERROR ;
@ -140,7 +138,7 @@ bool ext2::Check_Repair( const Partition & partition, std::vector<OperationDetai
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
if ( 1 >= execute_command( "e2fsck -f -y -v " + partition .partition, if ( 1 >= execute_command( "e2fsck -f -y -v " + partition .get_path(),
operation_details .back() .sub_details ) >= 0 ) operation_details .back() .sub_details ) >= 0 )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;

View File

@ -52,7 +52,7 @@ FS ext3::get_filesystem_support()
void ext3::Set_Used_Sectors( Partition & partition ) void ext3::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( "dumpe2fs -h " + partition .partition, output, error, true ) ) if ( ! Utils::execute_command( "dumpe2fs -h " + partition .get_path(), output, error, true ) )
{ {
index = output .find( "Free blocks:" ) ; index = output .find( "Free blocks:" ) ;
if ( index >= output .length() || if ( index >= output .length() ||
@ -77,7 +77,7 @@ bool ext3::Create( const Partition & new_partition, std::vector<OperationDetails
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_EXT3 ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_EXT3 ) ) ) ) ;
if ( ! execute_command( "mkfs.ext3 " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkfs.ext3 " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -98,7 +98,7 @@ bool ext3::Resize( const Partition & partition_new,
else else
operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ; operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ;
Glib::ustring str_temp = "resize2fs " + partition_new .partition ; Glib::ustring str_temp = "resize2fs " + partition_new .get_path() ;
if ( ! fill_partition ) if ( ! fill_partition )
str_temp += " " + Utils::num_to_str( Utils::Round( Utils::sector_to_unit( str_temp += " " + Utils::num_to_str( Utils::Round( Utils::sector_to_unit(
@ -128,9 +128,7 @@ bool ext3::Copy( const Glib::ustring & src_part_path,
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
Partition partition ; return Resize( Partition( dest_part_path ), operation_details, true ) ;
partition .partition = dest_part_path ;
return Resize( partition, operation_details, true ) ;
} }
operation_details .back() .status = OperationDetails::ERROR ; operation_details .back() .status = OperationDetails::ERROR ;
@ -140,9 +138,9 @@ bool ext3::Copy( const Glib::ustring & src_part_path,
bool ext3::Check_Repair( const Partition & partition, std::vector<OperationDetails> & operation_details ) bool ext3::Check_Repair( const Partition & partition, std::vector<OperationDetails> & operation_details )
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
//FIXME: i still need to check if the 1 >= x >= 0 structure actually works!
if ( 1 >= execute_command( "e2fsck -f -y -v " + partition .get_path(),
if ( 1 >= execute_command( "e2fsck -f -y -v " + partition .partition,
operation_details .back() .sub_details ) >= 0 ) operation_details .back() .sub_details ) >= 0 )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;

View File

@ -52,11 +52,12 @@ FS fat16::get_filesystem_support()
void fat16::Set_Used_Sectors( Partition & partition ) void fat16::Set_Used_Sectors( Partition & partition )
{ {
exit_status = Utils::execute_command( "dosfsck -a -v " + partition .partition, output, error, true ) ; exit_status = Utils::execute_command( "dosfsck -a -v " + partition .get_path(), output, error, true ) ;
if ( exit_status == 0 || exit_status == 1 ) if ( exit_status == 0 || exit_status == 1 )
{ {//FIXME: does the output of these commands always display the path we've used for the input?
//if not, we need to check for all paths in the output..
//free clusters //free clusters
index = output .find( ",", output .find( partition .partition ) + partition .partition .length() ) +1 ; index = output .find( ",", output .find( partition .get_path() ) + partition .get_path() .length() ) +1 ;
if ( index < output .length() && sscanf( output .substr( index ) .c_str(), "%Ld/%Ld", &S, &N ) == 2 ) if ( index < output .length() && sscanf( output .substr( index ) .c_str(), "%Ld/%Ld", &S, &N ) == 2 )
N -= S ; N -= S ;
else else
@ -80,7 +81,7 @@ bool fat16::Create( const Partition & new_partition, std::vector<OperationDetail
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_FAT16 ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_FAT16 ) ) ) ) ;
if ( ! execute_command( "mkdosfs -F16 -v " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkdosfs -F16 -v " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -124,7 +125,7 @@ bool fat16::Check_Repair( const Partition & partition, std::vector<OperationDeta
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
exit_status = execute_command( "dosfsck -a -w -v " + partition .partition, exit_status = execute_command( "dosfsck -a -w -v " + partition .get_path(),
operation_details .back() .sub_details ) ; operation_details .back() .sub_details ) ;
if ( exit_status == 0 || exit_status == 1 ) if ( exit_status == 0 || exit_status == 1 )
{ {

View File

@ -21,7 +21,7 @@
namespace GParted namespace GParted
{ {
FS fat32::get_filesystem_support( ) FS fat32::get_filesystem_support()
{ {
FS fs ; FS fs ;
fs .filesystem = GParted::FS_FAT32 ; fs .filesystem = GParted::FS_FAT32 ;
@ -51,11 +51,11 @@ FS fat32::get_filesystem_support( )
void fat32::Set_Used_Sectors( Partition & partition ) void fat32::Set_Used_Sectors( Partition & partition )
{ {
exit_status = Utils::execute_command( "dosfsck -a -v " + partition .partition, output, error, true ) ; exit_status = Utils::execute_command( "dosfsck -a -v " + partition .get_path(), output, error, true ) ;
if ( exit_status == 0 || exit_status == 1 ) if ( exit_status == 0 || exit_status == 1 )
{ {
//free clusters //free clusters
index = output .find( ",", output .find( partition .partition ) + partition .partition .length() ) +1 ; index = output .find( ",", output .find( partition .get_path() ) + partition .get_path() .length() ) +1 ;
if ( index < output .length() && sscanf( output .substr( index ) .c_str(), "%Ld/%Ld", &S, &N ) == 2 ) if ( index < output .length() && sscanf( output .substr( index ) .c_str(), "%Ld/%Ld", &S, &N ) == 2 )
N -= S ; N -= S ;
else else
@ -79,7 +79,7 @@ bool fat32::Create( const Partition & new_partition, std::vector<OperationDetail
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_FAT32 ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_FAT32 ) ) ) ) ;
if ( ! execute_command( "mkdosfs -F32 -v " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkdosfs -F32 -v " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -123,7 +123,7 @@ bool fat32::Check_Repair( const Partition & partition, std::vector<OperationDeta
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
exit_status = execute_command( "dosfsck -a -w -v " + partition .partition, exit_status = execute_command( "dosfsck -a -w -v " + partition .get_path(),
operation_details .back() .sub_details ) ; operation_details .back() .sub_details ) ;
if ( exit_status == 0 || exit_status == 1 ) if ( exit_status == 0 || exit_status == 1 )
{ {

View File

@ -50,7 +50,7 @@ bool hfs::Create( const Partition & new_partition, std::vector<OperationDetails>
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_HFS ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_HFS ) ) ) ) ;
if ( ! execute_command( "hformat " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "hformat " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;

View File

@ -68,7 +68,7 @@ FS jfs::get_filesystem_support()
void jfs::Set_Used_Sectors( Partition & partition ) void jfs::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( "echo dm | jfs_debugfs " + partition .partition, output, error, true ) ) if ( ! Utils::execute_command( "echo dm | jfs_debugfs " + partition .get_path(), output, error, true ) )
{ {
//blocksize //blocksize
index = output .find( "Block Size:" ) ; index = output .find( "Block Size:" ) ;
@ -95,7 +95,7 @@ bool jfs::Create( const Partition & new_partition, std::vector<OperationDetails>
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_JFS ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_JFS ) ) ) ) ;
if ( ! execute_command( "mkfs.jfs -q " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkfs.jfs -q " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -129,9 +129,9 @@ bool jfs::Resize( const Partition & partition_new,
//mount partition //mount partition
operation_details .back() .sub_details .push_back( operation_details .back() .sub_details .push_back(
OperationDetails( String::ucompose( _("mount %1 on %2"), partition_new .partition, TEMP_MP ) ) ) ; OperationDetails( String::ucompose( _("mount %1 on %2"), partition_new .get_path(), TEMP_MP ) ) ) ;
if ( ! execute_command( "mount -v -t jfs " + partition_new .partition + " " + TEMP_MP, if ( ! execute_command( "mount -v -t jfs " + partition_new .get_path() + " " + TEMP_MP,
operation_details .back() .sub_details .back() .sub_details ) ) operation_details .back() .sub_details .back() .sub_details ) )
{ {
operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ;
@ -139,9 +139,9 @@ bool jfs::Resize( const Partition & partition_new,
//remount the partition to resize the filesystem //remount the partition to resize the filesystem
operation_details .back() .sub_details .push_back( operation_details .back() .sub_details .push_back(
OperationDetails( String::ucompose( _("remount %1 on %2 with the 'resize' flag enabled"), OperationDetails( String::ucompose( _("remount %1 on %2 with the 'resize' flag enabled"),
partition_new .partition, TEMP_MP ) ) ) ; partition_new .get_path(), TEMP_MP ) ) ) ;
if ( ! execute_command( "mount -v -t jfs -o remount,resize " + partition_new .partition + " " + TEMP_MP, if ( ! execute_command( "mount -v -t jfs -o remount,resize " + partition_new .get_path() + " " + TEMP_MP,
operation_details .back() .sub_details .back() .sub_details ) ) operation_details .back() .sub_details .back() .sub_details ) )
{ {
operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ;
@ -154,9 +154,9 @@ bool jfs::Resize( const Partition & partition_new,
//and unmount it... //and unmount it...
operation_details .back() .sub_details .push_back( operation_details .back() .sub_details .push_back(
OperationDetails( String::ucompose( _("unmount %1"), partition_new .partition ) ) ) ; OperationDetails( String::ucompose( _("unmount %1"), partition_new .get_path() ) ) ) ;
if ( ! execute_command( "umount -v " + partition_new .partition, if ( ! execute_command( "umount -v " + partition_new .get_path(),
operation_details .back() .sub_details .back() .sub_details ) ) operation_details .back() .sub_details .back() .sub_details ) )
{ {
operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ;
@ -211,9 +211,7 @@ bool jfs::Copy( const Glib::ustring & src_part_path,
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
Partition partition ; return Resize( Partition( dest_part_path ), operation_details, true ) ;
partition .partition = dest_part_path ;
return Resize( partition, operation_details, true ) ;
} }
operation_details .back() .status = OperationDetails::ERROR ; operation_details .back() .status = OperationDetails::ERROR ;
@ -224,7 +222,7 @@ bool jfs::Check_Repair( const Partition & partition, std::vector<OperationDetail
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
exit_status = execute_command( "jfs_fsck -f " + partition .partition, operation_details .back() .sub_details ) ; exit_status = execute_command( "jfs_fsck -f " + partition .get_path(), operation_details .back() .sub_details ) ;
if ( exit_status == 0 || exit_status == 1 ) if ( exit_status == 0 || exit_status == 1 )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;

View File

@ -51,7 +51,7 @@ bool linux_swap::Create( const Partition & new_partition, std::vector<OperationD
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_LINUX_SWAP ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_LINUX_SWAP ) ) ) ) ;
if ( ! execute_command( "mkswap " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkswap " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;

View File

@ -53,7 +53,7 @@ FS ntfs::get_filesystem_support()
void ntfs::Set_Used_Sectors( Partition & partition ) void ntfs::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( "ntfscluster --force " + partition .partition, output, error, true ) ) if ( ! Utils::execute_command( "ntfscluster --force " + partition .get_path(), output, error, true ) )
{ {
index = output .find( "sectors of free space" ) ; index = output .find( "sectors of free space" ) ;
if ( index >= output .length() || if ( index >= output .length() ||
@ -73,7 +73,7 @@ bool ntfs::Create( const Partition & new_partition, std::vector<OperationDetails
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_NTFS ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_NTFS ) ) ) ) ;
if ( ! execute_command( "mkntfs -Q -vv " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkntfs -Q -vv " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -95,7 +95,7 @@ bool ntfs::Resize( const Partition & partition_new,
operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ; operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ;
bool return_value = false ; bool return_value = false ;
Glib::ustring str_temp = "ntfsresize -P --force --force " + partition_new .partition ; Glib::ustring str_temp = "ntfsresize -P --force --force " + partition_new .get_path() ;
if ( ! fill_partition ) if ( ! fill_partition )
{ {
@ -146,9 +146,7 @@ bool ntfs::Copy( const Glib::ustring & src_part_path,
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
Partition partition ; return Resize( Partition( dest_part_path ), operation_details, true ) ;
partition .partition = dest_part_path ;
return Resize( partition, operation_details, true ) ;
} }
operation_details .back() .status = OperationDetails::ERROR ; operation_details .back() .status = OperationDetails::ERROR ;
@ -159,7 +157,7 @@ bool ntfs::Check_Repair( const Partition & partition, std::vector<OperationDetai
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
if ( ! execute_command( "ntfsresize -P -i -f -v " + partition .partition, if ( ! execute_command( "ntfsresize -P -i -f -v " + partition .get_path(),
operation_details .back() .sub_details ) ) operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;

View File

@ -45,7 +45,7 @@ FS reiser4::get_filesystem_support()
void reiser4::Set_Used_Sectors( Partition & partition ) void reiser4::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( "debugfs.reiser4 " + partition .partition, output, error, true ) ) if ( ! Utils::execute_command( "debugfs.reiser4 " + partition .get_path(), output, error, true ) )
{ {
index = output .find( "free blocks" ) ; index = output .find( "free blocks" ) ;
if ( index >= output .length() || if ( index >= output .length() ||
@ -70,7 +70,7 @@ bool reiser4::Create( const Partition & new_partition, std::vector<OperationDeta
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_REISER4 ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_REISER4 ) ) ) ) ;
if ( ! execute_command( "mkfs.reiser4 --yes " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkfs.reiser4 --yes " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -100,7 +100,7 @@ bool reiser4::Check_Repair( const Partition & partition, std::vector<OperationDe
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
if ( ! execute_command( "fsck.reiser4 --yes --fix " + partition .partition, if ( ! execute_command( "fsck.reiser4 --yes --fix " + partition .get_path(),
operation_details .back() .sub_details ) ) operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;

View File

@ -55,7 +55,7 @@ FS reiserfs::get_filesystem_support()
void reiserfs::Set_Used_Sectors( Partition & partition ) void reiserfs::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( "debugreiserfs " + partition .partition, output, error, true ) ) if ( ! Utils::execute_command( "debugreiserfs " + partition .get_path(), output, error, true ) )
{ {
index = output .find( "Blocksize" ) ; index = output .find( "Blocksize" ) ;
if ( index >= output .length() || if ( index >= output .length() ||
@ -80,7 +80,7 @@ bool reiserfs::Create( const Partition & new_partition, std::vector<OperationDet
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_REISERFS ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_REISERFS ) ) ) ) ;
if ( ! execute_command( "mkreiserfs -f " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkreiserfs -f " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -101,7 +101,7 @@ bool reiserfs::Resize( const Partition & partition_new,
else else
operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ; operation_details .push_back( OperationDetails( _("resize the filesystem") ) ) ;
Glib::ustring str_temp = "echo y | resize_reiserfs " + partition_new .partition ; Glib::ustring str_temp = "echo y | resize_reiserfs " + partition_new .get_path() ;
if ( ! fill_partition ) if ( ! fill_partition )
{ {
@ -134,9 +134,7 @@ bool reiserfs::Copy( const Glib::ustring & src_part_path,
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
Partition partition ; return Resize( Partition( dest_part_path ), operation_details, true ) ;
partition .partition = dest_part_path ;
return Resize( partition, operation_details, true ) ;
} }
operation_details .back() .status = OperationDetails::ERROR ; operation_details .back() .status = OperationDetails::ERROR ;
@ -145,9 +143,10 @@ bool reiserfs::Copy( const Glib::ustring & src_part_path,
bool reiserfs::Check_Repair( const Partition & partition, std::vector<OperationDetails> & operation_details ) bool reiserfs::Check_Repair( const Partition & partition, std::vector<OperationDetails> & operation_details )
{ {
//FIXME: change this description to 'check filesystem on /dev/blabla for er.. etc..'
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
exit_status = execute_command( "reiserfsck --y --fix-fixable " + partition .partition, exit_status = execute_command( "reiserfsck --y --fix-fixable " + partition .get_path(),
operation_details .back() .sub_details ) ; operation_details .back() .sub_details ) ;
if ( exit_status == 0 || exit_status == 1 || exit_status == 256 ) if ( exit_status == 0 || exit_status == 1 || exit_status == 256 )
{ {

View File

@ -70,7 +70,7 @@ FS xfs::get_filesystem_support()
void xfs::Set_Used_Sectors( Partition & partition ) void xfs::Set_Used_Sectors( Partition & partition )
{ {
if ( ! Utils::execute_command( if ( ! Utils::execute_command(
"xfs_db -c 'sb 0' -c 'print blocksize' -c 'print fdblocks' -r " + partition .partition, "xfs_db -c 'sb 0' -c 'print blocksize' -c 'print fdblocks' -r " + partition .get_path(),
output, output,
error, error,
true ) ) true ) )
@ -97,7 +97,7 @@ bool xfs::Create( const Partition & new_partition, std::vector<OperationDetails>
_("create new %1 filesystem"), _("create new %1 filesystem"),
Utils::Get_Filesystem_String( GParted::FS_XFS ) ) ) ) ; Utils::Get_Filesystem_String( GParted::FS_XFS ) ) ) ) ;
if ( ! execute_command( "mkfs.xfs -f " + new_partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command( "mkfs.xfs -f " + new_partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;
@ -131,9 +131,9 @@ bool xfs::Resize( const Partition & partition_new,
//mount partition //mount partition
operation_details .back() .sub_details .push_back( operation_details .back() .sub_details .push_back(
OperationDetails( String::ucompose( _("mount %1 on %2"), partition_new .partition, TEMP_MP ) ) ) ; OperationDetails( String::ucompose( _("mount %1 on %2"), partition_new .get_path(), TEMP_MP ) ) ) ;
if ( ! execute_command( "mount -v -t xfs " + partition_new .partition + " " + TEMP_MP, if ( ! execute_command( "mount -v -t xfs " + partition_new .get_path() + " " + TEMP_MP,
operation_details .back() .sub_details .back() .sub_details ) ) operation_details .back() .sub_details .back() .sub_details ) )
{ {
operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ;
@ -154,9 +154,9 @@ bool xfs::Resize( const Partition & partition_new,
//and unmount it... //and unmount it...
operation_details .back() .sub_details .push_back( operation_details .back() .sub_details .push_back(
OperationDetails( String::ucompose( _("unmount %1"), partition_new .partition ) ) ) ; OperationDetails( String::ucompose( _("unmount %1"), partition_new .get_path() ) ) ) ;
if ( ! execute_command( "umount -v " + partition_new .partition, if ( ! execute_command( "umount -v " + partition_new .get_path(),
operation_details .back() .sub_details .back() .sub_details ) ) operation_details .back() .sub_details .back() .sub_details ) )
{ {
operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .sub_details .back() .status = OperationDetails::SUCCES ;
@ -212,8 +212,7 @@ bool xfs::Copy( const Glib::ustring & src_part_path,
Glib::ustring DST = Glib::get_tmp_dir() + "/gparted_tmp_xfs_dest_mountpoint" ; Glib::ustring DST = Glib::get_tmp_dir() + "/gparted_tmp_xfs_dest_mountpoint" ;
//create xfs filesystem on destination.. //create xfs filesystem on destination..
Partition partition ; Partition partition( dest_part_path ) ;
partition .partition = dest_part_path ;
if ( Create( partition, operation_details .back() .sub_details ) ) if ( Create( partition, operation_details .back() .sub_details ) )
{ {
//create source mountpoint... //create source mountpoint...
@ -358,7 +357,7 @@ bool xfs::Check_Repair( const Partition & partition, std::vector<OperationDetail
{ {
operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ; operation_details .push_back( OperationDetails( _("check filesystem for errors and (if possible) fix them") ) ) ;
if ( ! execute_command ( "xfs_repair -v " + partition .partition, operation_details .back() .sub_details ) ) if ( ! execute_command ( "xfs_repair -v " + partition .get_path(), operation_details .back() .sub_details ) )
{ {
operation_details .back() .status = OperationDetails::SUCCES ; operation_details .back() .status = OperationDetails::SUCCES ;
return true ; return true ;