Create and use general find_extended_partition() function
The Operation class already provided find_index_extended() method and was used in the Operation and derived classes where required. It returns the index to the extended partition in the PartitionVector object, or -1 when no extended partition exists. There were several cases of the same functionality being open coded in GParted_Core and Win_GParted. Therefore move the implementation to find_extended_partition() in PartitionVector compilation unit and use this implementation everywhere.
This commit is contained in:
parent
786a53b43c
commit
aa98107706
|
@ -66,7 +66,6 @@ public:
|
||||||
protected:
|
protected:
|
||||||
int find_index_original( const PartitionVector & partitions );
|
int find_index_original( const PartitionVector & partitions );
|
||||||
int find_index_new( const PartitionVector & partitions );
|
int find_index_new( const PartitionVector & partitions );
|
||||||
int find_index_extended( const PartitionVector & partitions );
|
|
||||||
void insert_unallocated( PartitionVector & partitions,
|
void insert_unallocated( PartitionVector & partitions,
|
||||||
Sector start, Sector end, Byte_Value sector_size, bool inside_extended );
|
Sector start, Sector end, Byte_Value sector_size, bool inside_extended );
|
||||||
void substitute_new( PartitionVector & partitions );
|
void substitute_new( PartitionVector & partitions );
|
||||||
|
|
|
@ -77,6 +77,8 @@ private:
|
||||||
std::vector<Partition *> v;
|
std::vector<Partition *> v;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int find_extended_partition( const PartitionVector & partitions );
|
||||||
|
|
||||||
} //GParted
|
} //GParted
|
||||||
|
|
||||||
#endif /* GPARTED_PARTITIONVECTOR_H */
|
#endif /* GPARTED_PARTITIONVECTOR_H */
|
||||||
|
|
|
@ -380,17 +380,10 @@ bool GParted_Core::snap_to_mebibyte( const Device & device, Partition & partitio
|
||||||
// available for any following logical partition Extended Boot Record
|
// available for any following logical partition Extended Boot Record
|
||||||
if ( partition .type == TYPE_EXTENDED )
|
if ( partition .type == TYPE_EXTENDED )
|
||||||
{
|
{
|
||||||
//Locate the extended partition that contains the logical partitions.
|
|
||||||
int index_extended = -1 ;
|
|
||||||
for ( unsigned int t = 0 ; t < device .partitions .size() ; t++ )
|
|
||||||
{
|
|
||||||
if ( device .partitions[ t ] .type == TYPE_EXTENDED )
|
|
||||||
index_extended = t ;
|
|
||||||
}
|
|
||||||
|
|
||||||
//If there is logical partition that starts less than 2 sectors
|
//If there is logical partition that starts less than 2 sectors
|
||||||
// from the start of this partition, then reserve a mebibyte for the EBR.
|
// from the start of this partition, then reserve a mebibyte for the EBR.
|
||||||
if ( index_extended != -1 )
|
int index_extended = find_extended_partition( device.partitions );
|
||||||
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
for ( unsigned int t = 0; t < device .partitions[ index_extended ] .logicals .size(); t++ )
|
for ( unsigned int t = 0; t < device .partitions[ index_extended ] .logicals .size(); t++ )
|
||||||
{
|
{
|
||||||
|
@ -420,17 +413,10 @@ bool GParted_Core::snap_to_mebibyte( const Device & device, Partition & partitio
|
||||||
// required for a following logical partition Extended Boot Record
|
// required for a following logical partition Extended Boot Record
|
||||||
if ( partition .type == TYPE_LOGICAL )
|
if ( partition .type == TYPE_LOGICAL )
|
||||||
{
|
{
|
||||||
//Locate the extended partition that contains the logical partitions.
|
|
||||||
int index_extended = -1 ;
|
|
||||||
for ( unsigned int t = 0 ; t < device .partitions .size() ; t++ )
|
|
||||||
{
|
|
||||||
if ( device .partitions[ t ] .type == TYPE_EXTENDED )
|
|
||||||
index_extended = t ;
|
|
||||||
}
|
|
||||||
|
|
||||||
//If there is a following logical partition that starts less than 2 sectors from
|
//If there is a following logical partition that starts less than 2 sectors from
|
||||||
// the end of this partition, then reserve at least a mebibyte for the EBR.
|
// the end of this partition, then reserve at least a mebibyte for the EBR.
|
||||||
if ( index_extended != -1 )
|
int index_extended = find_extended_partition( device.partitions );
|
||||||
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
for ( unsigned int t = 0; t < device .partitions[ index_extended ] .logicals .size(); t++ )
|
for ( unsigned int t = 0; t < device .partitions[ index_extended ] .logicals .size(); t++ )
|
||||||
{
|
{
|
||||||
|
|
|
@ -81,15 +81,6 @@ int Operation::find_index_new( const PartitionVector & partitions )
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Operation::find_index_extended( const PartitionVector & partitions )
|
|
||||||
{
|
|
||||||
for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
|
|
||||||
if ( partitions[ t ] .type == GParted::TYPE_EXTENDED )
|
|
||||||
return t ;
|
|
||||||
|
|
||||||
return -1 ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Operation::insert_unallocated( PartitionVector & partitions,
|
void Operation::insert_unallocated( PartitionVector & partitions,
|
||||||
Sector start, Sector end, Byte_Value sector_size, bool inside_extended )
|
Sector start, Sector end, Byte_Value sector_size, bool inside_extended )
|
||||||
{
|
{
|
||||||
|
@ -110,7 +101,7 @@ void Operation::substitute_new( PartitionVector & partitions )
|
||||||
|
|
||||||
if ( partition_original->inside_extended )
|
if ( partition_original->inside_extended )
|
||||||
{
|
{
|
||||||
index_extended = find_index_extended( partitions );
|
index_extended = find_extended_partition( partitions );
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
index = find_index_original( partitions[index_extended].logicals );
|
index = find_index_original( partitions[index_extended].logicals );
|
||||||
|
@ -146,7 +137,7 @@ void Operation::insert_new( PartitionVector & partitions )
|
||||||
|
|
||||||
if ( partition_new->inside_extended )
|
if ( partition_new->inside_extended )
|
||||||
{
|
{
|
||||||
index_extended = find_index_extended( partitions );
|
index_extended = find_extended_partition( partitions );
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
index = find_index_new( partitions[index_extended].logicals );
|
index = find_index_new( partitions[index_extended].logicals );
|
||||||
|
|
|
@ -61,8 +61,7 @@ void OperationDelete::apply_to_visual( PartitionVector & partitions )
|
||||||
|
|
||||||
if ( partition_original->inside_extended )
|
if ( partition_original->inside_extended )
|
||||||
{
|
{
|
||||||
index_extended = find_index_extended( partitions ) ;
|
index_extended = find_extended_partition( partitions );
|
||||||
|
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
index = find_index_original( partitions[ index_extended ] .logicals ) ;
|
index = find_index_original( partitions[ index_extended ] .logicals ) ;
|
||||||
|
|
|
@ -151,8 +151,7 @@ void OperationResizeMove::apply_normal_to_visual( PartitionVector & partitions )
|
||||||
|
|
||||||
if ( partition_original->inside_extended )
|
if ( partition_original->inside_extended )
|
||||||
{
|
{
|
||||||
index_extended = find_index_extended( partitions ) ;
|
index_extended = find_extended_partition( partitions );
|
||||||
|
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
index = find_index_original( partitions[ index_extended ] .logicals ) ;
|
index = find_index_original( partitions[ index_extended ] .logicals ) ;
|
||||||
|
@ -191,13 +190,12 @@ void OperationResizeMove::apply_extended_to_visual( PartitionVector & partitions
|
||||||
int index_extended;
|
int index_extended;
|
||||||
|
|
||||||
//stuff OUTSIDE extended partition
|
//stuff OUTSIDE extended partition
|
||||||
index_extended = find_index_extended( partitions ) ;
|
index_extended = find_extended_partition( partitions );
|
||||||
|
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
remove_adjacent_unallocated( partitions, index_extended ) ;
|
remove_adjacent_unallocated( partitions, index_extended ) ;
|
||||||
|
|
||||||
index_extended = find_index_extended( partitions ) ;
|
index_extended = find_extended_partition( partitions );
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
partitions[index_extended].sector_start = partition_new->sector_start;
|
partitions[index_extended].sector_start = partition_new->sector_start;
|
||||||
|
@ -208,8 +206,7 @@ void OperationResizeMove::apply_extended_to_visual( PartitionVector & partitions
|
||||||
}
|
}
|
||||||
|
|
||||||
//stuff INSIDE extended partition
|
//stuff INSIDE extended partition
|
||||||
index_extended = find_index_extended( partitions ) ;
|
index_extended = find_extended_partition( partitions );
|
||||||
|
|
||||||
if ( index_extended >= 0 )
|
if ( index_extended >= 0 )
|
||||||
{
|
{
|
||||||
if ( partitions[ index_extended ] .logicals .size() > 0 &&
|
if ( partitions[ index_extended ] .logicals .size() > 0 &&
|
||||||
|
|
|
@ -90,4 +90,13 @@ void PartitionVector::replace_at( size_type n, const Partition * partition )
|
||||||
v[n] = p;
|
v[n] = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return index of the extended partition or -1 when not found
|
||||||
|
int find_extended_partition( const PartitionVector & partitions )
|
||||||
|
{
|
||||||
|
for ( unsigned int i = 0 ; i < partitions.size() ; i ++ )
|
||||||
|
if ( partitions[i].type == TYPE_EXTENDED )
|
||||||
|
return (int)i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
} //GParted
|
} //GParted
|
||||||
|
|
|
@ -1783,13 +1783,9 @@ void Win_GParted::activate_resize()
|
||||||
g_assert( valid_display_partition_ptr( selected_partition_ptr ) ); // Bug: Not pointing at a valid display partition object
|
g_assert( valid_display_partition_ptr( selected_partition_ptr ) ); // Bug: Not pointing at a valid display partition object
|
||||||
|
|
||||||
PartitionVector * display_partitions_ptr = &display_partitions;
|
PartitionVector * display_partitions_ptr = &display_partitions;
|
||||||
if ( selected_partition_ptr->type == TYPE_LOGICAL )
|
int index_extended = find_extended_partition( display_partitions );
|
||||||
{
|
if ( index_extended >= 0 )
|
||||||
unsigned int ext = 0 ;
|
display_partitions_ptr = &display_partitions[index_extended].logicals;
|
||||||
while ( ext < display_partitions.size() && display_partitions[ext].type != TYPE_EXTENDED )
|
|
||||||
ext++;
|
|
||||||
display_partitions_ptr = &display_partitions[ext].logicals;
|
|
||||||
}
|
|
||||||
|
|
||||||
FS fs_cap = gparted_core.get_fs( selected_partition_ptr->get_filesystem_partition().filesystem );
|
FS fs_cap = gparted_core.get_fs( selected_partition_ptr->get_filesystem_partition().filesystem );
|
||||||
Partition * working_ptn;
|
Partition * working_ptn;
|
||||||
|
@ -2085,15 +2081,7 @@ void Win_GParted::activate_new()
|
||||||
// Check if an extended partition already exist; so that the dialog can
|
// Check if an extended partition already exist; so that the dialog can
|
||||||
// decide whether to allow the creation of the only extended partition
|
// decide whether to allow the creation of the only extended partition
|
||||||
// type or not.
|
// type or not.
|
||||||
bool any_extended = false;
|
bool any_extended = ( find_extended_partition( display_partitions ) >= 0 );
|
||||||
for ( unsigned int i = 0 ; i < display_partitions.size() ; i ++ )
|
|
||||||
{
|
|
||||||
if ( display_partitions[i].type == TYPE_EXTENDED )
|
|
||||||
{
|
|
||||||
any_extended = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Dialog_Partition_New dialog( devices[current_device],
|
Dialog_Partition_New dialog( devices[current_device],
|
||||||
*selected_partition_ptr,
|
*selected_partition_ptr,
|
||||||
any_extended,
|
any_extended,
|
||||||
|
|
Loading…
Reference in New Issue