0.8.5 (?/??/2012):
------------------

- Added type codes for Midnight BSD (0xA580 - 0xA585). I used these codes
  because Midnight BSD uses the same 0xA5 type code as FreeBSD on MBR
  disks, so I'm starting Midnight BSD's numbering halfway through the
  0xA5## range.

0.8.4 (3/25/2012):
------------------

- REALLY fixed Ctrl+D problems! Now gdisk terminates upon receiving a
  Ctrl+D. In all previous versions, it could lock itself into a CPU-hogging
  loop if launched via "sudo" from a terminal window that was then closed
  or if Ctrl+D was pressed at certain input prompts (for a partition name
  or sector number, for instance).

0.8.3 (3/23/2012):
------------------

- Fixed compilation problem on GCC 4.7.

- Improved handling of Ctrl+D on some systems.

- Added disk's name to message stating that a disk write was successful.

- Fixed bug that caused creation of >2TiB partitions on 32-bit systems to
  be truncated in sgdisk.

0.8.2 (1/22/2012):
------------------

- Adjusted the code to support a number of partitions that's not a multiple
  of the number of partition table entries that fits in a sector (normally
  4 per sector). The program still rounds up, when necessary, when resizing
  the partition table manually, but not when loading a partition table that
  contains a peculiar number of partitions. This helps prevent spurious
  error messages about CRC problems when loading some Solaris partition
  tables.

- Fixed bugs relating to the handling of empty partitions; Solaris's ZFS
  tools create weird empty partitions that are legal but that gdisk wasn't
  handling properly. (Specifically, they sometimes have non-zero end
  points; gdisk assumed empty partitions had end points of 0.)

- Fixed a bug that caused an infinite loop of input prompts if the user
  pressed Ctrl+D.

- Changed gdisk's first-sector input operation to specify a sector number
  that's properly aligned as the default value. This eliminates the need
  to alter that value and notify the user of the change when the user
  hits "Enter" for the default value as the first partition on an empty
  disk (as well as in some other situations).

0.8.1 (10/1/2011):
------------------

- Fixed bug that could cause FixParts to keep a partition's assignment
  as logical when FixPart could not actually do so. This could happen
  when there are no gaps between two logical partitions. Some partitioning
  tools can create such configurations, but FixParts can't. Such
  configurations are extremely rare. I've only encountered them when
  logical partitions are out of order.

- Added code to detect infinite loops of logical partitions when reading
  MBR data. When detected, the program now stops reading after the first
  loop, so no duplicates appear in the partition list.

- Fixed bug in partition overlap detection in MBR code.

- Changed GPT reading code to use the size encoded in GPT headers to
  determine how much of the header to use in computing a CRC, with the
  restriction that the size be equal to or less than the disk's sector
  size. This should work around problems with libefi in ZFS, which sets the
  header size to 512 rather than the more common 92. A caveat: If the
  disk's sector size is larger than the GPTHeader data structure size (512
  bytes), then the rest of the sector's contents are ignored and replaced
  with 0 values. This could produce false positives on CRC checks on disks
  with over-512-byte sector sizes if the header sector is padded with
  something other than 0 values.

- Fixed bug in new (as of 0.8.0) check that main and backup partition
  tables are identical on big-endian (PowerPC, etc.) hardware.

0.8.0 (9/10/2011):
------------------

- Added new return option for sgdisk: 8, which means that a replication
  operation (-R or --replicate) failed. Note that other operations on
  the same command line might still have succeeded.

- Added gdisk_test.sh shell script, contributed by Guillaume Delacour.
  This script tests some common gdisk and sgdisk operations to be sure
  they're working correctly.

- Enable sgdisk's -l (--load-backup) and -o (--clear) options to work
  even on disks that are damaged. Most other options will still be ignored,
  though, so if you suspect a disk may be bad and want to use one of these
  options, you should do so on a line by itself, followed by a separate
  command to perform other actions (such as adding new partitions).

- Added check for mis-matched primary and backup partition tables.
  A mismatch is reported as a CRC error.

- Added Apple Core Storage partition type code (hex code AF05, GUID
  53746F72-6167-11AA-AA11-00306543ECAC).

- Added cgdisk program to the family. This program is a rough workalike
  to cfdisk, much as gdisk is a rough workalike to fdisk. See the cgdisk
  man page or http://www.rodsbooks.com/gdisk/cgdisk-walkthrough.html for
  details about its operation.

- Fixed bug that caused CHS end point for protective MBR to be set to
  0xfeffff rather than the spec-mandated 0xffffff on disks over ~8GB. This
  is a very minor bug, since not much cares about this, and most other GPT
  tools get it wrong in the same way, too.

