Commit Graph

58 Commits

Author SHA1 Message Date
Mike Fleetwood 5098744f9a 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
2015-03-09 11:04:13 -06:00
Michael Zimmermann 1f5841b4ad Add support for GPT partition names (#741424)
Embedded devices (Android) use GPT partition names to identify
partitions, instead of file system labels.  Add support for viewing and
changing them.

As partition names are used to provide unique identification they are
never copied when copying the contents of one partition to another.

Note that GNU/Linux uses file system labels, UUIDs or device names for
identification during the boot process and afterwards so while partition
names can be used, they are optional and purely for user information.

Bug 741424 - Add support for GPT partition names
2015-02-01 10:08:23 -07:00
Mike Fleetwood 63aeb150ac Rename member variables and methods in Partition class (#741424)
class Partition:
    have_label    -> have_filesystem_label
    label         -> filesystem_label
    label_known() -> filesystem_label_known()
    get_label()   -> get_filesystem_label()
    set_label()   -> set_filesystem_label()

Bug 741424 - Add support for GPT partition names
2015-02-01 10:08:23 -07:00
Daniel Mustieles 3861b9257b Replace obsolete FSF postal address in copyright notices (#721565)
This is part of parent bug:
    Bug #721455 - Obsolete info in license text on multiple modules

and GNOME Goal:
    https://wiki.gnome.org/Initiatives/GnomeGoals/Proposals

    * verify all source files to make sure they have a license and a
      copyright, and that both are up-to-date

Bug #721565 -  License text contains obsolete FSF postal address
2014-01-26 10:53:23 +00:00
Mike Fleetwood 2b51d87147 Make include guards unique (#539297)
Include guards need to be unique within GParted code and all included
library header files.
    http://en.wikipedia.org/wiki/Include_guard#Difficulties

Use this model for all include guards:
    #ifndef GPARTED_FILE_NAME_H
    #define GPARTED_FILE_NAME_H
    ...
    #endif /* GPARTED_FILE_NAME_H */

Closes Bug #539297 - Make include guards unique
2013-06-05 10:57:39 -06:00
Mike Fleetwood 686ec8f713 Make GParted recognise reading blank file system labels (#685656)
GParted doesn't notice when a file system label is changed to blank.
GParted first calls the file system specific read_label() method.  When
the label is blank read_label() correctly sets partition.label to the
zero length string.  Second GParted_Core::set_device_partitions() treats
the zero length string to mean that the label is unset and calls
FS_Info::get_label() to retrieve it from the cache of blkid output.
Blkid also doesn't notice when the file system label has been changed to
blank so reports the previous label.  Hence GParted displays the
previous file system label.

Fix by making label a private member variable of the class Partition and
providing access methods set_label(), get_label() and label_known()
which track whether the label has been set or not.  This only fixes the
fault for file systems which use file system specific commands to read
the label and when these tools are installed.  Otherwise GParted uses,
or has to fall back on using, the buggy blkid command to read the file
system label.

NOTE:
Many of the file system specific read_label() methods use a tool which
outputs more than just the label and use Utils::regexp_label() to match
leading text and the label itself.  If the surrounding text changes or
disappears altogether to indicated a blank label, regexp_label() doesn't
match anything and returns the zero length string.  This  is exactly
what is required and is passed to set_label() to set the label to blank.

Bug 685656 - GParted doesn't notice when file system label is changed to
             blank
2012-11-04 12:26:09 +00:00
Mike Fleetwood 6c96ab34b3 Simplify calc_usage_triple() interface and rename
Now that every call to calc_usage_triple() just passes usage figures
returned by get_sectors_*(), remove those parameters, call
get_sectors_*() internally and rename to get_usage_triple().
2012-06-26 14:13:31 -06:00
Mike Fleetwood 67f334a8ac Fix minor unallocated space display issue in the Info dialog (#499202)
For specific partition usage values the right hand border of the
partition graphic in the Information dialog would be displayed as grey
rather than the color assigned to the partition.

Steps to reproduce fault:
    Create 1024 MiB partition
    # lvm pvcreate /dev/sda12
    # lvm vgcreate GParted-VG1 /dev/sda12
    View partition information

Fragment from Dialog_Partition_Info::init_drawingarea():
    139  else if ( partition .sector_usage_known() )
    140  {
    141          used        = Utils::round( ( 400 - BORDER *2 ) / ( dlength / partition .get_sectors_used()   ) ) ;
    142          unused      = Utils::round( ( 400 - BORDER *2 ) / ( dlength / partition .get_sectors_unused() ) ) ;
    143          unallocated = 400 - BORDER *2 - used - unused ;
    144  }

For this issue the above values are both exactly x.5 and both round
upwards, resulting in unallocated being -1.
    used        = round((400 - 8*2)/(2097152.0/8192))    = round(1.5)
    unused      = round((400 - 8*2)/(2097152.0/2088960)) = round(382.5)
    unallocated = 400 - 8*2 - 2 - 383 = -1

The simple fix would be to use floor() instead of round() in the
calculation of either used or unused.  The same fix would also need to
be applied in Display_Info() for the calculation of the percentage
figures.  Unfortunately this simple fix can lead to odd figures when the
used or unused is close to zero and floor() or ceil() is effectively
applied rather than round().  For example:
    Size:           227.23 GiB
    Used:           28.00 KiB   ( 1% )
    Unused:         180.00 GiB  ( 79% )
    Unallocated:    47.23 GiB   ( 20% )
Used figure of 28 KiB in 227 GiB partition should be rounded to 0% but
wasn't.

Write Partition::calc_usage_triple() which calculates the "best" figures
by rounding the smaller two figures and subtracts them from the desired
total for the largest figure.  Apply to the calculation of the partition
usage percentage figures in the Information dialog and the partition
usage graphic in the same dialog and the main window.

Bug #499202 - gparted does not see the difference if partition size
              differs from filesystem size
2012-06-26 14:13:31 -06:00
Mike Fleetwood 7ebedc4bb3 Don't show intrinsic unallocated space (#499202)
Most file systems report intrinsic unallocated space using the statvfs()
system call when mounted, but not using their own tools.  They are:
ext2/3/4, fat16/32, hfs, nilfs2, reiserfs and xfs.  Showing either a
little or no unallocated space, depending on whether a file system is
mounted or not, could be confusing to the user.

When all file systems are created filling their partitions the unused
figure reported by statvfs() and their own tools are the same or very
close.  Also the used plus unallocated figure from statvfs() agrees with
the used figure from their own tools.

For all file systems don't display intrinsic unallocated space (that
below the threshold of 2 to 5%), instead include it as used space.  As
soon as the amount of unallocated space becomes significant display it
everywhere and also trigger the warning.

For display purposes always use the new Partition methods:
get_sectors_used(), get_sectors_unused(), and get_sectors_unallocated().
When calculating new usage figures during Paste and Resize/Move
operations directly access sectors_used, sectors_unused and
sectors_unallocated members.

Bug #499202 - gparted does not see the difference if partition size
              differs from filesystem size
2012-06-18 12:41:59 -06:00
Mike Fleetwood 3737224028 Include intrinsic unallocated space for resizing purposes (#499202)
A number of file systems report intrinsic unallocated space even when
they are created filling the partition.  As reported using their own
specific tools, they are: jfs, lvm2 pv and ntfs.  Therefore when
resizing a partition estimate its minimum size to be used sectors plus
any unallocated sectors up to the significant amount.

Bug #499202 - gparted does not see the difference if partition size
              differs from filesystem size
2012-06-18 10:24:29 -06:00
Mike Fleetwood 7ddbc9bd92 Set unallocated space for paste or resize/move operations (#499202)
When pasting a copied partition into free space or move/resizing a
partition set its space utilisation so that any unallocated space within
the partition is displayed correctly before the operation is applied.

NOTE:
If the file system does not support file system resizing the Paste and
Move/Resize dialogs don't allow resizing the partition so the preview
will always be correct, unlike the case in the previous patch:
    Set unallocated space when performing simple operations (#499202)

Also remove the deprecated and no longer used Partition::Set_Unused()
and Partition::set_used() methods.

Bug #499202 - gparted does not see the difference if partition size
              differs from filesystem size
2012-06-18 10:24:29 -06:00
Mike Fleetwood 8093ba2ebd Record unallocated space within a partition (#499202)
Currently GParted assumes that a file system fills its containing
partition.  This is not always true and can occur when resizing is
performed outside of GParted or a resize operation fails.  GParted
doesn't display any information about unallocated space to the user
and in most cases it is simply included in used space.

Add partition unallocated space accounting.  Make GParted record the
unallocated space for mounted file system and display a warning in the
Partition Information dialog when too much unallocated space is found.

Partition::set_sector_usage( fs_size, fs_unused ), is the new preferred
method of recording file system usage because it allows the unallocated
space in a partition to be calculated.  Partition::Set_Unused() and
Partition::set_used() are now deprecated.

NOTES:

1)  Set the minimum unallocated space to be 5% before considering it
    significant to avoid false reporting.  Worst case found was a
    mounted xfs file system in a 100MiB partition, which reports as
    ~4.7% unallocated according to file system size from statvfs().
    However, it reports as having no unallocated space using xfs
    specific tools.

2)  Unallocated space is only a graphical representation for the user.
    GParted must still use relevant tools to resize file systems before
    shrinking the data and can't assume all unallocated space exists
    after the file system at the end of the partition.

Bug #499202 - gparted does not see the difference if partition size
              differs from filesystem size
2012-06-18 10:24:28 -06:00
Mike Fleetwood 8083f11d84 Display LVM2 VGNAME as the PV's mount point (#160787)
As the Mount Point column is being borrowed to display the PV's VGNAME,
also suppress generation of the "Mount on" submenu for LVM2 PVs.

Bug #160787 - lvm support
2012-02-02 10:24:31 -07:00
Curtis Gedak e62a23b5b5 Add partition alignment option to align to MiB (#617409)
Make align to MiB the default setting instead of align to cylinder.

Migrate logic for alignment to cylinder into its own method
snap_to_cylinder, and place common logic in snap_to_alignment.

Add alignment checks for situations where space is needed for Master
Boot Record or Extended Boot Record.

Adjust ranges on spin buttons according to required boot record space.

Copy fix for off by one sector (#596552) from
Dialog_Partition_New::Get_New_Partition to
Dialog_Base_Partition::Get_New_Partition

Enhance resize / move logic for checking locations of nearby logical
partitions to not depend on the partition ordering.

Note: This commit does not include limiting graphic movement according
to required boot record space.
2010-05-20 10:00:14 -06:00
Curtis Gedak 2cdfb4c55a Change partition alignment check box to a drop down menu
Also add signal handler to alignment menu to update file system
minimum size.
This enhancement is to prepare for adding a third alignment
option to align to MiB.
2010-05-09 14:45:26 -06:00
Curtis Gedak 7e2ca14756 Rename get_length method to get_sector_length
This rename is to try to reduce future confusion between
partition length in sectors versus partition length in bytes.
2010-04-28 09:11:44 -06:00
Curtis Gedak fe9ee68385 Create get_byte_length method 2010-04-27 11:28:36 -06:00
Curtis Gedak 74ecd2ed3f Set sector size and add to operation and dialog methods
This change is in preparation for supporting sectors sizes > 512 bytes.
2010-04-19 19:22:31 -06:00
Curtis Gedak 4bcd0a3704 Add device sector size to partition object
The device sector size is needed in all calculations that convert
between sectors and bytes.  The device sector_size is included in
the partition object because this object is used to contain
operation information in addition to actual partitions and
unallocated space.  A second option was considered to pass the
device object to many methods, but this was considered a much
larger task that might not provide significant gains in
maintainability.
2010-04-19 19:06:08 -06:00
Curtis Gedak 8cfb27b718 Cleanup file copyright entries
Restore copyright entries by original author to those of his last
known repository commit titled "released gparted-0.3.4 on
LarryT's request." on Feb 25, 2007.

Add my own copyright entries for files in which I changed source
code.  Files in which I only made spelling changes do not have my
copyright entry added.
2009-11-05 11:08:49 -07:00
Curtis Gedak ad078627d5 Added strict_start indicator
svn path=/trunk/; revision=1069
2009-02-16 19:37:27 +00:00
Curtis Gedak c4bc4430c7 Fixed incorrect spelling of filesystem and mountpoint
svn path=/trunk/; revision=970
2008-11-18 23:58:17 +00:00
Curtis Gedak ed9b5afe36 Added read UUID read display
svn path=/trunk/; revision=961
2008-11-11 17:21:22 +00:00
Bart Hakvoort e3b4a7316b added support for reading volumelabels. Atm we only read ext2/3, but the
* added support for reading volumelabels. Atm we only read ext2/3, but
  the infrastructure for adding the other filesystems is in place.
  It's simply a matter of finding the right commands and parsing the
  output. (see #338528 for more info)
2006-09-12 20:34:33 +00:00
Bart Hakvoort f7ec213481 added test_overlap() perform a readonly testrun before the actual move if
* include/Partition.h,
  src/Partition.cc: added test_overlap()
* include/GParted_Core.h,
  src/GParted_Core.cc: perform a readonly testrun before the actual
  move if destination overlaps source.
2006-09-07 20:31:05 +00:00
Bart Hakvoort 89a42f3f07 added get_sector() use new Partition::get_sector()
* include/Partition.h,
  src/Partition.cc: added get_sector()
* src/GParted_Core.cc: use new Partition::get_sector()
2006-08-01 12:47:03 +00:00
Bart Hakvoort 677a21f50a improved errorhandling a bit. At the initialscan we store errors/warnings
* improved errorhandling a bit. At the initialscan we store
  errors/warnings now in a list per partition and show the in the
  partitioninfo dialog.
  While executing an operation we collect all libparted exceptions in
  a list and attach this list to the operationdetails when everything
  is done.
2006-07-30 15:13:41 +00:00
Bart Hakvoort cf59b71bf4 worked a bit on progressfeedback.. added FIXME
* include/GParted_Core.h,
  src/GParted_Core.cc: worked a bit on progressfeedback..
* include/Partition.h: added FIXME
2006-07-18 21:10:10 +00:00
Bart Hakvoort 70bfe578d4 added set_used() and operator!= it's now possible to copy from partition
* include/Partition.h,
  src/Partition.cc: added set_used() and operator!=
* src/Dialog_Partition_Copy.cc,
  src/GParted_Core.cc,
  src/OperationCopy.cc,
  src/Win_GParted.cc: it's now possible to copy from partition to
  partition. (before this it was only possible to copy to unallocated
  space)
2006-03-29 19:21:42 +00:00
Bart Hakvoort ad9f2126e7 fixed issues with copying (see also #335004) cleanups + added FIXME added
* include/GParted_Core.h,
  src/GParted_Core.cc,
  src/Win_GParted.cc,
  src/ext2.cc,
  src/ext3.cc,
  src/fat16.cc,
  src/fat32.cc,
  src/jfs.cc,
  src/ntfs.cc,
  src/reiserfs.cc: fixed issues with copying (see also #335004)
* include/Operation.h,
  src/Operation.cc: cleanups + added FIXME
* include/Partition.h,
  src/Partition.cc: added clear_mountpoints()
* src/DrawingAreaVisualDisk.cc: added FIXME
2006-03-19 15:30:20 +00:00
Bart Hakvoort 4e57356c34 another change to highlighting of selected partition. deal properly with
* include/DrawingAreaVisualDisk.h,
  src/DrawingAreaVisualDisk.cc: another change to highlighting of
  selected partition.
* include/Partition.h,
  src/Win_GParted.cc: deal properly with just formatted partitions
* src/Operation.cc: added FIXME
2006-03-18 21:38:19 +00:00
Bart Hakvoort 9532c3cad1 Made Partition::mountpoints private
* include/Partition.h,
  src/Dialog_Partition_Info.cc,
  src/GParted_Core.cc,
  src/Partition.cc,
  src/TreeView_Detail.cc,
  src/Win_GParted.cc: Made Partition::mountpoints private
2006-03-15 16:12:11 +00:00
Bart Hakvoort 6d8b169e73 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)
2006-03-14 21:37:47 +00:00
Bart Hakvoort 391ca32a2b in some places i still used MiB's instead of sectors to store sizes. this
* in some places i still used MiB's instead of sectors to store sizes.
  this has been fixed everywhere. Only the spinbuttons still use
  MiB's. I have a few ideas on how to solve this, but i'll take it up
  with #usability first.
2006-02-25 10:09:30 +00:00
Bart Hakvoort c2eb2f7cad store flags in a list instead of a string. cleanups
* include/GParted_Core.h,
  include/Partition.h,
  src/Dialog_Partition_Info.cc,
  src/GParted_Core.cc,
  src/Partition.cc,
  src/TreeView_Detail.cc: store flags in a list instead of a string.
* Makefile.am,
  src/Makefile.am: cleanups
2006-02-17 23:20:28 +00:00
Bart Hakvoort d7a16d3c2f support partitions with multiple mountpoints (see also #330327)
* include/GParted_Core.h,
  include/Partition.h,
  src/Dialog_Partition_Info.cc,
  src/GParted_Core.cc,
  src/Partition.cc,
  src/TreeView_Detail.cc,
  src/Win_GParted.cc: support partitions with multiple mountpoints
  (see also #330327)
2006-02-15 22:32:54 +00:00
Bart Hakvoort a56902a6d3 added FIXME fixed Update_Number()
* include/Partition.h: added FIXME
* src/Partition.cc: fixed Update_Number()
2006-01-26 20:26:25 +00:00
Bart Hakvoort f9ab3cdd3c commented 'ss .imbue( std::locale( "" ) )' (#157871) cleanups allow forced
* src/Utils.cc: commented 'ss .imbue( std::locale( "" ) )' (#157871)
* src/Win_GParted.cc,
  src/TreeView_Detail.cc,
  src/Dialog_Base_Partition.cc: cleanups
* include/Dialog_Partition_New.h,
  include/Partition.h,
  src/Dialog_Partition_New.cc,
  src/GParted_Core.cc,
  src/Partition.cc: allow forced partitionsizes (aka: do not round to
  cylinder). (#169486)
2006-01-07 15:04:42 +00:00
Bart Hakvoort 7052e18d79 replaced 'device_partitions' with 'partitions' use new Device::partitions
* include/Device.h,
  src/Device.cc: replaced 'device_partitions' with 'partitions'
* src/Win_GParted.cc: use new Device::partitions
* include/Partition.h,
  src/Partition.cc: added 'realpath'
* src/Dialog_Partition_Info.cc: use Partition::realpath..
* include/GParted_Core.h,
  src/GParted_Core.cc:use ped_partition_get_path() instead of
  constructing it ourselves. (#325800)
  Also use global maps for mountpoints and shortpaths to prevent
  fileaccess from happening more then once per scan.
2006-01-05 20:01:34 +00:00
Bart Hakvoort 2a972b06b8 added get_length() from now on values >=1024MB are displayed in GB's
* include/Partition.h,
  src/Partition.cc: added get_length()
* include/Utils.h,
  src/Utils.cc,
  src/Dialog_Partition_Info.cc,
  src/Operation.cc,
  src/TreeView_Detail.cc,
  src/VBox_VisualDisk.cc,
  src/Win_GParted.cc: from now on values >=1024MB are displayed in
  GB's (#319840)
2006-01-04 18:54:46 +00:00
Bart Hakvoort 7ef6e3e5c8 emit proper signals for several events. cleanups..
* include/TreeView_Detail.h,
  src/TreeView_Detail.cc,
  include/VBox_VisualDisk.h,
  src/VBox_VisualDisk.cc,
  include/Win_GParted.h,
  src/Win_GParted.cc: emit proper signals for several events.
* include/Partition.h,
  src/Partition.cc: cleanups..
2005-12-24 00:06:05 +00:00
Bart Hakvoort adc76a7686 overloaded operator == rewrote the graphical partitiondisplay. It now
* include/Partition.h,
  src/Partition.cc: overloaded operator ==
* include/VBox_VisualDisk.h,
  src/VBox_VisualDisk.cc: rewrote the graphical partitiondisplay. It
  now supports resizing and the extended partition is also selectable.
  see also #312656
* include/Win_GParted.h,
  src/Win_GParted.cc: use the new graphical partitiondisplay.
* src/TreeView_Detail.cc: minor cleanups
2005-12-22 22:20:55 +00:00
Bart Hakvoort 7aee5aed95 added 'Glib::ustring mountpoint' implemented set_mountpoints() to set
* include/Partition.h,
  src/Partition.cc: added 'Glib::ustring mountpoint'
* include/GParted_Core.h,
  src/GParted_Core.cc: implemented set_mountpoints() to set mountpoint
  in partitions.
* include/Dialog_Partition_Info.h,
  src/Dialog_Partition_Info.cc: use Partition::mountpoint instead of
  finding it ourselves.
2005-12-08 17:03:29 +00:00
Bart Hakvoort 642f0a145b from now on each partition has a reference to it's device. make use of new
* include/Partition.h,
  src/Partition.cc: from now on each partition has a reference to it's
  device.
* src/Win_GParted.cc,
  src/Dialog_Partition_New.cc: make use of new Set() from partition
* include/GParted_Core.h,
  src/GParted_Core.cc: since ped_file_system_clobber() ignored reiser4
  i've implemented a custom 'filesystem signature remover'.
  Also made use of the fact a partition now knows on which device it
  lives.
* src/Operation.cc: the get_string() didn't use
  Get_Filesystem_String() and thus returned faulty strings. Also did
  some cleanups.
2005-12-07 22:44:40 +00:00
Bart Hakvoort 7e4efd3c2e rewrote quite some stuff to use an enum to indentify filesystems instead
* rewrote quite some stuff to use an enum to indentify filesystems
  instead of stringcomparisons.
2005-12-07 11:21:27 +00:00
Bart Hakvoort bd02bca613 P ). Resizing of ext2/3 works perfect now. I've even tested it on the
* Again way too many chances to create a detailed entry (i'm glad i'm the only dev atm :P ).
  Resizing of ext2/3 works perfect now. I've even tested it on the partition holding my SG seasons =)
  Implemented checking of filesystems (only internally used atm).
  Done some overall tweaking, finetuning etc.. release 0.0.7 is getting shape.
2004-11-21 21:49:38 +00:00
Bart Hakvoort 24dccdd8f3 instead of listing all partition in one list, logical partitions are now
* instead of listing all partition in one list, logical partitions are now stored in a sublist in extended partition object.
This makes partitionhandling in gparted more natural and transparant. It also allowed me to clean up this ugly Operation class ;)
2004-11-06 11:55:03 +00:00
Bart Hakvoort 4caae3dc85 removed color_string replaced color_string with Get_Color from Utils.h
* include/Partition.h,
  src/Partition.cc: removed color_string
* src/VBox_VisualDisk.cc,
  src/TreeView_Detail.cc: replaced color_string with Get_Color from Utils.h
2004-10-31 12:06:02 +00:00
Bart Hakvoort dd1f3d8b42 added checks for libuuid and libdl. Also refined libparted check a bit.
* configure.in: added checks for libuuid and libdl. Also refined libparted check a bit.
* include/Partition.h,
  src/Partition.cc: removed Get_Color()
* include/Utils.h: added inline Glib::ustring Get_Color( const Glib::ustring & filesystem )
* src/Dialog_Partition_New.cc,
  src/Win_GParted.cc: make use of Get_Color from Utils.h
* src/Device.cc: fixed a crasher with (at least) pl_PL locale.
2004-10-30 22:17:20 +00:00
Bart Hakvoort 9c328738c9 made 'deep-scan' optional in Read_Disk_Layout. Removed obsolete (already)
* include/Device.h,
  src/Device.cc: made 'deep-scan' optional in Read_Disk_Layout. Removed obsolete (already) commented function.
* include/Partition.h,
  src/Partition.cc: Took used sectors out of Set() and added a Set_Used() function instead. Also added Reset() .
* src/Dialog_Partition_New.cc: minor change to make use of the new Set() in Partition..
* include/Win_GParted.h,
  src/Win_GParted.cc: show pulsing progressbar while refreshing devices.
2004-10-11 10:23:24 +00:00