# Generated by Makefile. Do not edit.

2026-03-17  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.8.1   ==========

2026-03-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Report blkid version string
    
    Include the blkid version string in the GParted configuration
    information.  This is written to standard output when GParted starts and
    at the top of the saved details HTML file.  Include this because blkid
    is the only way to detect many file systems and has been considered a
    mandatory requirement since 2015 [1].
    
    Now this looks like:
        # ./gparted
        GParted 1.8.0-git
        configuration --enable-libparted-dmraid
        libparted 3.6
        blkid from util-linux 2.41.3  (libblkid 2.41.3, 15-Dec-2025)
    
    [1] commit 749a2495716a82a7287fad943109b6cfb927245c
        Document blkid command as a mandatory requirement (#753436)

2024-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Implement blkid false detection of whole disk ZFS workaround (#310)
    
    Previously blkid incorrectly reported a ZFS member on the whole disk
    when it was only in a partition [1].  This was fixed in util-linux v2.35
    released 21-Jan-2020 [2].  That lead to multiple GParted bug reports
    [3][4][5] but the cause was not understood until many years later in
    March 2024 [2].  This was long after util-linux was fixed and with
    little chance of GParted being updated in old distributions it was
    decided to not provide a workaround in GParted [6].
    
    Now the same fault in blkid has occurred again [7] and there's been 2
    new confirmed bug reports [8][9].  The faulty commit was tracked down
    [7] and it was first included in util-linux v2.40 released
    27-Mar-2024.  There's been a 2 year period of util-linux releases, v2.40
    and v2.41, with this fault which has been included in the latest
    distributions, hence implementing a workaround in GParted this time.
    
       Distributions      blkid -v   Affected
        RHEL 9             2.37.4     No
        SLES 15 SP6        2.39.3     No
        Ubuntu 24.04 LTS   2.39.3     No
        Debian 12          2.38.1     No
        RHEL 10            2.40.2     Yes
        Fedora 42          2.40.4     Yes
        SLES 15 SP7        2.40.4     Yes
        Debian 13          2.41       Yes
        Ubuntu 25.10       2.41       Yes
        Fedora 43          2.41.3     Yes
        SLES 16 SP1        2.41.3     Yes
    
    Have recreated this issue on Ubuntu 25.10 booted from the installation
    ISO.  (It already has ZFS installed).  Also recreated this issue in
    Fedora 43 with ZFS installed.  Instructions to Install ZFS into Fedora
    [10]:
        # dnf install -y https://zfsonlinux.org/fedora/zfs-release-3-0$(rpm --eval "%{dist}").noarch.rpm
        # dnf install -y kernel-devel-$(uname -r | awk -F'-' '{print $1}')
        # dnf install -y zfs
        # reboot
    
    Partitioned 8 GiB drive in VM thus:
        # fdisk -l /dev/sdb
        Disk /dev/sdb: 8 GiB, 8589934592 bytes, 16777216 sectors
        Disk model: VBOX HARDDISK
        Units: sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disklabel type: dos
        Disk identifier: 0x63ca6054
    
        Device     Boot   Start      End  Sectors Size Id Type
        /dev/sdb1          2048  2099199  2097152   1G  c W95 FAT32 (LBA)
        /dev/sdb2       2099200 16777215 14678016   7G 83 Linux
    
    Create ZFS file system:
        # zpool create testpool /dev/sdb2
        # zpool status -P
          pool: testpool
         state: ONLINE
        config:
    
                NAME         STATE     READ WRITE CKSUM
                testpool     ONLINE       0     0     0
                  /dev/sdb2  ONLINE       0     0     0
    
        errors: No known data errors
        # zdb --config
        testpool:
            version: 5000
            name: 'testpool'
            state: 0
            txg: 4
            pool_guid: 5492205239617107695
            ...
            vdev_children: 1
            vdev_tree:
                type: 'root'
                id: 0
                guid: 5492205239617107695
                ...
                children[0]:
                    type: 'disk'
                    id: 0
                    guid: 12415046357994710326
                    path: '/dev/sdb2'
                    whole_disk: 0
                    ...
    
    Display signatures:
        # blkid /dev/sdb*
        /dev/sdb: LABEL="testpool" UUID="5492205239617107695" UUID_SUB="12415046357994710326" BLOCK_SIZE="512" TYPE="zfs_member" PTUUID="63ca6054" PTTYPE="dos"
        /dev/sdb1: UUID="A829-6677" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="63ca6054-01"
        /dev/sdb2: LABEL="testpool" UUID="5492205239617107695" UUID_SUB="12415046357994710326" BLOCK_SIZE="512" TYPE="zfs_member" PARTUUID="63ca6054-02"
    
        # wipefs /dev/sdb*
        DEVICE OFFSET      TYPE       UUID                LABEL
        sdb    0x1fff84000 zfs_member 5492205239617107695 testpool
        sdb    0x1fffc4000 zfs_member 5492205239617107695 testpool
        sdb    0x1fe       dos
        sdb1   0x52        vfat       A829-6677
        sdb1   0x0         vfat       A829-6677
        sdb1   0x1fe       vfat       A829-6677
        sdb2   0x4000      zfs_member 5492205239617107695 testpool
        sdb2   0x44000     zfs_member 5492205239617107695 testpool
        sdb2   0x1bfe84000 zfs_member 5492205239617107695 testpool
        sdb2   0x1bfec4000 zfs_member 5492205239617107695 testpool
    
    Since partition sdb2 ends at the very last sector of the drive the
    zfs_member signatures which wipefs is reporting for the whole disk drive
    are inside the boundaries of partition sdb2.
        Hex byte offset   Dec byte offset  Sector (/512)
        0x1fff84000       8589426688       16776224
        0x1fffc4000       8589688832       16776736
    Last sector of partition sdb2:         16777215
    
    Fix this by detecting the zfs_member on the whole disk with the same
    UUID (ZFS pool UUID) as one of it's partitions and clearing the FS_Info
    cache entry for the whole disk drive.
    
    [1] util-linux issue 918 - blkid reports disk as zfs_member if it has a
        zfs_member partition
        https://github.com/util-linux/util-linux/issues/918
    
    [2] GParted issue 14, note 2033797
        https://gitlab.gnome.org/GNOME/gparted/-/issues/14#note_2033797
            1 Mar 2024
            Root cause and fix:
            * util-linux issue 918 - blkid reports disk as zfs_member if it
              has a zfs_member partition
            * Fixed by commit libblkid: (zfs) don't probe whole-disk areas
              covered by partitions
            * First included in util-linux v2.35 released 21-Jan-2020
    
    [3] GParted issue 14 - zfs partition wrongly shows occupying the whole
        disk
        https://gitlab.gnome.org/GNOME/gparted/-/issues/14
            blkid from util-linux 2.32  (libblkid 2.32.0, 21-Mar-2018)
    
    [4] GParted issue 30 - strange problem while loading disk mbr and graph
        showing
        https://gitlab.gnome.org/GNOME/gparted/-/issues/30
            blkid from util-linux 2.33  (libblkid 2.33.0, 06-Nov-2018)
    
    [5] GParted issue 209 - GParted displaying incorrect whole drive ZFS
        after testdisk rebuild
        https://gitlab.gnome.org/GNOME/gparted/-/issues/209
    
    [6] GParted issue 14, note 2037879
        https://gitlab.gnome.org/GNOME/gparted/-/issues/14#note_2037879
            4 Mar 2024
            Distributions almost never update the GParted package in their
            older but supported distributions.  They only include the latest
            GParted package in their latest distribution.  Therefore even if
            we fix GParted users won't get it.  Our only solution is to
            recommend using up to date GParted Live or other live
            distribution containing GParted, which will include a fixed
            util-linux package.
    
    [7] util-linux issue 4078 - blkid reports whole disk as zfs_member if
        the ending partition is a zfs_member
        https://github.com/util-linux/util-linux/issues/4078
            I have bisected this (on Fedora 43 with ZFS installed) to
            commit:
            51f9e0937ba2666b7fa489768b038cf26da8cc47
            libblkid: (probe) remove chunking from blkid_probe_get_idmag()
    
    [8] GParted issue 258 - GParted showing single zfs partition instead of
        two partitions
        https://gitlab.gnome.org/GNOME/gparted/-/issues/258
            blkid from util-linux 2.40.1  (libblkid 2.40.1, 06-May-2024)
    
    [9] GParted issue 310 - GParted does not show the first FAT partition,
        instead shows ZFS on whole disk
        https://gitlab.gnome.org/GNOME/gparted/-/issues/310
            blkid de util-linux 2.41.2  (libblkid 2.41.2, 22-Sep-2025)
    
    [10] Install ZFS into Fedora
        https://openzfs.github.io/openzfs-docs/Getting%20Started/Fedora/index.html
    
    Closes #310 - GParted incorrectly showing ZFS occupying the whole disk
                  instead of only one partition

2024-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Simplify method to FS_Info::load_cache_for_one_device_name() (#310)
    
    The previous commit added and made use of new method
    FS_Info::load_cache_for_device_and_partition_names() to load blkid data
    during the main portion of device and partition discovery.  The previous
    method FS_Info::load_cache_for_paths() is now only used with single LUKS
    encrypted mapping device names.  Therefore simplify it to only handling
    a single device name and rename the method accordingly.
    
    Closes #310 - GParted incorrectly showing ZFS occupying the whole disk
                  instead of only one partition

2024-03-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Pass structured device and partition names when loading FS_Info cache (#310)
    
    Blkid is again falsely reporting ZFS on a whole disk device when a
    partition contains a ZFS member [1].  See following commit "Implement
    blkid false detection of whole disk ZFS workaround (#310)" for a full
    explanation of the background and steps to re-create the issue.
        # blkid /dev/sdb*
        /dev/sdb: LABEL="testpool" UUID="5655469295808078251" UUID_SUB="9833733367633006209" BLOCK_SIZE="512" TYPE="zfs_member" PTUUID="63ca6054" PTTYPE="dos"
        /dev/sdb1: UUID="A829-6677" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="63ca6054-01"
        /dev/sdb2: LABEL="testpool" UUID="5655469295808078251" UUID_SUB="9833733367633006209" BLOCK_SIZE="512" TYPE="zfs_member" PARTUUID="63ca6054-02"
    
    The plan to fix this is to detect and remove the incorrect ZFS member
    entry for the whole disk device from the FS_Info cache of blkid data.
    
    GParted probes storage like this:
    1.  Gets a list of device names.  Firstly from the the command line,
        otherwise whole disk device names from /proc/partitions using
        Proc_Partitions_Info::get_device_paths().
    2.  Expands the list of device names to device and partition names via
        Proc_Partitions_Info::get_device_and_partition_paths_for().
    3.  Runs blkid on the list of device and partition names using
        FS_Info::load_cache_for_paths().
    
    This commit just makes the list of device and partition names (passed
    from step 2 to step 3 above) structured so that partition names are
    associated with their parent device name.
    
    [1] util-linux issue 4078 - blkid reports whole disk as zfs_member if
        the ending partition is a zfs_member
        https://github.com/util-linux/util-linux/issues/4078
    
    Closes #310 - GParted incorrectly showing ZFS occupying the whole disk
                  instead of only one partition

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into xfs.cc
    
    xfs.cc
        #include "ProgressBar.h"  // For PROGRESSBAR_TEXT_COPY_BYTES
        #include <stdio.h>        // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into udf.h and .cc
    
    udf.h
        #include "OperationDetail.h"  // For OperationDetail
    
    udf.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, EXEC_CANCEL_SAFE

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into reiserfs.h and .cc
    
    reiserfs.h
        #include "OperationDetail.h"  // For OperationDetail
    
    reiserfs.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, EXEC_CANCEL_SAFE
        #include "Utils.h"            // For FS_REISERFS, MEBIBYTE, Sector,
                                      // Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring
        #include <stdio.h>            // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into reiser4.h and .cc
    
    reiser4.h
        #include "OperationDetail.h"  // For OperationDetail
    
    reiser4.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, EXEC_CANCEL_SAFE
        #include "Utils.h"            // For FS_REISER4, Sector, Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring
        #include <stdio.h>            // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into ntfs.h and .cc
    
    ntfs.h
        #include "OperationDetail.h"  // For OperationDetail
        #include <glibmm/ustring.h>   // For Glib::ustring
    
    ntfs.cc
        #include <stdio.h>            // sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into nilfs2.h and .cc
    
    nilfs2.h
        #include "OperationDetail.h"  // For OperationDetail
    
    nilfs2.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS
        #include "Utils.h"            // For FS_NILFS2, KIBIBYTE, MEBIBYTE,
                                      // Sector, Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring
        #include <stdio.h>            // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into lvm2_pv.h and .cc
    
    lvm2_pv.h
        #include "OperationDetail.h"  // For OperationDetail
        #include <glibmm/ustring.h>   // For Glib::ustring
    
    lvm2_pv.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS
        #include "Utils.h"            // For FS_LVM2_PV, Sector, Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into luks.h and .cc
    
    luks.h
        #include "OperationDetail.h"  // For OperationDetail
        #include <glibmm/ustring.h>   // For Glib::ustring
    
    luks.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, STATUS_NONE,
                                      // FONT_ITALIC
        #include "Partition.h"        // For Partition
        #include <glibmm/ustring.h>   // For Glib::ustring

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into linux_swap.h and .cc
    
    linux_swap.h
        #include "OperationDetail.h"  // For OperationDetail
        #include <glibmm/ustring.h>   // For Glib::ustring
    
    linux_swap.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, STATUS_NONE,
                                      // FONT_ITALIC
        #include "Utils.h"            // For FS_LINUX_SWAP, Sector,
                                      // KIBIBYTE, Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring
        #include <stdio.h>            // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing include into jfs.h
    
    jfs.h
        #include "OperationDetail.h"  // For OperationDetail

2026-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into hfsplus.h and .cc
    
    hfsplus.h
        #include "OperationDetail.h"  // For OperationDetail
    
    hfsplus.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS
        #include "Utils.h"            // For FS_HFSPLUS
        #include <glibmm/ustring.h>   // For Glib::ustring

2026-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into hfs.h and .cc
    
    hfs.h
        #include "OperationDetail.h"  // For OperationDetail
    
    hfs.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS
        #include "Utils.h"            // For FS_HFS, MEBIBYTE
        #include <glibmm/ustring.h>   // For Glib::ustring

2026-02-15  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into fat16.h and .cc
    
    fat16.h
        #include "OperationDetail.h"  // For OperationDetail
        #include "Utils.h"            // For FSType
        #include <glibmm/ustring.h>   // For Glib::ustring
    
    fat16.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, EXEC_CANCEL_SAFE
        #include "Utils.h"            // For FS_FAT16, MEBIBYTE, TEBIBYTE,
                                      // Sector, Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring
        #include <stdio.h>            // For sscanf()
        #include <stdlib.h>           // For setenv(), atoll()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into f2fs.h and .cc
    
    f2fs.h
        #include "OperationDetail.h"  // For OperationDetail
    
    f2fs.cc
        #include "OperationDetail.h"  // For OperationDetail,
                                      // EXEC_CHECK_STATUS, EXEC_CANCEL_SAFE
        #include "Utils.h"            // For FS_F2FS, Sector, Utils::*()
        #include <glibmm/ustring.h>   // For Glib::ustring()
        #include <stdio.h>            // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into ext2.cc
    
    ext2.cc
        #include "ProgressBar.h"  // For PROGRESSBAR_TEXT_COPY_BYTES
        #include <stdio.h>        // For sscanf()
        #include <stdlib.h>       // For llabs()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into exfat.h and .cc
    
    exfat.h
        #include <glibmm/ustring.h>  // For Glib::ustring
    
    exfat.cc
        #include <glibmm/ustring.h>  // For Glib::ustring
        #include <stdio.h>           // For sscanf()

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update includes for btrfs.h and .cc
    
    btrfs.h
        +#include "OperationDetail.h"  // For OperationDetail
        +#include <glibmm/ustring.h>   // For Glib::ustring
        +#include <vector>             // For std::vector<>
    
    btrfs.cc
        +#include "OperationDetail.h"  // For OperationDetail,
                                       // EXEC_CHECK_STATUS, STATUS_ERROR
        -#include <ctype.h>            // No longer use isdigit(), isspace()
                                       // since commit [1]
        +#include <map>                // For std::map<>
        +#include <stdio.h>            // For sscanf()
        +#include <vector>             // For std::vector<>
    
    [1] commit db5df60f22bcacc71bd19557d7477da08d0b80e3
        Use btrfs filesystem show --raw to read usage (!105)

2026-02-18  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing include into bcachefs.cc
    
    To apply the Include What You Use principle.  See this earlier commit
    for references [1].
    
    bcachefs.cc
        #include <glibmm/ustring.h>  // For Glib::ustring
        #include <stdio.h>           // For sscanf()
    
    [1] commit 3e689d9e563cb5372f64c801484b9e480fb18f87
        Add missing includes into Operation.h and .cc

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor FS_Info::set_command_found() into if fail return early pattern

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename method to FS_Info::set_command_found()
    
    set_commands_found() use to check for the availability of two commands,
    blkid and vol_id.  Since this commit [1] from 2016 the method only
    checks for the command blkid.  Rename method to the singular.
    
    [1] commit 8aa34f7baaac5a70e8901275619f7587b2ed21b8
        Remove use of retired vol_id from FS_Info module (#767842)

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Initialise local constant prohibited_chars only once
    
    prohibited_chars in fat16::sanitize_label() is constructed from a
    constant C string and never changed.  Rather than constructing
    prohibited_chars on every call to the function, make it a static
    constant so it is only ever initialised once at the start of the
    program and can't be modified.

2026-02-16  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove empty ntfs::read_uuid() method
    
    ntfs::read_uuid() is an empty do nothing method which overrides virtual
    FileSystem::read_label() from the base class which is also an empty do
    nothing method.  Therefore the derived ntfs::read_uuid() adds no
    functionality over what the base class method provides.  Additionally
    because the NTFS file system interface doesn't support reading the UUID,
    ntfs::get_filesystem_support() never sets fs.read_uuid, so
    ntfs::read_uuid() is never called anyway.  Therefore remove the empty
    method.  Missed when removing other empty file system interface class
    methods [1].
    
    [1] commit e4210ba08d42a5074033aedd6a91e9967a16fc8f
        Cleanup duplicate fs code

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables to PipeCapture::m_callerbuf etc

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables to PipeCapture::m_capturebuf etc

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables to PipeCapture::m_linevec etc

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variables to PipeCapture::m_readbuf etc

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to PipeCapture::m_channel
    
    More ongoing work to make it abundantly clear which variables are
    members of a class.

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Fix PipeCapture::line_start declaration comment
    
    Name the correct member variable that line_start indexes into.

2025-05-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Move PipeCapture private helper definitions into the unnamed namespace
    
    Class PipeCapture is unit tested without need for direct access to the
    3 private helper methods.  Therefore they don't need exposing in the
    class declaration even as private members so make them truly private by
    moving them into the unnamed namespace.  Also put 3 constants into the
    unnamed namespace too.  Note that the static qualifier is superfluous
    and just repeating what the unnamed namespace achieves, but is there as
    an additional reminder.  This has been done before [1][2] and is the
    preferred way in C++ [3][4].
    
    [1] commit b89b635d65eec996d3600a04810f5daffe01eac0
        Fix crash from violating the One Definition Rule with CommandStatus
        (#283)
    
    [2] commit 3e10a03cef0221bffa9706575b6e533147083583
        Wrap internal implementation of PasswordRAMStore in the unnamed
        namespace
    
    [3] Why should you prefer unnamed namespaces over static functions?
        https://stackoverflow.com/questions/154469/why-should-you-prefer-unnamed-namespaces-over-static-functions
            Static only applies to names of objects, functions, and
            anonymous unions, not to type declarations.
    
    [4] How are unnamed namespaces superior to the static keyword?
        [duplicate]
        https://stackoverflow.com/questions/4422507/how-are-unnamed-namespaces-superior-to-the-static-keyword
            unnamed namespace's are superior to the static keyword,
            primarily because the keyword static applies only to the
            variables declarations and functions, not to the user-defined
            types.

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now empty PipeCapture destructor (!156)
    
    Because it's recommended to not provide an empty destructor [1], instead
    let the compiler generate the destructor automatically.  Done previously
    for other classes by commits [2][3].
    
    [1] C++ Core Guidelines, C.dtor: Destructors
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cdtor-destructors
            C.dtor: Destructors
    
            "Does this class need a destructor?" is a surprisingly
            insightful design question.  For most classes the answer is "no"
            either because the class holds no resources or because
            destruction is handled by the rule of zero; that is, its members
            can take care of themselves as concerns destruction.  If the
            answer is "yes", much of the design of the class follows (see
            the rule of five).
    
            C.30: Define a destructor if a class needs an explicit action at
            object destruction
    
            Reason: A destructor is implicitly invoked at the end of an
            object's lifetime.  If the default destructor is sufficient, use
            it.  Only define a non-default destructor if a class needs to
            execute code that is not already part of its members'
            destructors.
    
    [2] commit fae4a647678d0851044200e04501d5ef8727b5f8
        Remove now empty Dialog_Partition_Copy and _Resize_Move destructors
        (!151)
    
    [3] commit commit 4168772d3a589a2f68181238a9e945a4e079079b
        Remove most of the empty class destructors (!143)
    
    Closes !156 - Replace use of new[]ed char buffer with vector<char>

2026-02-17  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace new[]ed char buffer with vector<char> in PipeCapture (!156)
    
    This is another small step in removing manual memory management because
    it is error prone and modern C++ (C++11 onwards) recommends using
    standard containers where possible and smart pointers where necessary
    [1].  For further references see this previous commit [2].
    
    Convert readbuf's manual new[] and delete[] of char array with type
    std::vector<char> as it automatically performs the memory allocation and
    deallocation.  Also note that the elements are now also initialised with
    '\0' but that overhead will be insignificant, as previously investigated
    for a much larger case [3].
    
    [1] C++ Core Guidelines, R: Resource management
        https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#rr-newdelete
            R.11: Avoid calling new and delete explicitly
    
            Reason
            The pointer returned by new should belong to a resource handle
            (that can call delete).  If the pointer returned by new is
            assigned to a plain/naked pointer, the object can be leaked.
    
    [2] commit 15f4c47445f3adff634d7981f1afb6cec9de0059
        Replace malloc()ed buffer with vector<char> in useable_device()
        (!144)
    
    [3] commit 0ad4ac9c31bf301e6196b4575818ddf6d4b3181c
        Replace malloc()ed buffer with vector<char> in CopyBlocks (!144)
    
    Closes !156 - Replace use of new[]ed char buffer with vector<char>

2026-02-22  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2026-01-30  Quentin PAGÈS <pages_quentin@hotmail.com>

    Update Occitan translation

2026-01-26  Curtis Gedak <gedakc@gmail.com>

    Append -git to version for continuing development

2026-01-26  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.8.0   ==========

2026-01-26  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2026-01-11  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2025-08-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add widget hierarchy comments into DialogPasswordEntry constructor

2025-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Make Partition::m_flags private and provide necessary methods
    
    This member variable already has several methods querying and modifying
    it.  However it was also public and directly read and updated.  To be
    consistent make m_flags private and provide the necessary additional
    access and update methods.

2025-12-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to Partition::m_flags
    
    To prefix member variable name with m_.

2025-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing includes into Partition.h and .cc
    
    To applying the Include What You Use principle.  See this earlier commit
    for references [1].
    
    Partition.h
        #include <vector>            // For std::vector
    
    Partition.cc
        #include "Utils.h"           // For FS_UNALLOCATED
        #include <algorithm>         // For std::min()
        #include <vector>            // For std::vector
        #include <glibmm/ustring.h>  // For Glib::ustring
    
    [1] commit 3e689d9e563cb5372f64c801484b9e480fb18f87
        Add missing includes into Operation.h and .cc

2025-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member variable to GParted_Core::m_all_libparted_flags
    
    Rename from 'flags' to give it a more meaningful name and prefix member
    variable with m_.  Also rename for loop counter variables to the
    normative 'i'.
    
    * Why do most of us use 'i' as a loop counter variable?
      https://softwareengineering.stackexchange.com/questions/86904/why-do-most-of-us-use-i-as-a-loop-counter-variable

2025-12-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Convert remaining calls to use get_lp_partition()
    
    When developing commit "Set LBA flag when creating extended partitions
    (#300)" set_partition_type() was newly handling extended partitions but
    was still directly calling ped_disk_get_partition_by_sector().  This
    resulted in GParted crashing when trying to set the partition type of an
    extended partition because it doesn't handle extended partitions.  This
    was resolved by calling GParted_Core::get_lp_partition() instead.
    
    None of the remaining direct calls to ped_disk_get_partition_by_sector()
    should ever have to handle extended partitions, so this change is not
    required, but for code consistency use GParted_Core::get_lp_partition()
    everywhere.  get_lp_partition() was added by commit [1].
    
    [1] commit 33a535390e00cf7de42ba2046e1a7093f426159f
        Extract common code into new method get_lp_partition()

2025-11-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove never reached return statement in GParted_Core::create()

2025-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove unnecessary comment from Dialog_Partition_Copy::get_new_partition()
    
    The comment and two associated lines of code were added by commit [1] on
    2004-09-25.  5 commits later [2] on the same day the first commented
    statement was removed.  So now the first clause of the comment is not
    applicable any more and the second clause "set status for partition" is
    just repeating exactly what can be seen from the remaining statement
    itself and adds no additional information.  Therefore remove.
    
    [1] commit 201fdcb8e8ee8587775b79544ee3ff4bb87d8cd6
        more i18n and some code cleanups
                //set proper name and status for partition
            //  selected_partition.partition = String::ucompose( _("copy from %1"), selected_partition .partition );
                selected_partition.status = GParted::STAT_COPY ;
    
    [2] commit 60b5bb29aad0c29c78df8784c61c8961eb624a8e
        removed commented statement (big deal huh:) )

2025-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename member functions to Dialog_*::get_new_partition()
    
    Change member function names to lower case to match the predominate
    "snake_case" [1] used for such names.
    
    [1] Naming convention (programming),
        Examples of multiple-word identifier formats
        https://en.wikipedia.org/wiki/Naming_convention_(programming)#Examples_of_multiple-word_identifier_formats

2025-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear all other flags when composing the operation in GParted (#300)
    
    Test case:
        Table   Partition num, FS, flag     Preview operation
        MSDOS   1   unknown      raid       Format to ext4
        GPT     1   linux-swap   swap       Paste fat16 into
        GPT     2   fat16        msftdata   Format to swap
    
    Preview of the format and paste into existing operations shows the
    existing partition flag being maintained, however when applied those
    flags are cleared and any new flags libparted uses to represent on-disk
    partition types are set.
    
    Make all operation which modify the partition flags behave the same.
    Make format and paste into existing preview as implemented and the same
    as create new and paste into new.  That all flags are cleared, other
    than any flag being explicitly set by GParted which might be one of:
    ESP, LVM or LBA.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear all flags when setting partition type by fstype (#300)
    
    Here are several examples of the same issue.  Have an existing partition
    on the relevant table with the specified libparted flag set and apply
    the operation to that partition.
        Table   Partition num, FS, flag     Apply operation
        MSDOS   1   unknown      raid       Format to ext4
        GPT     1   linux-swap   swap       Paste fat16 into
        GPT     2   fat16        msftdata   Format to swap
    
    In each case after refresh the existing partition flag was maintained
    even though the the type of the new file system was set using libparted.
    This is because the libparted flags are overriding the request being
    made by setting the partition's file system type in setting the on-disk
    partition type.
    
    So far set_filesystem_type_using_fstype() only clears the ESP and LVM
    flags.  Fix this by clearing all libparted partition flags when setting
    the on-disk partition type by file system type.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-11-27  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LBA flag when creating extended partitions (#300)
    
    Extended partitions on MSDOS tables still get created as type ID 0x05.
    As discussed in earlier commit "Set LBA flag for FAT16/32 file systems
    on MSDOS tables (#300)" the Parted command creates them with type ID
    0x0F "W95 Extended (LBA)".
    
    Set the LBA flag when creating extended partitions to get the partition
    type ID set to 0x0F.
    
    Updated operation details looks like:
        * Create Extended Partition #1 (extended, 64.00 MiB) on... (SUCCESS)
          * create empty partition                                 (SUCCESS)
    >>    * set partition type on /dev/sdb1                        (SUCCESS)
    >>        new partition flag: lba                              (SUCCESS)
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-04  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LBA flag when pasting FAT16/32 into new MSDOS partition (#300)
    
    Copy an existing FAT16/32 partition without the LBA flag set on an MSDOS
    drive into a new partition.  The operation previews and implements not
    setting the LBA flag.  Where as copying the same partition into an
    existing partition previews and implements as setting the LBA flag.
    
    Fix this so copying into a new partition also sets the partition flags
    consistently so when previewing and implementing this operation the LBA
    flag is set.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-11-26  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Provide second name for set_partition_type_using_flag() (#300)
    
    Libparted uses the file system type, overridden or modified by flags to
    set the on-disk partition type appropriately.  For example on an MSDOS
    table the libparted ESP flag sets the on-disk partition type ID to 0xEF
    "EFI System Partition", alternatively setting the file system type to
    "ext4" sets the on-disk partition type ID to 0x83 "Linux".  This is
    handled in GParted_Core::set_partition_type() by calling either:
        set_partition_type_using_flag()
        set_partition_type_using_fstype()
    
    Since the previous commit "Set LBA flag for FAT16/32 file systems on
    MSDOS tables (#300)" set_partition_type_using_flag() is also called in
    the set_partition_type_using_fstype() case to set the optional LBA flag
    and modify the on-disk partition type.  Conceptually these are two
    different things:
    1.  Set the libparted partition flag to override any file system type to
        set the on-disk partition type.
            E.g. (Partition type ID on an MSDOS table)
            ESP flag                       -> 0xEF "EFI System Partition"
    2.  Set the optional libparted partition flag when also setting the file
        system type to amend the on-disk partition type.
            E.g.
            FAT32 file system              -> 0x0B "W96 FAT32"
            FAT32 file system and LBA flag -> 0x0C "W96 FAT32 (LBA)"
    
    However both cases need to do exactly the same thing; create an
    operation detail to report what is being done and call the libparted API
    to set the flag.  Therefore rename
    GParted_Core::set_partition_type_using_flag() to set_partition_flag()
    and provide a function wrapper for the original name.  So in the first
    flag overrides the file system case continue to call
    set_partition_type_using_flag() and in the second set optional flag to
    modify the file system case call the new set_partition_flag() name.
    
    Closes #300 - Consider setting LBA flag for FAT32 primary partitions
                  automatically when needed

2025-12-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Set LBA flag for FAT16/32 file systems on MSDOS tables (#300)
    
    A user requested that GParted set the LBA flag when creating FAT32 file
    systems.
    
    Libparted only supports the LBA flag for fat16 / fat32 and extended
    partitions on MSDOS partition tables [1] and no where else.  The Parted
    command always enables the LBA flag when it is available [2].  Therefore
    always creates these MSDOS partition types:
        Id  Type
        0E  W95 FAT16 (LBA)
        0C  W95 FAT32 (LBA)
        0F  W95 Extended (LBA)
    
    And testing of GNOME Disks shows it creates these MSDOS partition types
    and file systems:
        Id  Type             File System
        0C  W95 FAT32 (LBA)  fat16 [*]
        0C  W95 FAT32 (LBA)  fat32 [*]
        05  Extended         (None)
    [*] It doesn't appear possible to choose between fat16 and fat32 file
        systems.  Instead you just select a fat file system and it
        automatically chooses 16 or 32-bit FAT (File Allocation Table)
        depending on the size of the partition.
    
    Where as GParted, which doesn't set the LBA flag, always creates these
    MSDOS partition types and file systems:
        Id  Type       File System
        06  FAT16      fat16
        0B  W95 FAT32  fat32
        05  Extended   (None)
    
    Since there is precedent with the above mentioned partitioning tools
    always enabling the LBA flag and as Logical Block Addressing was first
    introduced in 1996 [3] enable the LBA flag.  This applies to these
    operations: create new, paste into existing and format for fat16/32 file
    systems in an MSDOS partition table.  If anybody is using MS-DOS before
    7.1 (included in Windows 95 Release 2) that doesn't support LBA
    addressing [4] the LBA flag can still be toggled off after the operation
    is applied.
    
    Now GParted creates these MSDOS partition types and file systems:
        Id  Type             File System
        0E  W95 FAT16 (LBA)  fat16
        0C  W95 FAT32 (LBA)  fat32
    
    Updated operation details looks like:
        * Create Primary Partition #1 (fat16, 64.00 MiB) on /de... (SUCCESS)
          * create empty partition                                 (SUCCESS)
          * clear old file system signatures in /dev/sdb1          (SUCCESS)
          * set partition type on /dev/sdb1                        (SUCCESS)
              new partition type: fat16                            (SUCCESS)
    >>        new partition flag: lba                              (SUCCESS)
          * create new fat16 file system                           (SUCCESS)
    
    [1] parted/libparted/labels/dos.c dos_type_id_supports_lba()
        https://cgit.git.savannah.gnu.org/cgit/parted.git/tree/libparted/labels/dos.c?h=v3.6#n226
            dos_type_id_supports_lba(unsigned char type_id)
            {
                switch (type_id)
                {
                    case PARTITION_FAT16:
                    case PARTITION_FAT16...
                    ...
                    case PARTITION_FAT32:
                    case PARTITION_FAT32...
                    ...
                    case PARTITION_DOS_EXT:
                    case PARTITION_EXT_LBA:
                        return true:
[--snip--]