0.7.2 (6/26/2011):
------------------

- The Windows version now (finally!) generates proper GUIDs rather than a
  purely random number. This fixes a bug that caused Windows 7 to crash
  when converting a disk from MBR format (but, oddly, not when creating a
  fresh partition table or doing various other things).

- Added a warning when an MBR partition is discarded because it's too
  big for the disk.

- Changed warning to Windows users about the dangers of converting to GPT
  so that it appears only on disks that aren't already in GPT form.

- Fixed bug that caused bogus "3" values to pad the ends of partition names
  on some disks (particularly those created by Microsoft's disk
  partitioning tools).

- Made compilation without Unicode support possible (see README file)

- Made default filesystem type code OS-dependent (based on the compilation
  platform).

- Added new Linux-only filesystem partition type GUID code,
  0FC63DAF-8483-4772-8E79-3D69D8477DE4 (8300 entry code). Also changed name
  of the EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (0700 entry code) to
  "Microsoft basic data").

- Fixed a bug that caused an incorrect code to be set for active/bootable
  partitions when generating a hybrid MBR.

- Enable entry of hex codes that begin with "0x" for both GPT and MBR
  partitions.

- Fixed bug that caused the boot loader code to be lost when creating a
  hybrid MBR.

- Fixed bug in sector input code that could produce improper values
  if the user inputs ridiculously large "+" values.

0.7.1 (3/21/2011):
------------------

- Added support for proper UTF-16LE partition names rather than the
  "shortcut" that properly encoded only ASCII names. This support works
  only in Linux, FreeBSD, and OS X, though, at least for the moment.
  Although it's possible to compile this support into Windows when using
  Visual C++, it doesn't seem to work properly. Since using this feature
  would require distributing the ICU libraries with the Windows binary,
  thus bloating the binary package's size to no effect, I've disabled it in
  my standard Windows build, at least for now.

- Added check to fixparts to keep it from operating on devices that
  lack an existing MBR signature. (In 0.7.0, it could write an empty
  MBR data structure to a device on which it was mistakenly launched.)

- Fixed bug that caused the protective MBR to not be written when
  restoring a backup of the GPT data.

- Fixed bug that caused second protective MBR partition, when created
  as part of a hybrid MBR, to always be of type 0xEE, even when the
  user specified something else.

- Integrated a number of code cleanups contributed by Florian Zumbiehl.

0.7.0 (3/11/2011):
------------------

- Fixed bug that caused some types of logical partitions to be misread.

- Created FixParts program, to fix problems on MBR-partitioned disks.
  Although this program is part of the GPT fdisk family, it is NOT used on
  GPT disks.

- Completely redid the GPT-to-MBR code, used both for converting to MBR
  form and for creating hybrid MBRs.

- Fixed a bug that caused gdisk to "forget" some partitions if there were
  numbering gaps when a conversion to MBR was aborted.

- Improved CHS value creation on small (<~8GB) disks for protective MBR
  and when creating hybrid MBRs or converting to MBR format. Linux-only,
  for the moment; other platforms still produce bad CHS values on sub-~8GB
  disks (but few OSes care these days).

- Enhanced disk replication features ('u' on the experts' menu in gdisk; -R
  or --replicate in sgdisk). It's now possible to replicate the partition
  table from a larger to a smaller disk, so long as all the partitions fit
  on the smaller disk. In sgdisk, the secondary GPT data are moved
  automatically if disk sizes don't match. In gdisk, the secondary GPT data
  are moved automatically if the target disk is smaller than the source
  disk; if the target disk is larger than the source disk, the user is
  given the option of making this adjustment.

- Fixed --load-backup (-l) option to sgdisk, which was broken.

- Changed largest drive that's not given a minimum 4 KiB alignment even
  when smaller alignment is detected on the disk to 300 GB.

