Fix minor cylinder alignment rounding error (size < 1 cylinder)

Previously when creating a new partition on a device with 512
byte sectors with 7 MiB chosen and cylinder alignment, the
snap_to_cylinder logic would round up to 2 cylinders (~15.69
MiB), instead of the correct 1 cylinder (~7.84 MiB).
This commit is contained in:
Curtis Gedak 2011-01-15 14:46:18 -07:00
parent 6ae39268f2
commit dd1db44639
1 changed files with 6 additions and 6 deletions

View File

@ -365,10 +365,10 @@ bool GParted_Core::snap_to_cylinder( const Device & device, Partition & partitio
{ {
Sector diff = 0; Sector diff = 0;
//Determine if partition size is less than a disk cylinder //Determine if partition size is less than half a disk cylinder
bool less_than_cylinder = false; bool less_than_half_cylinder = false;
if ( ( partition .sector_end - partition .sector_start ) < device .cylsize ) if ( ( partition .sector_end - partition .sector_start ) < ( device .cylsize / 2 ) )
less_than_cylinder = true; less_than_half_cylinder = true;
if ( partition.type == TYPE_LOGICAL || if ( partition.type == TYPE_LOGICAL ||
partition.sector_start == device .sectors partition.sector_start == device .sectors
@ -393,7 +393,7 @@ bool GParted_Core::snap_to_cylinder( const Device & device, Partition & partitio
} }
if ( diff && ! partition .strict_start ) if ( diff && ! partition .strict_start )
{ {
if ( diff < ( device .cylsize / 2 ) || less_than_cylinder ) if ( diff < ( device .cylsize / 2 ) || less_than_half_cylinder )
partition .sector_start -= diff ; partition .sector_start -= diff ;
else else
partition .sector_start += (device .cylsize - diff ) ; partition .sector_start += (device .cylsize - diff ) ;
@ -402,7 +402,7 @@ bool GParted_Core::snap_to_cylinder( const Device & device, Partition & partitio
diff = (partition .sector_end +1) % device .cylsize ; diff = (partition .sector_end +1) % device .cylsize ;
if ( diff ) if ( diff )
{ {
if ( diff < ( device .cylsize / 2 ) && ! less_than_cylinder ) if ( diff < ( device .cylsize / 2 ) && ! less_than_half_cylinder )
partition .sector_end -= diff ; partition .sector_end -= diff ;
else else
partition .sector_end += (device .cylsize - diff ) ; partition .sector_end += (device .cylsize - diff ) ;