[gparted] Add whole_device flag to the partition object (#743181)
- From: Curtis Gedak <gedakc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gparted] Add whole_device flag to the partition object (#743181)
- Date: Mon, 9 Mar 2015 17:10:35 +0000 (UTC)
commit 5098744f9aa958ba18d2a4657ea4345e275c885b
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date: Sun Jan 4 11:29:01 2015 +0000
Add whole_device flag to the partition object (#743181)
Need to be able to take different actions in the GParted_Core partition
manipulation methods and in Win_GParted UI methods to deal with
libparted supported partitions or whole disk devices without a partition
table. Add boolean whole_device to the partition object and set
appropriately to allow for this.
Bug 743181 - Add unpartitioned drive read-write support
include/Partition.h | 33 ++++++++++++++++--------------
src/Dialog_Partition_New.cc | 25 ++++++++++++-----------
src/Dialog_Rescue_Data.cc | 2 +-
src/GParted_Core.cc | 46 +++++++++++++++++++++++-------------------
src/Operation.cc | 2 +-
src/Partition.cc | 39 ++++++++++++++++++++---------------
src/Win_GParted.cc | 32 +++++++++++++++--------------
7 files changed, 97 insertions(+), 82 deletions(-)
---
diff --git a/include/Partition.h b/include/Partition.h
index 132b709..4419b23 100644
--- a/include/Partition.h
+++ b/include/Partition.h
@@ -60,16 +60,17 @@ public:
void Reset() ;
//simple Set-functions. only for convenience, since most members are public
- void Set( const Glib::ustring & device_path,
- const Glib::ustring & partition,
- int partition_number,
- PartitionType type,
- FILESYSTEM filesystem,
- Sector sector_start,
- Sector sector_end,
- Byte_Value sector_size,
- bool inside_extended,
- bool busy ) ;
+ void Set( const Glib::ustring & device_path,
+ const Glib::ustring & partition,
+ int partition_number,
+ PartitionType type,
+ bool whole_device,
+ FILESYSTEM filesystem,
+ Sector sector_start,
+ Sector sector_end,
+ Byte_Value sector_size,
+ bool inside_extended,
+ bool busy );
void set_sector_usage( Sector sectors_fs_size, Sector sectors_fs_unused ) ;
bool sector_usage_known() const ;
@@ -79,11 +80,12 @@ public:
Sector get_sectors_unallocated() const ;
void get_usage_triple( int imax, int & i1, int & i2, int & i3 ) const ;
- void Set_Unallocated( const Glib::ustring & device_path,
- Sector sector_start,
- Sector sector_end,
- Byte_Value sector_size,
- bool inside_extended );
+ void Set_Unallocated( const Glib::ustring & device_path,
+ bool whole_device,
+ Sector sector_start,
+ Sector sector_end,
+ Byte_Value sector_size,
+ bool inside_extended );
//update partition number (used when a logical partition is deleted)
void Update_Number( int new_number );
@@ -112,6 +114,7 @@ public:
Glib::ustring device_path ;
int partition_number;
PartitionType type;// UNALLOCATED, PRIMARY, LOGICAL, etc...
+ bool whole_device; // Is this a virtual partition spanning a whole unpartitioned disk device?
PartitionStatus status; //STAT_REAL, STAT_NEW, etc..
PartitionAlignment alignment; //ALIGN_CYLINDER, ALIGN_STRICT, etc
FILESYSTEM filesystem ;
diff --git a/src/Dialog_Partition_New.cc b/src/Dialog_Partition_New.cc
index 3f66abf..cd12407 100644
--- a/src/Dialog_Partition_New.cc
+++ b/src/Dialog_Partition_New.cc
@@ -193,13 +193,13 @@ Partition Dialog_Partition_New::Get_New_Partition( Byte_Value sector_size )
new_end = selected_partition.sector_end ;
part_temp .status = GParted::STAT_NEW ;
- part_temp .Set( selected_partition .device_path,
- String::ucompose( _("New Partition #%1"), new_count ),
- new_count, part_type,
- FILESYSTEMS[ optionmenu_filesystem .get_history() ] .filesystem,
- new_start, new_end,
- sector_size,
- selected_partition .inside_extended, false ) ;
+ part_temp.Set( selected_partition.device_path,
+ String::ucompose( _("New Partition #%1"), new_count ),
+ new_count, part_type, selected_partition.whole_device,
+ FILESYSTEMS[optionmenu_filesystem.get_history()].filesystem,
+ new_start, new_end,
+ sector_size,
+ selected_partition.inside_extended, false );
//Retrieve Label info
part_temp.set_filesystem_label( Utils::trim( entry.get_text() ) );
@@ -214,11 +214,12 @@ Partition Dialog_Partition_New::Get_New_Partition( Byte_Value sector_size )
if ( part_temp .type == GParted::TYPE_EXTENDED )
{
Partition UNALLOCATED ;
- UNALLOCATED .Set_Unallocated( part_temp .device_path,
- part_temp .sector_start,
- part_temp .sector_end,
- sector_size,
- true ) ;
+ UNALLOCATED.Set_Unallocated( part_temp.device_path,
+ part_temp.whole_device,
+ part_temp.sector_start,
+ part_temp.sector_end,
+ sector_size,
+ true );
part_temp .logicals .push_back( UNALLOCATED ) ;
}
diff --git a/src/Dialog_Rescue_Data.cc b/src/Dialog_Rescue_Data.cc
index 9754270..956fe95 100644
--- a/src/Dialog_Rescue_Data.cc
+++ b/src/Dialog_Rescue_Data.cc
@@ -429,7 +429,7 @@ void Dialog_Rescue_Data::read_partitions_from_buffer()
}
part.Set(dev_path, part_path, part_num,
- type, fs, sec_start, sec_end, sec_size, false, false);
+ type, false, fs, sec_start, sec_end, sec_size, false, false);
this->partitions.push_back(part);
}
diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
index eba8526..d52ead2 100644
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -363,6 +363,7 @@ void GParted_Core::set_devices_thread( std::vector<Device> * pdevices )
Partition partition_temp;
partition_temp.Set_Unallocated( temp_device .get_path(),
+ true,
0LL,
temp_device .length - 1LL,
temp_device .sector_size,
@@ -1152,16 +1153,17 @@ void GParted_Core::set_device_partitions( Device & device, PedDevice* lp_device,
partition_is_busy = is_busy( filesystem, partition_path ) ;
}
- partition_temp .Set( device .get_path(),
- partition_path,
- lp_partition ->num,
- lp_partition ->type == 0 ? GParted::TYPE_PRIMARY :
GParted::TYPE_LOGICAL,
- filesystem,
- lp_partition ->geom .start,
- lp_partition ->geom .end,
- device .sector_size,
- lp_partition ->type,
- partition_is_busy ) ;
+ partition_temp.Set( device .get_path(),
+ partition_path,
+ lp_partition->num,
+ ( lp_partition->type == 0 ) ? TYPE_PRIMARY : TYPE_LOGICAL,
+ false,
+ filesystem,
+ lp_partition->geom.start,
+ lp_partition->geom.end,
+ device.sector_size,
+ lp_partition->type,
+ partition_is_busy );
partition_temp .add_paths( pp_info .get_alternate_paths( partition_temp
.get_path() ) ) ;
set_flags( partition_temp, lp_partition ) ;
@@ -1172,16 +1174,17 @@ void GParted_Core::set_device_partitions( Device & device, PedDevice* lp_device,
break ;
case PED_PARTITION_EXTENDED:
- partition_temp .Set( device .get_path(),
- partition_path,
- lp_partition ->num,
- GParted::TYPE_EXTENDED,
- GParted::FS_EXTENDED,
- lp_partition ->geom .start,
- lp_partition ->geom .end,
- device .sector_size,
- false,
- false ) ;
+ partition_temp.Set( device.get_path(),
+ partition_path,
+ lp_partition->num,
+ TYPE_EXTENDED,
+ false,
+ FS_EXTENDED,
+ lp_partition->geom.start,
+ lp_partition->geom.end,
+ device.sector_size,
+ false,
+ false );
partition_temp .add_paths( pp_info .get_alternate_paths( partition_temp
.get_path() ) ) ;
set_flags( partition_temp, lp_partition ) ;
@@ -1261,6 +1264,7 @@ void GParted_Core::set_device_one_partition( Device & device, PedDevice * lp_dev
path,
1,
TYPE_PRIMARY,
+ true,
fstype,
0LL,
device.length - 1LL,
@@ -1556,7 +1560,7 @@ void GParted_Core::insert_unallocated( const Glib::ustring & device_path,
bool inside_extended )
{
Partition partition_temp ;
- partition_temp .Set_Unallocated( device_path, 0, 0, sector_size, inside_extended ) ;
+ partition_temp.Set_Unallocated( device_path, false, 0LL, 0LL, sector_size, inside_extended );
//if there are no partitions at all..
if ( partitions .empty() )
diff --git a/src/Operation.cc b/src/Operation.cc
index 21e244d..b6484a3 100644
--- a/src/Operation.cc
+++ b/src/Operation.cc
@@ -45,7 +45,7 @@ int Operation::find_index_extended( const std::vector<Partition> & partitions )
void Operation::insert_unallocated( std::vector<Partition> & partitions, Sector start, Sector end,
Byte_Value sector_size, bool inside_extended )
{
Partition UNALLOCATED ;
- UNALLOCATED .Set_Unallocated( device .get_path(), 0, 0, sector_size, inside_extended ) ;
+ UNALLOCATED.Set_Unallocated( device.get_path(), false, 0LL, 0LL, sector_size, inside_extended );
//if there are no partitions at all..
if ( partitions .empty() )
diff --git a/src/Partition.cc b/src/Partition.cc
index c51a73b..403f9ec 100644
--- a/src/Partition.cc
+++ b/src/Partition.cc
@@ -38,6 +38,7 @@ void Partition::Reset()
messages .clear() ;
status = GParted::STAT_REAL ;
type = GParted::TYPE_UNALLOCATED ;
+ whole_device = false;
alignment = ALIGN_STRICT ;
filesystem = GParted::FS_UNALLOCATED ;
have_filesystem_label = false;
@@ -55,16 +56,17 @@ void Partition::Reset()
mountpoints .clear() ;
}
-void Partition::Set( const Glib::ustring & device_path,
- const Glib::ustring & partition,
- int partition_number,
- PartitionType type,
- FILESYSTEM filesystem,
- Sector sector_start,
- Sector sector_end,
- Byte_Value sector_size,
- bool inside_extended,
- bool busy )
+void Partition::Set( const Glib::ustring & device_path,
+ const Glib::ustring & partition,
+ int partition_number,
+ PartitionType type,
+ bool whole_device,
+ FILESYSTEM filesystem,
+ Sector sector_start,
+ Sector sector_end,
+ Byte_Value sector_size,
+ bool inside_extended,
+ bool busy )
{
this ->device_path = device_path ;
@@ -72,6 +74,7 @@ void Partition::Set( const Glib::ustring & device_path,
this ->partition_number = partition_number;
this ->type = type;
+ this->whole_device = whole_device;
this ->filesystem = filesystem;
this ->sector_start = sector_start;
this ->sector_end = sector_end;
@@ -163,18 +166,20 @@ Sector Partition::get_sectors_unallocated() const
}
void Partition::Set_Unallocated( const Glib::ustring & device_path,
- Sector sector_start,
- Sector sector_end,
- Byte_Value sector_size,
- bool inside_extended )
+ bool whole_device,
+ Sector sector_start,
+ Sector sector_end,
+ Byte_Value sector_size,
+ bool inside_extended )
{
Reset() ;
Set( device_path,
- Utils::get_filesystem_string( GParted::FS_UNALLOCATED ),
+ Utils::get_filesystem_string( FS_UNALLOCATED ),
-1,
- GParted::TYPE_UNALLOCATED,
- GParted::FS_UNALLOCATED,
+ TYPE_UNALLOCATED,
+ whole_device,
+ FS_UNALLOCATED,
sector_start,
sector_end,
sector_size,
diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc
index 057e530..8e5def1 100644
--- a/src/Win_GParted.cc
+++ b/src/Win_GParted.cc
@@ -1644,11 +1644,12 @@ void Win_GParted::activate_resize()
//And add the new partition to the end of the operations list
//change 'selected_partition' into a suitable 'partition_original')
- selected_partition .Set_Unallocated( devices[ current_device ]
.get_path(),
- selected_partition .sector_start,
- selected_partition .sector_end,
- devices[current_device]
.sector_size,
- selected_partition
.inside_extended ) ;
+ selected_partition.Set_Unallocated(
devices[current_device].get_path(),
+ selected_partition.whole_device,
+ selected_partition.sector_start,
+ selected_partition.sector_end,
+
devices[current_device].sector_size,
+
selected_partition.inside_extended );
Operation * operation = new OperationCreate( devices[ current_device
],
selected_partition,
@@ -2020,16 +2021,17 @@ void Win_GParted::activate_format( GParted::FILESYSTEM new_fs )
//ok we made it. lets create an fitting partition object
Partition part_temp ;
- part_temp .Set( devices[ current_device ] .get_path(),
- selected_partition .get_path(),
- selected_partition .partition_number,
- selected_partition .type,
- new_fs,
- selected_partition .sector_start,
- selected_partition .sector_end,
- devices[ current_device ] .sector_size,
- selected_partition .inside_extended,
- false ) ;
+ part_temp.Set( devices[current_device].get_path(),
+ selected_partition.get_path(),
+ selected_partition.partition_number,
+ selected_partition.type,
+ selected_partition.whole_device,
+ new_fs,
+ selected_partition.sector_start,
+ selected_partition.sector_end,
+ devices[current_device].sector_size,
+ selected_partition.inside_extended,
+ false );
//Leave sector usage figures to new Partition object defaults of
// -1, -1, 0 (_used, _unused, _unallocated) representing unknown.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]