- Fixed bug that prevented aborting a partition table backup ('u' on the
  experts' menu) by hitting the Enter key for the device filename.

- Implemented a number of code cleanups provided by Florian Zumbiehl.

0.6.14 (1/8/2011):
------------------

- Made small change to the way the start sector is interpreted if you use a
  "+" specification, as in "+2G" to locate a partition 2 GiB into the
  default range. This change makes adjustments for sector alignment less
  likely.

- Modified sgdisk's -n (--new) option to work with relative start and end
  values (which the man page incorrectly stated it already did). Values of
  0 for the start and end sectors refer to the first and last available
  sectors in the largest free block, and a partition number of 0 refers to
  the first available partition.

- Added ChromeOS GUID values to list of recognized partition type GUIDs.
  7F00 = ChromeOS kernel, 7501 = ChromeOS root, 7502 = ChromeOS reserved.
  Untested on actual ChromeOS system.

- Tweaked APM detection to look for APM signature even if an MBR
  signature has already been found. Helps in diagnosis of cases
  in which an MBR has overwritten an APM disk.

0.6.13 (10/12/2010):
--------------------

- Added notification about nonexistent partitions to hybrid MBR creation
  in gdisk.

- Fixed bug in GPT-to-MBR conversion that could sometimes enable creation
  of an extended partition that overlaps a preceding partition.

- Fixed bug in GPT-to-MBR conversion that prevented creation of an MBR
  table with logical partitions if there were four or fewer partitions.

0.6.12 (10/7/2010):
-------------------

- Adjusted alignment code to use 1 MiB alignment by default for drives with
  other than 512-byte sector sizes. (Previous versions increased this --
  for instance, to 4 MiB for drives with 2048-byte logical sector size.)

- Entry of non-hexadecimal value for partition type code now causes
  re-prompting for a new value, fixing a recently-introduced minor bug.

- Fixed bug in sector entry using K/M/G/T/P suffixes on disks with
  other-than-512-byte sector numbers.

- Added "P" (PiB, pebibyte) suffix to suffixes accepted in entering
  partition sizes.

- Fixed bug that caused sgdisk to segfault if fed the (invalid)
  "-A show" parameter. Now it terminates with a complaint about an invalid
  partition number 0.

- Removed warning when running on big-endian hardware, since this
  support has been present for quite a while with no bug reports.

0.6.11 (9/25/2010):
-------------------

- Added -F (--first-aligned-in-largest) option to sgdisk. This option is a
  variant on -f (--first-in-largest); it returns the number of the first
  sector that will be used in the largest free area, given the current
  alignment value (set via -a/--set-alignment).

- Streamlined GUID code entry in gdisk; it no longer offers the option
  to enter GUIDs in separate segments.

- The -t option to sgdisk now accepts GUID values as well as the
  sgdisk/gdisk-specific two-byte hex codes.

- Added check that the protective 0xEE MBR partition begins on sector 1
  to the verify function. If it doesn't, a warning message is displayed,
  but it doesn't count as an error.

- Added check for overlapping MBR partitions to verify function (gdisk "v"
  function on all menus; sgdisk -v/--verify function). Also warns about
  multiple MBR 0xEE partitions (causes problems in some OSes).

- Added check to GPT-to-MBR and hybrid MBR creation options to prevent
  creation of disks with duplicate partitions. When told to create a disk
  with duplicates, sgdisk now aborts with the error message "Problem
  creating MBR!" When attempting to create a hybrid MBR with duplicates,
  gdisk silently drops duplicate partitions, leaving fewer than requested.
  Creating duplicates should not be possible in sgdisk when converting to
  MBR form.

0.6.10 (8/22/2010):
-------------------

- Enable disk-wipe (-z and -Z) and verification (-v) operations in
  sgdisk even if the disk is badly damaged.

- Added support for setting attributes in sgdisk (-A/--attributes option)
  in sgdisk.

- Fixed bug that created backwards attribute field values (bit #2 was
  entered as bit #61, etc.).

- Fixed bug that caused creation of hybrid MBR to wipe out the MBR's boot
  code.

- Added ability to save partition table from one device to another (gdisk:
  'u' on experts' menu; sgdisk: -R or --replicate option).

- Fixed inaccessible -C/--recompute-chs option in sgdisk.

0.6.9 (7/4/2010):
------------------

- Fixed minor error in sgdisk man page (--largest-new option requires
  a partition number).

- Fixed major bug in hybrid MBR creation, which caused incorrect
  protective partition end point settings and occasionally other
  problems.

0.6.8 (5/23/2010):
------------------

- Added tests to see if the file to be opened is a directory, character
  device, FIFO, or socket; program now terminates if any of these
  conditions is met. (Linux/FreeBSD/OS X only.) Thanks to  Justin Maggard
  for this patch.

- Added 'f' option on gdisk's experts' menu (-G/--randomize-guids in
  sgdisk). This option randomizes the disk's GUID and all partitions'
  GUIDs. Intended for use after cloning a disk with a utility that copies
  the GUIDs intact (such as a raw dd copy) if you want each disk copy to
  have its own set of GUIDs.

- Added -u/--partition-guid and -U/--disk-guid options to sgdisk. These are
  the equivalents of the 'g' and 'c' options, respectively, on the gdisk
  experts' menu: They enable adjusting an individual partition's GUID or a
  disk's GUID. The GUID may be either a fully specified GUID value or 'R'
  or 'r' to set a random GUID value.

- Fixed compile problem for FreeBSD (its math library lacks a log2()
  function). Also created separate Makefile.freebsd with a couple of
  FreeBSD-specific options.

- Added -N (--largest-new) command to sgdisk. This command creates a single
  partition that fills the largest single unpartitioned block of space on
  the disk.

- Fixed sgdisk man page error: the --change-name option was incorrectly
  listed as --change.

- Added 'h' option to gdisk experts' menu (-C or --recompute-chs in sgdisk)
  to recompute all protective/hybrid MBR CHS values. This option is
  intended to work around a bug in at least one BIOS that prevents the
  computer from booting when the GPT-mandated (but technically illegal)
  0xFFFFFF CHS value is used as the end point for a protective MBR. The
  recomputed values will be legal (e.g., 0xFEFFFF instead of 0xFFFFFF),
  but incorrect in GPT terms, and will therefore enable at least one
  BIOS to boot with a GPT disk. See http://www.rodsbooks.com/gdisk/bios.html
  for all I know about BIOS/GPT incompatibilities.

0.6.7 (5/1/2010):
-----------------

- Undid earlier change, with version 0.6.4, that wiped the MBR boot loader
  when doing MBR-to-GPT conversions. I've now become skeptical that MBR
  boot loaders were causing any real problems on GPT disks, so I'm going
  back to the philosophy of leaving as much alone as possible.

- Fixed bug that caused incorrect reporting of free space on 0-size disks
  (e.g., files of 0 length passed as disk images).

- Fixed bug that caused segfault on some invalid disks

- Fixed bug that caused incorrect partition numbers to be displayed for
  some verify problems.


0.6.6 (3/21/2010):
-----------------

- Added support for the "no block IO protocol" (referred to as "hide from
  EFI" in GPT fdisk) and "legacy BIOS bootable" attribute bits. See Table
  19 of the UEFI 2.3 specification (p. 153) for details.

- Changed the sequence in which GPT data structures are written to disk;
  backups are now written first, followed by the main structures. This is
  as recommended in the UEFI 2.3 specification, since it's safer in the
  extremely unlikely event that a RAID array's size is increased and
  there's a power outage mid-write. (If the main structures are written
  first in this case, they'll point to data that's not yet been written;
  but by writing the backups first, the old main structures will still
  point to the valid old backup structures.)

- Protective MBRs now have disk signatures of 0x00000000, to better
  conform with GPT as described in the UEFI 2.3 specification.

- Added alignment information to the summary data produced by the
  'p' main-menu option in gdisk or the -p option to sgdisk.

- More alignment changes: GPT fdisk now attempts to determine the alignment
  value based on alignment of current partitions, if any are defined. If no
  partitions are defined, a default value of 2048 is set. If the computed
  value is less than 8 on drives over about 596GiB, it's reset to 8, since
  the drive might be a WD Advanced Format unit that requires an 8-sector
  (or larger power-of-2) alignment value for best performance. The
  2048-sector default provides better alignment in some RAID
  configurations.

- Changed behavior when a backup restore fails. Previously, GPT fdisk
  would create a fresh blank set of partitions. Now it does so only
  if the failure occurs when interpreting the backup's contents; if the
  user typed the wrong filename, the in-memory data structures aren't
  touched.


0.6.5 (3/7/2010):
-----------------

- Added tests to verify ('v') function and to pre-save checks to look for
  partitions that end before they begin or that are too big for their
  disks.

- Fixed a bug that could cause spurious data to appear in a grown partition
  table.

- Added ability to convert some or all partitions to logical partitions in
  GPT-to-MBR conversion. This feature is limited by the fact that at least
  one free sector must exist immediately prior to each logical partition,
  so it won't do much good if partitions are crammed together. It should be
  possible to convert back to MBR any disk that started that way, provided
  no partitions were added or resized when the disk was in GPT form; and
  disks that were partitioned with Apple's Disk Utility or other tools that
  insert unpartitioned space should also be convertible. CAUTION: THE
  LOGICAL PARTITION CREATION FEATURE DOESN'T TRY TO ALIGN PARTITIONS OR
  PARTITION HEADER DATA TO CYLINDER BOUNDARIES! It's conceivable that some
  older OSes or utilities will object to these disks, although Linux, OS X,
  Windows Vista, and Windows 7 all seem happy with them.

- Fixed bug that caused creation of 0-length file if an incorrect device
  filename was typed.

- The gdisk program now prompts for a device filename if it's called with
  no options. This enables gdisk to do something useful if it's launched by
  double-clicking its icon in a GUI environment.

- Added workaround for bug in some versions of MinGW that caused the
  program to garble input sector numbers.

- The Windows version now works on disks with over-512-byte sectors.
  Tested on a magneto-optical (MO) drive with 2048-byte sectors.

- Added -D (--display-alignment) option to sgdisk, to display sector
  alignment value (by default, 1 for sub-800GiB disks and 8 for disks
  over that size).

- Fixed bug in computation of CHS geometries for protective MBR. This is
  non-critical, since most modern utilities ignore the CHS geometries.
  Concerned users can use the 'n' option on the experts' menu to build new
  protective MBRs with the new algorithm, if desired. (Note that GNU
  Parted, at least, gets this wrong, too.)

- Fixed memory-allocation bug when reading GPT disks with partition tables
  with over 128 entries; could cause program to crash on startup.

0.6.4-2 (2/20/2010):
--------------------

Note: Neither of the following changes affects actual program code, so I've
left the version number in the program at 0.6.4.

- Altered Makefile to pass user's compiler and linker environment
  variables through.

- Added #include to gpttext.cc to enable it to compile on the latest
  GCC versions (it was failing on at least some 4.4.x compilers).

0.6.4 (2/19/2010):
-------------------

- Added -m (--gpttombr) option to sgdisk, enabling conversion of GPT
  disks to MBR format, with a limit of four partitions total, and of course
  without overcoming the 2TiB limit.

- Added -h (--hybrid) option to sgdisk, enabling creation of hybrid
  MBRs. Fewer options are available in sgdisk than in gdisk, though,
  in order to keep the user interface manageable.

- Fixed off-by-one bug in specification of partition when using the
  -T (--transform-bsd) option in sgdisk.

- Changed the code to create a new MBR unique disk signature whenever a new
  protective MBR is generated (when doing an MBR-to-GPT conversion, when
  using the 'n' option on the experts' menu, or when using the 'o' option
  on the main menu, for example). Previous versions attempted to preserve
  the existing MBR disk signature in most cases, but this resulted in
  values of 0x00000000 whenever an empty disk was partitioned, and often in
  other cases, too. Better to risk changing this value too often than to
  leave multiple disks with 0x00000000 values, I think.

- Added transpose ('t' on experts' menu in gdisk; or -r or --transpose in
  sgdisk) command to enable fine-tuning partition order without doing a
  full sort.

- Added code to clear the MBR boot loader when doing an MBR-to-GPT
  conversion. (This was already done in full-disk BSD-to-GPT conversions.)
  This is done because I've seen a few problem reports that make me think
  some MBR boot loaders freak out and hang the system when they encounter
  GPT disks, and/or they attempt to load a second-stage boot loader stored
  in what is now GPT territory, causing a system hang. Since MBR boot
  loaders don't work on GPT disks anyhow (even GRUB needs to be
  reinstalled), this new wiping behavior shouldn't cause any problems, and
  may prevent a few.

- Fixed bug in Windows version that prevented saving backup files.

- Fixed bug that caused second and subsequent partition numbers in
  prompts in hybrid MBR conversion procedure to be displayed in
  hexadecimal.

- Fixed very obscure potential bug in hybrid MBR/GPT synchronization when
  deleting partitions; code wasn't matching partition lengths correctly,
  which would only affect partitions that start at the same point but have
  different lengths in MBR vs. GPT.

- Fixed bug in the -E option to sgdisk; it was actually returning the
  last free sector, not the last free sector in the largest free block.

- Fixed bug in -t option to sgdisk; it was corrupting partition type
  codes.

- Fixed minor alignment bug in partition summary list ('p' from any menu)
  when partition sizes are between 1000 and 1024 units.

- Backup restore function ('l' on recovery & transformation menu) now
  accepts both backups generated by GPT fdisk and backups created by a
  direct copy (via dd, etc.) of the MBR, main GPT header, and main GPT
  partition table, in that order. ("dd if=/dev/sda of=backup.gpt bs=512
  count=34" will do this on Linux for a disk with a typical-sized GPT table
  of 128 entries.)

0.6.3 (2/3/2010):
------------------

- Fixed serious data corruption bug on big-endian (PowerPC and similar)
  systems.

- Changed several GPT fdisk Solaris type codes to correct a duplicate

- Corrected error in GPT fdisk type codes for NetBSD LFS and NetBSD RAID;
  they were identical, but I've now changed NetBSD RAID to A906, which
  is unique.

- Added GUID for IBM General Parallel File System (GPFS) partition type
  code. Somewhat arbitrarily set it to use the 7501 number (MBR code 0x75
  is used by IBM PC/IX, so it's at least the right company, by my loose
  numbering rules....).

- Improved GUID generation. Prior versions generated completely random
  numbers for GUIDs. This works, but is technically a violation of the
  spec. Unix versions now employ libuuid to generate GUIDs in a more
  correct way. The Windows version still generates random numbers, though.

- Turned PartTypes class into a derived class of GUIDData, and renamed
  it to PartType.

- Created new GUIDData class, to replace the original GUIDData struct.

0.6.2 (1/29/2010):
------------------

- The change-type ('t' on main menu) option now changes the partition's
  name *IF* the current name is the generic one for the partition type.
  If the current name is not the generic name, it is NOT changed.

- Fixed bug that caused new protective MBR to not be created when the
  MBR was invalid and the GPT was damaged and the user opts to try to
  use the GPT data.

- Enabled default partition type code of 0700 when creating partitions
  or changing their type codes. (Type 0700, Linux/Windows data, is set if
  the user hits the Enter key alone.)

- Fixed bug in sort ('s' on main menu) option that caused partition
  numbers to begin at more than 1 if the original partition list had
  too many empty partitions before the last one defined.

- Improved code to determine which partition table to load in case of
  CRC mismatches between the partition tables and the stored CRC values
  in the headers.

- Compiles using MinGW (http://www.mingw.org) to create a Windows binary.

- Moved all disk I/O functions to the new DiskIO class. This helps with the
  Windows port; it uses diskio-windows.cc for Windows-specific code,
  diskio-unix.cc for the Linux, FreeBSD, and OS X code, and diskio.cc for
  cross-platform disk I/O code.

- Changed BSD disklabel detection code to be more correct (I think).
  This change has no effect on my test disks, but I hope it'll work
  better on disks with sector sizes other than 512 or 2048.

0.6.1 (1/20/2010):
------------------

- Fixed bug that returned incorrect disk size on 32-bit versions of
  FreeBSD.

- Fixed bug that prevented FreeBSD version from working on disk image
  files.

- Fixed bug that caused BSD disklabel conversion to fail.

0.6.0 (1/15/2010):
------------------

- Fixed bug that caused the convert to MBR function to fail.

- Added support for disks with other than 512-byte sectors.

- Created embryonic sgdisk program.

- Fixed bug that caused relative sector numbers entered by users (e.g,
  "+128M") to be misinterpreted as from the start of the range rather than
  from the default value.

0.5.3 (1/4/2010):
-----------------

- Fixed bug in display of GUIDs when compiled with some versions of GCC.

- Eliminated warnings caused by additional checks in latest versions of
  GCC. These warnings were harmless, but to eliminate them I've added
  more error checking on disk I/O.

- Eliminated unnecessary warnings about potential data loss if the program
  was launched with the -l option or if writes aren't possible.

- Added code to set the partition boundary value based on the physical
  sector size. (FindAlignment() function.) This function, however, works
  only on Linux, and then only if the BLKPBSZGET ioctl is defined. This
  ioctl is new in kernel 2.6.32 or thereabouts.

0.5.2 (12/31/2009):
-------------------

- Modified partition creation function to begin partitions on 8-sector
  boundaries by default. This improves performance on the new Western
  Digital Advanced Format drives. The new 'd' and 'l' options on the
  experts' menu display and change, respectively, the boundary size.

- Tweaked code to produce fewer warnings on the latest versions of
  GCC.

0.5.1:
------

- Made some minor edits to the man page.

- Incorporated RPM .spec file changes contributed by Scott Collier
  (boodle11@gmail.com).

- Changed method of locating and loading backup GPT data, to use the
  main header's pointer, if it's valid, rather than seeking to the
  end of the disk.

- Added 'e' option (relocate backup GPT data structures) to the experts'
  menu.

- Fixed bug that prevented recovery of partitions in case of partially
  damaged GPT data (bad main and good backup or bad backup and good
  main header, for instance).

0.5.0:
------

- Added GPT-to-MBR conversion function. It's very limited, but potentially
  useful in some cases.

- Fixed bug that caused incorrect file sizes to be reported on 32-bit
  Linux, thus causing problems when editing partition tables in disk images
  or when loading GPT backup files.

- Fixed bug that caused bogus CRC error reports when loading backup GPT
  data.

- Reorganized menus. There are now three: the main menu, the experts' menu,
  and the recovery & transformation menu. The last of these has most of the
  items that had been on the earlier versions' experts' menu.

- Added ability to re-load the MBR and generate a fresh GPT from it. This
  is normally identical to quitting and re-running the program, but it
  could be handy if, say, the GPT partitions on a hybrid configuration are
  badly messed up; this will enable using the hybridized partitions as the
  starting point for a new GPT setup.

- The program now generates CHS values for hybrid and GPT-to-MBR conversion
  MBRs. For the moment, the assumption is the maximum number of heads and
  sectors per track (255 and 63, respectively), although the bulk of the
  code supports other values -- it'd just be awkward to enter the data in
  the user interface.

- Fixed minor display bug that caused number of sectors on the disk to be
  shown as 0 on large disks when running 32-bit binaries.

- Reverted 0.4.2's zap (destroy GPT) changes, since I don't want to wipe
  out a valid MBR if the user created that MBR over an older GPT without
  first properly wiping out the GPT, and the user now wants to wipe out
  the GPT.

- Reformatted and edited the man page. Aside from edits related to the
  preceding program changes, I've altered the markup slightly and trimmed
  much of the more tutorial information from the man page to better
  conform to typical terse man page style.

0.4.2:
------

- Code cleanup.

- Fixed very small formatting bug in display of hex code when a match isn't
  found when converting from an MBR/gdisk hex code to a GUID type code.

- Added the ability to work on disk image files (raw files for virtual
  machines, backup images, etc.). The program assumes that all such disk
  image files have 512-byte sectors.

- Added verification prompt to 'o' main-menu option to avoid accidental
  erasures of all partitions.

- The "destroy GPT data structures" option ('z' on the experts' menu) now
  also destroys all EFI GPT (0xEE) partitions in the MBR.

- Added an extra warning to the "destroy GPT data structures" option if an APM
  or BSD disklabel was detected on the disk.

- Added a buffer flush after destroying GPT data structures, to get the OS
  to read the new (empty or MBR-only) partition table.

- Fixed bug that allowed entry of nonexistent partition numbers when creating
  a hybrid MBR.

0.4.1:
------

- Code cleanup/re-organization

- Partition creation function ('n' on main menu) now uses the start of the
  largest available chunk of free space rather than the first available
  sector as the default starting sector number. This should enable easier
  partition creation if there are small bits of free space on the disk.

- You can now specify the end point of a partition by using a minus sign,
  in which case the end point is the default value minus the specified
  size. For instance, "-200M" creates a partition that ends 200MiB before
  the default end point.

- You can now specify the start point of a partition by using a plus or
  minus sign, in which case the start point is the specified distance from
  the start (+) or end (-) of free space. This is exactly the same as the
  new rules for entry of the end point, except that the default value is
  set differently.

- Deleting a partition now checks for a matching hybrid MBR partition, and
  if one is found, it's deleted. Any empty space that then surrounds the
  0xEE (EFI GPT) MBR partitions is then added to the nearby 0xEE partition.
  If no non-0xEE partitions are left, a fresh protective MBR is generated.

- Added hybrid MBR consistency check to the verify ('v') option and to
  pre-write checks. If non-0xEE/non-0x00 MBR partitions without
  corresponding GPT partitions are found, the user is warned. This finding
  does NOT prevent writing the partition table, though.

- Added non-destructive write test when opening the device file, in order
  to detect the problem with FreeBSD being unable to write to disks with
  mounted partitions (or other potential problems).

0.4.0:
------

- Added support for BSD disklabels. The program can now convert disks that
  use "raw" disklabels, with the caveat that the first partition will
  almost certainly need to be deleted because it'll overlap the main GPT
  header; and convert disklabels contained within a GPT (or a former MBR,
  converted to GPT) partition. In the latter case, the 'b' main menu option
  is used.

- Added support for compiling on FreeBSD.

- Fixed bug that could cause crashes or incomplete sorts when sorting
  the partition table.

- New partitions, including converted ones, now take on the name of the
  partition type as a default name.

- Reorganized some code; created a separate C++ class for GPT partitions
  (GPTPart), which replaced a struct and enabled moving code from the
  bloated GPTData class into GPTPart.

- Fixed a bug that produced spurious warnings about unknown sector sizes
  when loading a backup file.

0.3.5:
------

Note: This version was not officially publicly released; I wanted to test
the big-endian support while developing 0.4.0.

- Tweaked the disk type identification code to warn users to re-sync their
  hybrid MBRs when one is detected.

- Tweaked MBR-reading code to ignore 0xEE (EFI GPT) partitions. This will
  only have an effect on a poorly partitioned MBR disk that contains an
  inappropriate EFI GPT partition, or when attempting to recover a
  corrupted disk by using the hybrid MBR for data recovery.

- Added big-endian (PowerPC, etc.) support!

- Added code to identify and warn of the presence of an Apple Partition
  Map (APM) on the disk.

- Enabled MBR conversion code to handle multiple logical partitions.

0.3.4:
------

- Fixed bug that enabled (possibly accidental) entry of MBR type codes of
  0x00 in GPTData::MakeHybrid(). The fix also enables entry of default
  type code by pressing the Enter key when prompted. Applied a similar
  fix to the entry of the type code for the second protective partition,
  if one is used.

- Fixed a typo: "sectors" was spelled "sectprs" in one spot!

- Fixed bug that caused default entry for end sector to be refused if an
  initial value using a plus sign (e.g., "+20G") was also refused.

0.3.3:
------

- Gave users control over the way MBR partitions are assigned to slots in a
  hybrid MBR setup; the original method (putting the 0xEE partition after
  the real partitions) works well for non-boot disks, but both GRUB and
  GRUB2 become confused by this type of setup, so it needs changing.

- Changed "blocks" to "sectors" in GPT and MBR table displays.

- Added "Boot" column to MBR table display; shows an asterisk (*) when the
  partition's status is bootable.

0.3.2:
------

- Changed __DARWIN_UNIX03 to __APPLE__ as code to enable MacOS X support.

- Added the ability to create a hybrid MBR ('h' on experts' menu). This was
  motivated by my discovery that Windows 7 remains brain-dead when it comes
  to the ability to boot from a GPT disk, at least on BIOS-based machines.

- Added 'z' option to experts' menu, to destroy GPT data structures and
  exit. The intent is to use this feature to enable subsequent partitioning
  of the disk using fdisk or other GPT-unaware tools. (GNU Parted will wipe
  the GPT data structures itself when you create a new MBR ["msdos
  disklabel," in Parted parlance], so using Parted is another option.)

- Slightly altered the effect of the 'o' command on the main menu. It now
  blanks out the protective MBR, as well as the GPT data.

0.3.1:
------

- Added Mac OS X support, provided as a patch by David Hubbard
  (david.c.hubbard@gmail.com).

- Fixed bug in disksize() function on Mac OS. (Possibly dependent on the
  kernel and/or GCC version.) The disk size, of type uint64_t, was not
  being passed correctly, so I reorganized the function to return it as
  the function's return value rather than as a parameter. This seems to
  work OK on my Mac OS test system and on both 32- and 64-bit Linux
  systems.

- Fixed off-by-one bug in GPTData::FindLastAvailable().

- Fixed bug that caused display of options after a disk-write error.

- Fixed several incorrect MacOS X partition type GUIDs, thanks to Yves
  Blusseau (1otnwmz02@sneakemail.com).

0.3.0:
------

- Changed version number to 0.3.0, reflecting the fact that I've received
  no significant bug reports and so am elevating the program to "beta"
  status. This change also entailed altering the warning the program
  displays when saving partition table changes.

- Fixed minor bug in CHS geometry of the protective MBR's type EE partition
  (was producing 0x000200 as the start value, but should be 0x000100).
  Should be a non-critical bug since the protective MBR partition
  definition is only there to keep MBR-only disk utilities from messing
  with the disk.

- Added ability to enter GUIDs as single massive strings rather than in
  chunks.

0.2.2:
------

- Added #include directives required to compile the program using GCC
  4.4.0.

0.2.1:
------

- Fixed partition numbering problem in reports of partition overlaps in
  verification function.

- Fixed 1-sector partition size problem when creating new partitions
  (partitions were 1 sector too big when using the +size option).

- Changed BytesToSI() to display values in bytes without decimal points
  (e.g., "512 bytes" rather than "512.0 bytes").

- Added GPTData class member functions to retrieve GPT data structure
  locations on disk; used in my internal-use-only GPT-wiping program.

- Eliminated the "a reboot is recommended" notice after writing the
  partition table.

- Added notice after sorting the partition table to the effect that
  editing /etc/fstab and/or the boot loader files may be required.

- Fixed bug in MBR-reading function that caused 0x0f (Win95 LBA) and 0x85
  (Linux extended) extended partitions to not be read.

- Fixed bug in GetLastSector() (in support.cc) that would have prevented
  correct user entry of over-32-bit sector numbers on 32-bit systems.

- Made some changes/corrections to the partition type list in
  parttypes.cc. Most of these were based on newly-discovered MBR type
  codes for Apple (Mac OS X) filesystems.

- General code cleanup (setting explicit casts, etc.)

0.2.0:
------

- Initial semi-public release
