11.0.5 (?/?/2020):
2-----------------
3
4- Fixed typos and minor formatting issues in man pages
5
6- Changed number of columns in type code output ("sgdisk -L" and equivalents
7  in gdisk and cgdisk) from 3 to 2, since some descriptions are long enough
8  that they're ambiguous with three columns.
9
101.0.4 (7/5/2018):
11-----------------
12
13- Added some explicit copy constructors and made some other tweaks to avoid
14  compiler warnings.
15
16- The macOS binary for sgdisk is now a pure 64-bit build; I'm no longer
17  supporting 32-bit builds of sgdisk. The gdisk and cgdisk binaries remain
18  "fat" 32-/64-bit builds. The reason for dropping the 32-bit support from
19  sgdisk is that I've re-built my macOS development system, and I had
20  trouble building a "fat" binary with the fresh install of the popt
21  libraries upon which sgdisk relies. 32-bit support for the other binaries
22  is now officially deprecated, too.
23
24- Added search feature to partition type list functions ("L" on main menu of
25  gdisk and "L" when entered in response to the "Hex code or GUID" prompt in
26  gdisk and sgdisk). This feature filters the partition type list to those
27  which include the search term in their GPT fdisk descriptions. For
28  instance, typing "Linux" shows only partitions with "Linux" in their
29  descriptions. Note that the search/filter is case-sensitive. If <Enter> is
30  pressed, no filter is applied.
31
32- Change to Makefile.mac to use standard libncurses rather than a 3rd-party
33  version; should help with cgdisk compatibility.
34
35- Minor bug fix in alignment of internal data structures.
36
37- Minor bug fix in handling of damaged disks. Also, GPT fdisk now reports
38  more information on what data structures are damaged when a damaged disk
39  is detected.
40
41- Added type code for Apple APFS (7C3457EF-0000-11AA-AA11-00306543ECAC,
42  0xaf0a).
43
44- Added type code for Atari TOS basic data (0xa200,
45  734E5AFE-F61A-11E6-BC64-92361F002671).
46
47- Added type codes for Linux dm-crypt (0x8308,
48  7FFEC5C9-2D00-49B7-8941-3EA10A5586B7) and LUKS (0x8309,
49  CA7D7CCB-63ED-4C53-861C-1742536059CC) partitions.
50
51- Added 18 Ceph partition type codes.
52
53- Added 52 (yes, 52!) Android partition type codes.
54
55- Changed "Creating new GPT entries" message to read "Creating new
56  GPT entries in memory" because the latter is clearer, particularly when
57  using sgdisk with a non-destructive option, like "-p".
58
591.0.3 (7/27/2017):
60------------------
61
62- Fixed a major bug that caused invalid partition tables to be generated
63  when creating a new partition table (that is, partitioning a blank disk or
64  converting from MBR).
65
661.0.2 (7/26/2017):
67------------------
68
69- On Linux, the p/-p/--print command now shows the disk's model name, as
70  reported in /sys/block/sda/device/model (or equivalent filenames for other
71  disks). This feature does not yet work on other platforms, on which the
72  model name line is omitted from the output. This line is also not shown
73  when accessing disk image files, even on Linux.
74
75- GPT fdisk can now report both the physical and logical sector sizes of
76  disks, but only on 2.6.32 and later Linux kernels. The verify feature now
77  uses the larger of the set alignment and physical/logical block sizes for
78  testing alignment, and setting alignment to something other than an exact
79  multiple of the ratio of the physical to logical block size results in a
80  warning.
81
82- Addition of new verification checks, mostly (but not exclusively) related
83  to the new j/-j/--move-main-table option.
84
85- Added new option: 'j' on the experts' menu in gdisk;
86  '-j/--move-main-table={sector}' in sgdisk. This option enables relocating
87  the main partition table from sector 2 (the default location) to somewhere
88  else on the disk. The main reason I know of to do this is if the disk is
89  to be used with a system-on-chip (SoC) computer, some of which require the
90  boot loader to be located at sector 2. If you pass this option the default
91  value of 2, it has the effect of reducing the padding placed between the
92  main partition table and the first usable sector value created by the
93  Linux fdisk tool.
94
95- Updated man pages with new recommendations for ESP and BIOS Boot Partition
96  sizes.
97
98- Added four type codes (AF06 through AF09) for Apple SoftRAID (Status,
99  Scratch, Volume, and Cache).
100
101- Added two type codes for the Open Network Install Environment (ONIE):
102  0xe100 (7412F7D5-A156-4B13-81DC-867174929325) and 0xe101
103  (D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149).
104
105- Added thirteen type codes for Android partitions (0xa000 through
106  0xa00c).
107
108- Added type code for QNX6 (aka QNX Power-Safe) filesystem: 0xb300, for
109  CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1.
110
111- Removed stray debug message ("REALLY setting name!") from sgdisk,
112  when setting new name via -c option.
113
1141.0.1 (10/18/2015):
115-------------------
116
117- Created uninstall-fixparts and uninstall-gdisk scripts for OS X. As the
118  names imply, these scripts remove the files installed by the fixparts and
119  gdisk packages, respectively.
120
121- Fixed bug that caused -N/--largest-new option to sgdisk to fail when
122  fed a "0" option.
123
124- Fixed bug that caused input glitches in EFI version of gdisk.
125
126- Fixed bug that caused sgdisk to not return an appropriate error code
127  when it encountered a write error when saving changes.
128
129- Fixed bug that caused cgdisk's "Info" display to under-report the
130  partition's size by one sector.
131
132- OS X 10.11 includes new security features that prevent GPT fdisk from
133  working unless these features are disabled. To do so, you must boot to a
134  Recovery HD system, open a Terminal, type "csrutil disable", and reboot
135  into the normal system. You can re-enable the security features by
136  repeating the process, but specify "enable" rather than "disable". I've
137  added a message pointing users to a Web page explaining how to disable
138  this feature when gdisk detects that it can't write to the disk under OS
139  X. If you know of a way around this (including code changes to gdisk),
140  please contact me.
141
142- I've updated the OS X installation location from the Unix-standard
143  /usr/sbin (and related locations for documentation) to /usr/local/bin
144  (and related locations for documentation). This is Just Plain Crazy from
145  a Unix point of view, but Apple has to be Apple and do things just a
146  little bit differently.
147
148- I've updated my OS X environment to OS X 10.11 and LLVM 7.0.0. This has
149  also meant installing fresh versions of popt and ncurses from MacPorts,
150  which may require upgrading popt to get sgdisk working on some systems.
151  (gdisk, cgdisk, and fixparts should continue to work normally on all
152  systems.) The OS X binaries are now "fat" (32- and 64-bit) versions,
153  which should have no noticeable effect unless you have a Mac with broken
154  32-bit support, in which case the binaries will now work.
155
156- Changed the default name of 0xab00 partitions from "Apple boot" to
157  "Recovery HD", since the latter is the name that Apple gives these
158  partitions. Also, I discovered through painful experience that OS X
159  flakes out and won't boot if the name is something other than "Recovery
160  HD", so it really has to have the right name!
161
162- Changed the OpenBSD type codes (0xa600 and 0xa601): 0xa600 is now
163  824CC7A0-36A8-11E3-890A-952519AD3F61 (OpenBSD disklabel) and 0xa601 is
164  now gone. Previously, 0xa600 was 516E7CB4-6ECF-11D6-8FF8-00022D09712B, a
165  duplicate of the FreeBSD disklabel, and 0xa601 was
166  824CC7A0-36A8-11E3-890A-952519AD3F61. OpenBSD is now officially
167  supporting 824CC7A0-36A8-11E3-890A-952519AD3F61 as a disklabel type,
168  though. It's unclear what, if anything, OpenBSD will use for
169  non-disklabel type codes at the moment.
170
171- Added GUID 0311FC50-01CA-4725-AD77-9ADBB20ACE98 (0xbc00) for
172  Acronis Secure Zone backup partitions.
173
174- Fixed bug that caused random crashes on ppc64el systems (and perhaps
175  others).
176
177- Added GUID C91818F9-8025-47AF-89D2-F030D7000C2C (0x3900) for Plan 9.
178
179- Added GUID 69DAD710-2CE4-4E3C-B16C-21A1D49ABED3 (0x8307) for 32-bit ARM
180  Linux root (/) partition, as per the Freedesktop.org Discoverable
181  Partition Spec
182  (http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/).
183
184- Edited man pages to clarify that default alignment is to 1MiB boundaries;
185  this translates to 2048 sectors on disks with 512-byte sectors, but it
186  will be something else on disks with other sector sizes.
187
188- Changed behavior of -z/--zap and -Z/--zap-all options to sgdisk so that
189  if a subsequent command causes changes, they'll be written to disk.
190  Previously, doing something like "sgdisk --zap-all --clear /dev/sdd"
191  would wipe the disk but not create a partition table; to create a blank
192  table you'd need to do "sgdisk --zap-all --clear --mbrtogpt /dev/sdd",
193  which is a bit odd and counter-intuitive, to the point of arguably being
194  a bug.
195
1961.0.0 (3/16/2015):
197------------------
198
199- I'm now building a binary package of gdisk_x64.efi, using the UEFI GPT
200  fdisk package.
201
202- Added partition type for OpenBSD data
203  (824CC7A0-36A8-11E3-890A-952519AD3F61/0xa601). Also mapped 0xa600 to the
204  FreeBSD disklabel type code (516E7CB4-6ECF-11D6-8FF8-00022D09712B). I'm
205  not sure that's 100% correct, but since I can't find references to an
206  OpenBSD disklabel GPT type code, it seems the best choice at the moment.
207
208- Added partition type for Windows Storage Spaces
209  (E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D/0x4202)
210
211- Added -O/--print-mbr option to sgdisk, enabling easier display of MBR
212  data structures without invoking gdisk.
213
214- Updated warning message: "EBR describes a logical partition" now reads
215  "EBR points to an EBR," which is more technically correct.
216
217- Altered warning displayed when run from Windows on non-GPT disk, because
218  Windows on UEFI-based systems is becoming more common.
219
220- Fixed spurious "1" return value in gdisk.
221
222- Small code changes to support compilation as EFI application with the
223  UEFI GPT fdisk library
224  (http://sourceforge.net/projects/uefigptfdisk/?source=directory)
225
226- Added new partition type codes for Ceph
227  (https://github.com/ceph/ceph/blob/9bcc42a3e6b08521694b5c0228b2c6ed7b3d312e/src/ceph-disk#L76-L81):
228  4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D/0xf800 (Ceph OSD),
229  4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D/0xf801 (Ceph dm-crypt OSD),
230  45B0969E-9B03-4F30-B4C6-B4B80CEFF106/0xf802 (Ceph journal),
231  45B0969E-9B03-4F30-B4C6-5EC00CEFF106/0xf803 (Ceph dm-crypt journal),
232  89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE/0xf804 (Ceph disk in creation), and
233  89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE/0xf805 (Ceph dm-crypt disk in
234  creation)
235
236- Added new partition type codes from
237  http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/:
238  44479540-F297-41B2-9AF7-D131D5F0458A/0x8303 (Linux / on x86),
239  4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709/0x8304 (Linux / on x86-64),
240  B921B045-1DF0-41C3-AF44-4C6F280D3FAE/0x8305 (Linux / on 64-bit ARM),
241  3B8F8425-20E0-4F3B-907F-1A25A76F98E8/0x8306 (Linux /srv).
242
2430.8.10 (3/2/2014):
244------------------
245
246- Added feature to sgdisk's -A/--attributes, -c/--change-name,
247  -t/--typecode, and -u/--partition-guid commands: If a -n/--new option
248  with "0" as the partition number precedes these options on the command
249  line, passin "0" as the partition number to the following options causes
250  them to use the newly-created partition. For instance, "sgdisk -n
251  0:0:+550M -t 0:EF00 /dev/sda" creates a new partition with a type code of
252  EF00. (Previous versions would ignore the "-t 0:EF00" option.)
253
254- Fixed bug that caused incorrect partition number to be displayed by
255  sgdisk in error messages when the user specified a non-existent partition
256  for inclusion in a hybrid MBR or conversion to a conventional MBR.
257
258- Fixed new (in 0.8.9) bug that caused a failure to create more than one
259  hybridized partition when creating a hybrid MBR.
260
261- Fixed bug that caused gdisk and sgdisk to create hybridized partitions
262  that ended at or above the 2^32 sector point with incorrect end values.
263  The behavior now varies between gdisk and sgdisk: gdisk now creates
264  hybrid partitions that begin below 2^32 sectors and that are smaller than
265  2^32 sectors, since this is technically legal; but gdisk displays a
266  warning, because some OSes (such as DOS, Windows XP, OS/2, and BeOS)
267  misbehave with such partitions. AFAIK, only Linux, FreeBSD, and Windows 7
268  work properly with such partitions. Because of this fact and because
269  sgdisk is a more automated tool, it's stricter in how it handles things:
270  It refuses to create a hybrid partition if the original ends at or above
271  the 2^32 sector mark.
272
2730.8.9 (2/17/2014):
274------------------
275
276- Removed dependency on libicu for UTF-16 support.
277
278- Fixed spurious "0xEE partition doesn't start on sector 1" warning in
279  FixParts (and perhaps in other programs under some circumstances).
280
281- Added GPT regeneration command to GPT-destruction options ('z' in gdisk,
282  -z and -Z options to sgdisk). This is done to avoid wiping out data
283  mid-disk that might not be backup GPT data structures, which could
284  otherwise occur if a RAID array was resized in certain ways.
285
286- Added check for an oversized 0xEE protective partition. The program now
287  auto-repairs this condition on loading if the GPT data seem otherwise
288  valid. This is done because I've been receiving reports of some disks
289  (possibly from some OEM Windows 8 loads) that violate the GPT spec in
290  this way, and gdisk was reporting write errors when saving data.
291
292- If the GPT data seem to be damaged in some way or if the disk seems to
293  be a hybrid MBR and if the MBR partition(s) don't fit on the disk, the
294  verify (v) function now warns of this condition, and writing the disk if
295  it exists also displays a more specific error message about the problem.
296
297- Added new type codes (3000, 7412F7D5-A156-4B13-81DC-867174929325 and
298  3001, D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149) for Open Network Install
299  Environment (ONIE) boot and config partitions, respectively.
300
301- Added new type ccde (ED01, BFBFAFE7-A34F-448A-9A5B-6213EB736C22), for
302  Lenovo's ESP-like partition.
303
3040.8.8 (10/14/2013):
305-------------------
306
307- Fixed bug that could cause segfault when passing an invalid partition
308  number to sgdisk's -i/--info command.
309
310- Added new type code: 933AC7E1-2EB4-4F13-B844-0E14E2AEF915, or gdisk code
311  8302, for Linux /home partitions. This type code is used by recent
312  versions of systemd to permit /home to be auto-mounted; see
313  http://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html
314  for details.
315
316- Added new type code: 9E1A2D38-C612-4316-AA26-8B49521E5A8B, or gdisk code
317  4100, for PowerPC PReP (PowerPC reference platform) boot.
318
319- The number of partition type codes has grown large enough that it fills
320  an 80x24 display. I've therefore added a pause (with a prompt to hit
321  <Enter>) to display more items after showing 21 lines in gdisk or after
322  the screen has nearly filled with entries in cgdisk. There's no such
323  pause/prompt in sgdisk, though.
324
325- Fine-tuned verification ('v') check for 0xEE partition that doesn't begin
326  on sector 1: Previously, a disk with multiple 0xEE partitions would
327  always trigger this warning. Now, the warning occurs only if NONE of the
328  0xEE partitions begins on sector 1.
329
330- Fixed hybrid MBR creation on disks larger than 2TiB: Previously, if one
331  opted to create an extra partition to cover unused space following
332  hybridized partitions, gdisk would hang.
333
334- Added check for an active/bootable 0xEE protective partition to the
335  verify ('v') function. If found, this is not counted as an error, but
336  it is called out to the user, since it can cause some EFIs (such as
337  VirtualBox's EFI) to ignore the disk.
338
3390.8.7 (7/8/2013):
340-----------------
341
342- Modified Mac version so that it can work on /dev/rdisk* devices as well
343  as /dev/disk* devices. The result is that, when using the /dev/rdisk*
344  devices, the partition table can sometimes be re-read without removing
345  the disk or rebooting.
346
347- Added "-a" option to cgdisk to use a ">" symbol to the left of the
348  selected partition rather than ncurses highlighting.
349
350- Modified "converting MBR to GPT" message to clarify that the conversion
351  is being held in memory, since some people have mistakenly assumed that a
352  "gdisk -l" operation will change an MBR disk to a GPT disk without
353  prompting.
354
355- Added partition type code for freedesktop.org's proposed $BOOT partition
356  (bc13c2ff-59e6-4262-a352-b275fd6f7172; GPT fdisk type code EA00)
357
358- Adjusted alignment code when using -n or -N in sgdisk to keep the
359  requested partition size (if specified using +###{MGT} terminology)
360  as the requested value rather than relative to the requested start
361  point. This gives you the requested partition size rather than be
362  slightly smaller if sgdisk needs to adjust the start point up a bit and
363  it prevents gaps from appearing between partitions if several are created
364  in succession using automatic placement of the start point.
365
366- Fixed small bugs in gdisk_test.sh script.
367
368- Removed stray debug message that would appear when reading MBR disks.
369
370- Added partition type code for Intel Rapid Start partition (GUID
371  D3BFE2DE-3DAF-11DF-BA40-E3A556D89593, code 8400), used by systems that
372  implement Intel's Rapid Start technology. See
373  http://blog.adios.tw/2012/10/funtoo-linux-and-intel-rapid-start.html or
374  http://mjg59.dreamwidth.org/26022.html.
375
376- Added partition type code for Haiku BFS (GUID
377  42465331-3BA3-10F1-802A-4861696B7521; code EB00).
378
3790.8.6 (1/9/2013):
380-----------------
381
382- Fixed a bug that could cause sgdisk to crash when passing a partition
383  number of 0 to the -t option.
384
385- Added support for building under Solaris.
386
387- Added a new check to the verification code.
388
389- Added partition type code for Sony system partition
390  (F4019732-066E-4E12-8273-346C5641494F). I'm not entirely clear what this
391  is used for, but it's appearing on some new Sony computers.
392
393- Tweaked hybrid MBR creation options to fix a problem that caused the main
394  0xEE MBR partition to NOT be created if the user told gdisk to NOT place
395  it at the start of the disk AND IF fewer than three partitions are
396  hybridize AND IF the user opted to create a second protective partition.
397
398- Changed default build options for Mac OS X to *NOT* use libicu,
399  since it seems to have broken somewhere along the line. It still
400  works on Linux, though.
401
402- Added partition type codes for VMWare ESX (FB00, FB01, and FC00).
403
4040.8.5 (5/30/2012):
405------------------
406
407- Changed code that writes the partition table so that a disk sync
408  operation occurs even if one or more write operations failed (but not if
409  they all failed). This is intended to work around a bug that a user
410  reported on a Windows system on which the write of the protective MBR
411  failed, although everything else worked. (I suspect anti-virus software
412  may have been blocking write access to the MBR.)
413
414- Added type codes for Midnight BSD (0xA580 - 0xA585). I used these codes
415  because Midnight BSD uses the same 0xA5 type code as FreeBSD on MBR
416  disks, so I'm starting Midnight BSD's numbering halfway through the
417  0xA5## range.
418
4190.8.4 (3/25/2012):
420------------------
421
422- REALLY fixed Ctrl+D problems! Now gdisk terminates upon receiving a
423  Ctrl+D. In all previous versions, it could lock itself into a CPU-hogging
424  loop if launched via "sudo" from a terminal window that was then closed
425  or if Ctrl+D was pressed at certain input prompts (for a partition name
426  or sector number, for instance).
427
4280.8.3 (3/23/2012):
429------------------
430
431- Fixed compilation problem on GCC 4.7.
432
433- Improved handling of Ctrl+D on some systems.
434
435- Added disk's name to message stating that a disk write was successful.
436
437- Fixed bug that caused creation of >2TiB partitions on 32-bit systems to
438  be truncated in sgdisk.
439
4400.8.2 (1/22/2012):
441------------------
442
443- Adjusted the code to support a number of partitions that's not a multiple
444  of the number of partition table entries that fits in a sector (normally
445  4 per sector). The program still rounds up, when necessary, when resizing
446  the partition table manually, but not when loading a partition table that
447  contains a peculiar number of partitions. This helps prevent spurious
448  error messages about CRC problems when loading some Solaris partition
449  tables.
450
451- Fixed bugs relating to the handling of empty partitions; Solaris's ZFS
452  tools create weird empty partitions that are legal but that gdisk wasn't
453  handling properly. (Specifically, they sometimes have non-zero end
454  points; gdisk assumed empty partitions had end points of 0.)
455
456- Fixed a bug that caused an infinite loop of input prompts if the user
457  pressed Ctrl+D.
458
459- Changed gdisk's first-sector input operation to specify a sector number
460  that's properly aligned as the default value. This eliminates the need
461  to alter that value and notify the user of the change when the user
462  hits "Enter" for the default value as the first partition on an empty
463  disk (as well as in some other situations).
464
4650.8.1 (10/1/2011):
466------------------
467
468- Fixed bug that could cause FixParts to keep a partition's assignment
469  as logical when FixPart could not actually do so. This could happen
470  when there are no gaps between two logical partitions. Some partitioning
471  tools can create such configurations, but FixParts can't. Such
472  configurations are extremely rare. I've only encountered them when
473  logical partitions are out of order.
474
475- Added code to detect infinite loops of logical partitions when reading
476  MBR data. When detected, the program now stops reading after the first
477  loop, so no duplicates appear in the partition list.
478
479- Fixed bug in partition overlap detection in MBR code.
480
481- Changed GPT reading code to use the size encoded in GPT headers to
482  determine how much of the header to use in computing a CRC, with the
483  restriction that the size be equal to or less than the disk's sector
484  size. This should work around problems with libefi in ZFS, which sets the
485  header size to 512 rather than the more common 92. A caveat: If the
486  disk's sector size is larger than the GPTHeader data structure size (512
487  bytes), then the rest of the sector's contents are ignored and replaced
488  with 0 values. This could produce false positives on CRC checks on disks
489  with over-512-byte sector sizes if the header sector is padded with
490  something other than 0 values.
491
492- Fixed bug in new (as of 0.8.0) check that main and backup partition
493  tables are identical on big-endian (PowerPC, etc.) hardware.
494
4950.8.0 (9/10/2011):
496------------------
497
498- Added new return option for sgdisk: 8, which means that a replication
499  operation (-R or --replicate) failed. Note that other operations on
500  the same command line might still have succeeded.
501
502- Added gdisk_test.sh shell script, contributed by Guillaume Delacour.
503  This script tests some common gdisk and sgdisk operations to be sure
504  they're working correctly.
505
506- Enable sgdisk's -l (--load-backup) and -o (--clear) options to work
507  even on disks that are damaged. Most other options will still be ignored,
508  though, so if you suspect a disk may be bad and want to use one of these
509  options, you should do so on a line by itself, followed by a separate
510  command to perform other actions (such as adding new partitions).
511
512- Added check for mis-matched primary and backup partition tables.
513  A mismatch is reported as a CRC error.
514
515- Added Apple Core Storage partition type code (hex code AF05, GUID
516  53746F72-6167-11AA-AA11-00306543ECAC).
517
518- Added cgdisk program to the family. This program is a rough workalike
519  to cfdisk, much as gdisk is a rough workalike to fdisk. See the cgdisk
520  man page or http://www.rodsbooks.com/gdisk/cgdisk-walkthrough.html for
521  details about its operation.
522
523- Fixed bug that caused CHS end point for protective MBR to be set to
524  0xfeffff rather than the spec-mandated 0xffffff on disks over ~8GB. This
525  is a very minor bug, since not much cares about this, and most other GPT
526  tools get it wrong in the same way, too.
527
5280.7.2 (6/26/2011):
529------------------
530
531- The Windows version now (finally!) generates proper GUIDs rather than a
532  purely random number. This fixes a bug that caused Windows 7 to crash
533  when converting a disk from MBR format (but, oddly, not when creating a
534  fresh partition table or doing various other things).
535
536- Added a warning when an MBR partition is discarded because it's too
537  big for the disk.
538
539- Changed warning to Windows users about the dangers of converting to GPT
540  so that it appears only on disks that aren't already in GPT form.
541
542- Fixed bug that caused bogus "3" values to pad the ends of partition names
543  on some disks (particularly those created by Microsoft's disk
544  partitioning tools).
545
546- Made compilation without Unicode support possible (see README file)
547
548- Made default filesystem type code OS-dependent (based on the compilation
549  platform).
550
551- Added new Linux-only filesystem partition type GUID code,
552  0FC63DAF-8483-4772-8E79-3D69D8477DE4 (8300 entry code). Also changed name
553  of the EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (0700 entry code) to
554  "Microsoft basic data").
555
556- Fixed a bug that caused an incorrect code to be set for active/bootable
557  partitions when generating a hybrid MBR.
558
559- Enable entry of hex codes that begin with "0x" for both GPT and MBR
560  partitions.
561
562- Fixed bug that caused the boot loader code to be lost when creating a
563  hybrid MBR.
564
565- Fixed bug in sector input code that could produce improper values
566  if the user inputs ridiculously large "+" values.
567
5680.7.1 (3/21/2011):
569------------------
570
571- Added support for proper UTF-16LE partition names rather than the
572  "shortcut" that properly encoded only ASCII names. This support works
573  only in Linux, FreeBSD, and OS X, though, at least for the moment.
574  Although it's possible to compile this support into Windows when using
575  Visual C++, it doesn't seem to work properly. Since using this feature
576  would require distributing the ICU libraries with the Windows binary,
577  thus bloating the binary package's size to no effect, I've disabled it in
578  my standard Windows build, at least for now.
579
580- Added check to fixparts to keep it from operating on devices that
581  lack an existing MBR signature. (In 0.7.0, it could write an empty
582  MBR data structure to a device on which it was mistakenly launched.)
583
584- Fixed bug that caused the protective MBR to not be written when
585  restoring a backup of the GPT data.
586
587- Fixed bug that caused second protective MBR partition, when created
588  as part of a hybrid MBR, to always be of type 0xEE, even when the
589  user specified something else.
590
591- Integrated a number of code cleanups contributed by Florian Zumbiehl.
592
5930.7.0 (3/11/2011):
594------------------
595
596- Fixed bug that caused some types of logical partitions to be misread.
597
598- Created FixParts program, to fix problems on MBR-partitioned disks.
599  Although this program is part of the GPT fdisk family, it is NOT used on
600  GPT disks.
601
602- Completely redid the GPT-to-MBR code, used both for converting to MBR
603  form and for creating hybrid MBRs.
604
605- Fixed a bug that caused gdisk to "forget" some partitions if there were
606  numbering gaps when a conversion to MBR was aborted.
607
608- Improved CHS value creation on small (<~8GB) disks for protective MBR
609  and when creating hybrid MBRs or converting to MBR format. Linux-only,
610  for the moment; other platforms still produce bad CHS values on sub-~8GB
611  disks (but few OSes care these days).
612
613- Enhanced disk replication features ('u' on the experts' menu in gdisk; -R
614  or --replicate in sgdisk). It's now possible to replicate the partition
615  table from a larger to a smaller disk, so long as all the partitions fit
616  on the smaller disk. In sgdisk, the secondary GPT data are moved
617  automatically if disk sizes don't match. In gdisk, the secondary GPT data
618  are moved automatically if the target disk is smaller than the source
619  disk; if the target disk is larger than the source disk, the user is
620  given the option of making this adjustment.
621
622- Fixed --load-backup (-l) option to sgdisk, which was broken.
623
624- Changed largest drive that's not given a minimum 4 KiB alignment even
625  when smaller alignment is detected on the disk to 300 GB.
626
627- Fixed bug that prevented aborting a partition table backup ('u' on the
628  experts' menu) by hitting the Enter key for the device filename.
629
630- Implemented a number of code cleanups provided by Florian Zumbiehl.
631
6320.6.14 (1/8/2011):
633------------------
634
635- Made small change to the way the start sector is interpreted if you use a
636  "+" specification, as in "+2G" to locate a partition 2 GiB into the
637  default range. This change makes adjustments for sector alignment less
638  likely.
639
640- Modified sgdisk's -n (--new) option to work with relative start and end
641  values (which the man page incorrectly stated it already did). Values of
642  0 for the start and end sectors refer to the first and last available
643  sectors in the largest free block, and a partition number of 0 refers to
644  the first available partition.
645
646- Added ChromeOS GUID values to list of recognized partition type GUIDs.
647  7F00 = ChromeOS kernel, 7501 = ChromeOS root, 7502 = ChromeOS reserved.
648  Untested on actual ChromeOS system.
649
650- Tweaked APM detection to look for APM signature even if an MBR
651  signature has already been found. Helps in diagnosis of cases
652  in which an MBR has overwritten an APM disk.
653
6540.6.13 (10/12/2010):
655--------------------
656
657- Added notification about nonexistent partitions to hybrid MBR creation
658  in gdisk.
659
660- Fixed bug in GPT-to-MBR conversion that could sometimes enable creation
661  of an extended partition that overlaps a preceding partition.
662
663- Fixed bug in GPT-to-MBR conversion that prevented creation of an MBR
664  table with logical partitions if there were four or fewer partitions.
665
6660.6.12 (10/7/2010):
667-------------------
668
669- Adjusted alignment code to use 1 MiB alignment by default for drives with
670  other than 512-byte sector sizes. (Previous versions increased this --
671  for instance, to 4 MiB for drives with 2048-byte logical sector size.)
672
673- Entry of non-hexadecimal value for partition type code now causes
674  re-prompting for a new value, fixing a recently-introduced minor bug.
675
676- Fixed bug in sector entry using K/M/G/T/P suffixes on disks with
677  other-than-512-byte sector numbers.
678
679- Added "P" (PiB, pebibyte) suffix to suffixes accepted in entering
680  partition sizes.
681
682- Fixed bug that caused sgdisk to segfault if fed the (invalid)
683  "-A show" parameter. Now it terminates with a complaint about an invalid
684  partition number 0.
685
686- Removed warning when running on big-endian hardware, since this
687  support has been present for quite a while with no bug reports.
688
6890.6.11 (9/25/2010):
690-------------------
691
692- Added -F (--first-aligned-in-largest) option to sgdisk. This option is a
693  variant on -f (--first-in-largest); it returns the number of the first
694  sector that will be used in the largest free area, given the current
695  alignment value (set via -a/--set-alignment).
696
697- Streamlined GUID code entry in gdisk; it no longer offers the option
698  to enter GUIDs in separate segments.
699
700- The -t option to sgdisk now accepts GUID values as well as the
701  sgdisk/gdisk-specific two-byte hex codes.
702
703- Added check that the protective 0xEE MBR partition begins on sector 1
704  to the verify function. If it doesn't, a warning message is displayed,
705  but it doesn't count as an error.
706
707- Added check for overlapping MBR partitions to verify function (gdisk "v"
708  function on all menus; sgdisk -v/--verify function). Also warns about
709  multiple MBR 0xEE partitions (causes problems in some OSes).
710
711- Added check to GPT-to-MBR and hybrid MBR creation options to prevent
712  creation of disks with duplicate partitions. When told to create a disk
713  with duplicates, sgdisk now aborts with the error message "Problem
714  creating MBR!" When attempting to create a hybrid MBR with duplicates,
715  gdisk silently drops duplicate partitions, leaving fewer than requested.
716  Creating duplicates should not be possible in sgdisk when converting to
717  MBR form.
718
7190.6.10 (8/22/2010):
720-------------------
721
722- Enable disk-wipe (-z and -Z) and verification (-v) operations in
723  sgdisk even if the disk is badly damaged.
724
725- Added support for setting attributes in sgdisk (-A/--attributes option)
726  in sgdisk.
727
728- Fixed bug that created backwards attribute field values (bit #2 was
729  entered as bit #61, etc.).
730
731- Fixed bug that caused creation of hybrid MBR to wipe out the MBR's boot
732  code.
733
734- Added ability to save partition table from one device to another (gdisk:
735  'u' on experts' menu; sgdisk: -R or --replicate option).
736
737- Fixed inaccessible -C/--recompute-chs option in sgdisk.
738
7390.6.9 (7/4/2010):
740------------------
741
742- Fixed minor error in sgdisk man page (--largest-new option requires
743  a partition number).
744
745- Fixed major bug in hybrid MBR creation, which caused incorrect
746  protective partition end point settings and occasionally other
747  problems.
748
7490.6.8 (5/23/2010):
750------------------
751
752- Added tests to see if the file to be opened is a directory, character
753  device, FIFO, or socket; program now terminates if any of these
754  conditions is met. (Linux/FreeBSD/OS X only.) Thanks to  Justin Maggard
755  for this patch.
756
757- Added 'f' option on gdisk's experts' menu (-G/--randomize-guids in
758  sgdisk). This option randomizes the disk's GUID and all partitions'
759  GUIDs. Intended for use after cloning a disk with a utility that copies
760  the GUIDs intact (such as a raw dd copy) if you want each disk copy to
761  have its own set of GUIDs.
762
763- Added -u/--partition-guid and -U/--disk-guid options to sgdisk. These are
764  the equivalents of the 'g' and 'c' options, respectively, on the gdisk
765  experts' menu: They enable adjusting an individual partition's GUID or a
766  disk's GUID. The GUID may be either a fully specified GUID value or 'R'
767  or 'r' to set a random GUID value.
768
769- Fixed compile problem for FreeBSD (its math library lacks a log2()
770  function). Also created separate Makefile.freebsd with a couple of
771  FreeBSD-specific options.
772
773- Added -N (--largest-new) command to sgdisk. This command creates a single
774  partition that fills the largest single unpartitioned block of space on
775  the disk.
776
777- Fixed sgdisk man page error: the --change-name option was incorrectly
778  listed as --change.
779
780- Added 'h' option to gdisk experts' menu (-C or --recompute-chs in sgdisk)
781  to recompute all protective/hybrid MBR CHS values. This option is
782  intended to work around a bug in at least one BIOS that prevents the
783  computer from booting when the GPT-mandated (but technically illegal)
784  0xFFFFFF CHS value is used as the end point for a protective MBR. The
785  recomputed values will be legal (e.g., 0xFEFFFF instead of 0xFFFFFF),
786  but incorrect in GPT terms, and will therefore enable at least one
787  BIOS to boot with a GPT disk. See http://www.rodsbooks.com/gdisk/bios.html
788  for all I know about BIOS/GPT incompatibilities.
789
7900.6.7 (5/1/2010):
791-----------------
792
793- Undid earlier change, with version 0.6.4, that wiped the MBR boot loader
794  when doing MBR-to-GPT conversions. I've now become skeptical that MBR
795  boot loaders were causing any real problems on GPT disks, so I'm going
796  back to the philosophy of leaving as much alone as possible.
797
798- Fixed bug that caused incorrect reporting of free space on 0-size disks
799  (e.g., files of 0 length passed as disk images).
800
801- Fixed bug that caused segfault on some invalid disks
802
803- Fixed bug that caused incorrect partition numbers to be displayed for
804  some verify problems.
805
806
8070.6.6 (3/21/2010):
808-----------------
809
810- Added support for the "no block IO protocol" (referred to as "hide from
811  EFI" in GPT fdisk) and "legacy BIOS bootable" attribute bits. See Table
812  19 of the UEFI 2.3 specification (p. 153) for details.
813
814- Changed the sequence in which GPT data structures are written to disk;
815  backups are now written first, followed by the main structures. This is
816  as recommended in the UEFI 2.3 specification, since it's safer in the
817  extremely unlikely event that a RAID array's size is increased and
818  there's a power outage mid-write. (If the main structures are written
819  first in this case, they'll point to data that's not yet been written;
820  but by writing the backups first, the old main structures will still
821  point to the valid old backup structures.)
822
823- Protective MBRs now have disk signatures of 0x00000000, to better
824  conform with GPT as described in the UEFI 2.3 specification.
825
826- Added alignment information to the summary data produced by the
827  'p' main-menu option in gdisk or the -p option to sgdisk.
828
829- More alignment changes: GPT fdisk now attempts to determine the alignment
830  value based on alignment of current partitions, if any are defined. If no
831  partitions are defined, a default value of 2048 is set. If the computed
832  value is less than 8 on drives over about 596GiB, it's reset to 8, since
833  the drive might be a WD Advanced Format unit that requires an 8-sector
834  (or larger power-of-2) alignment value for best performance. The
835  2048-sector default provides better alignment in some RAID
836  configurations.
837
838- Changed behavior when a backup restore fails. Previously, GPT fdisk
839  would create a fresh blank set of partitions. Now it does so only
840  if the failure occurs when interpreting the backup's contents; if the
841  user typed the wrong filename, the in-memory data structures aren't
842  touched.
843
844
8450.6.5 (3/7/2010):
846-----------------
847
848- Added tests to verify ('v') function and to pre-save checks to look for
849  partitions that end before they begin or that are too big for their
850  disks.
851
852- Fixed a bug that could cause spurious data to appear in a grown partition
853  table.
854
855- Added ability to convert some or all partitions to logical partitions in
856  GPT-to-MBR conversion. This feature is limited by the fact that at least
857  one free sector must exist immediately prior to each logical partition,
858  so it won't do much good if partitions are crammed together. It should be
859  possible to convert back to MBR any disk that started that way, provided
860  no partitions were added or resized when the disk was in GPT form; and
861  disks that were partitioned with Apple's Disk Utility or other tools that
862  insert unpartitioned space should also be convertible. CAUTION: THE
863  LOGICAL PARTITION CREATION FEATURE DOESN'T TRY TO ALIGN PARTITIONS OR
864  PARTITION HEADER DATA TO CYLINDER BOUNDARIES! It's conceivable that some
865  older OSes or utilities will object to these disks, although Linux, OS X,
866  Windows Vista, and Windows 7 all seem happy with them.
867
868- Fixed bug that caused creation of 0-length file if an incorrect device
869  filename was typed.
870
871- The gdisk program now prompts for a device filename if it's called with
872  no options. This enables gdisk to do something useful if it's launched by
873  double-clicking its icon in a GUI environment.
874
875- Added workaround for bug in some versions of MinGW that caused the
876  program to garble input sector numbers.
877
878- The Windows version now works on disks with over-512-byte sectors.
879  Tested on a magneto-optical (MO) drive with 2048-byte sectors.
880
881- Added -D (--display-alignment) option to sgdisk, to display sector
882  alignment value (by default, 1 for sub-800GiB disks and 8 for disks
883  over that size).
884
885- Fixed bug in computation of CHS geometries for protective MBR. This is
886  non-critical, since most modern utilities ignore the CHS geometries.
887  Concerned users can use the 'n' option on the experts' menu to build new
888  protective MBRs with the new algorithm, if desired. (Note that GNU
889  Parted, at least, gets this wrong, too.)
890
891- Fixed memory-allocation bug when reading GPT disks with partition tables
892  with over 128 entries; could cause program to crash on startup.
893
8940.6.4-2 (2/20/2010):
895--------------------
896
897Note: Neither of the following changes affects actual program code, so I've
898left the version number in the program at 0.6.4.
899
900- Altered Makefile to pass user's compiler and linker environment
901  variables through.
902
903- Added #include to gpttext.cc to enable it to compile on the latest
904  GCC versions (it was failing on at least some 4.4.x compilers).
905
9060.6.4 (2/19/2010):
907-------------------
908
909- Added -m (--gpttombr) option to sgdisk, enabling conversion of GPT
910  disks to MBR format, with a limit of four partitions total, and of course
911  without overcoming the 2TiB limit.
912
913- Added -h (--hybrid) option to sgdisk, enabling creation of hybrid
914  MBRs. Fewer options are available in sgdisk than in gdisk, though,
915  in order to keep the user interface manageable.
916
917- Fixed off-by-one bug in specification of partition when using the
918  -T (--transform-bsd) option in sgdisk.
919
920- Changed the code to create a new MBR unique disk signature whenever a new
921  protective MBR is generated (when doing an MBR-to-GPT conversion, when
922  using the 'n' option on the experts' menu, or when using the 'o' option
923  on the main menu, for example). Previous versions attempted to preserve
924  the existing MBR disk signature in most cases, but this resulted in
925  values of 0x00000000 whenever an empty disk was partitioned, and often in
926  other cases, too. Better to risk changing this value too often than to
927  leave multiple disks with 0x00000000 values, I think.
928
929- Added transpose ('t' on experts' menu in gdisk; or -r or --transpose in
930  sgdisk) command to enable fine-tuning partition order without doing a
931  full sort.
932
933- Added code to clear the MBR boot loader when doing an MBR-to-GPT
934  conversion. (This was already done in full-disk BSD-to-GPT conversions.)
935  This is done because I've seen a few problem reports that make me think
936  some MBR boot loaders freak out and hang the system when they encounter
937  GPT disks, and/or they attempt to load a second-stage boot loader stored
938  in what is now GPT territory, causing a system hang. Since MBR boot
939  loaders don't work on GPT disks anyhow (even GRUB needs to be
940  reinstalled), this new wiping behavior shouldn't cause any problems, and
941  may prevent a few.
942
943- Fixed bug in Windows version that prevented saving backup files.
944
945- Fixed bug that caused second and subsequent partition numbers in
946  prompts in hybrid MBR conversion procedure to be displayed in
947  hexadecimal.
948
949- Fixed very obscure potential bug in hybrid MBR/GPT synchronization when
950  deleting partitions; code wasn't matching partition lengths correctly,
951  which would only affect partitions that start at the same point but have
952  different lengths in MBR vs. GPT.
953
954- Fixed bug in the -E option to sgdisk; it was actually returning the
955  last free sector, not the last free sector in the largest free block.
956
957- Fixed bug in -t option to sgdisk; it was corrupting partition type
958  codes.
959
960- Fixed minor alignment bug in partition summary list ('p' from any menu)
961  when partition sizes are between 1000 and 1024 units.
962
963- Backup restore function ('l' on recovery & transformation menu) now
964  accepts both backups generated by GPT fdisk and backups created by a
965  direct copy (via dd, etc.) of the MBR, main GPT header, and main GPT
966  partition table, in that order. ("dd if=/dev/sda of=backup.gpt bs=512
967  count=34" will do this on Linux for a disk with a typical-sized GPT table
968  of 128 entries.)
969
9700.6.3 (2/3/2010):
971------------------
972
973- Fixed serious data corruption bug on big-endian (PowerPC and similar)
974  systems.
975
976- Changed several GPT fdisk Solaris type codes to correct a duplicate
977
978- Corrected error in GPT fdisk type codes for NetBSD LFS and NetBSD RAID;
979  they were identical, but I've now changed NetBSD RAID to A906, which
980  is unique.
981
982- Added GUID for IBM General Parallel File System (GPFS) partition type
983  code. Somewhat arbitrarily set it to use the 7501 number (MBR code 0x75
984  is used by IBM PC/IX, so it's at least the right company, by my loose
985  numbering rules....).
986
987- Improved GUID generation. Prior versions generated completely random
988  numbers for GUIDs. This works, but is technically a violation of the
989  spec. Unix versions now employ libuuid to generate GUIDs in a more
990  correct way. The Windows version still generates random numbers, though.
991
992- Turned PartTypes class into a derived class of GUIDData, and renamed
993  it to PartType.
994
995- Created new GUIDData class, to replace the original GUIDData struct.
996
9970.6.2 (1/29/2010):
998------------------
999
1000- The change-type ('t' on main menu) option now changes the partition's
1001  name *IF* the current name is the generic one for the partition type.
1002  If the current name is not the generic name, it is NOT changed.
1003
1004- Fixed bug that caused new protective MBR to not be created when the
1005  MBR was invalid and the GPT was damaged and the user opts to try to
1006  use the GPT data.
1007
1008- Enabled default partition type code of 0700 when creating partitions
1009  or changing their type codes. (Type 0700, Linux/Windows data, is set if
1010  the user hits the Enter key alone.)
1011
1012- Fixed bug in sort ('s' on main menu) option that caused partition
1013  numbers to begin at more than 1 if the original partition list had
1014  too many empty partitions before the last one defined.
1015
1016- Improved code to determine which partition table to load in case of
1017  CRC mismatches between the partition tables and the stored CRC values
1018  in the headers.
1019
1020- Compiles using MinGW (http://www.mingw.org) to create a Windows binary.
1021
1022- Moved all disk I/O functions to the new DiskIO class. This helps with the
1023  Windows port; it uses diskio-windows.cc for Windows-specific code,
1024  diskio-unix.cc for the Linux, FreeBSD, and OS X code, and diskio.cc for
1025  cross-platform disk I/O code.
1026
1027- Changed BSD disklabel detection code to be more correct (I think).
1028  This change has no effect on my test disks, but I hope it'll work
1029  better on disks with sector sizes other than 512 or 2048.
1030
10310.6.1 (1/20/2010):
1032------------------
1033
1034- Fixed bug that returned incorrect disk size on 32-bit versions of
1035  FreeBSD.
1036
1037- Fixed bug that prevented FreeBSD version from working on disk image
1038  files.
1039
1040- Fixed bug that caused BSD disklabel conversion to fail.
1041
10420.6.0 (1/15/2010):
1043------------------
1044
1045- Fixed bug that caused the convert to MBR function to fail.
1046
1047- Added support for disks with other than 512-byte sectors.
1048
1049- Created embryonic sgdisk program.
1050
1051- Fixed bug that caused relative sector numbers entered by users (e.g,
1052  "+128M") to be misinterpreted as from the start of the range rather than
1053  from the default value.
1054
10550.5.3 (1/4/2010):
1056-----------------
1057
1058- Fixed bug in display of GUIDs when compiled with some versions of GCC.
1059
1060- Eliminated warnings caused by additional checks in latest versions of
1061  GCC. These warnings were harmless, but to eliminate them I've added
1062  more error checking on disk I/O.
1063
1064- Eliminated unnecessary warnings about potential data loss if the program
1065  was launched with the -l option or if writes aren't possible.
1066
1067- Added code to set the partition boundary value based on the physical
1068  sector size. (FindAlignment() function.) This function, however, works
1069  only on Linux, and then only if the BLKPBSZGET ioctl is defined. This
1070  ioctl is new in kernel 2.6.32 or thereabouts.
1071
10720.5.2 (12/31/2009):
1073-------------------
1074
1075- Modified partition creation function to begin partitions on 8-sector
1076  boundaries by default. This improves performance on the new Western
1077  Digital Advanced Format drives. The new 'd' and 'l' options on the
1078  experts' menu display and change, respectively, the boundary size.
1079
1080- Tweaked code to produce fewer warnings on the latest versions of
1081  GCC.
1082
10830.5.1:
1084------
1085
1086- Made some minor edits to the man page.
1087
1088- Incorporated RPM .spec file changes contributed by Scott Collier
1089  (boodle11@gmail.com).
1090
1091- Changed method of locating and loading backup GPT data, to use the
1092  main header's pointer, if it's valid, rather than seeking to the
1093  end of the disk.
1094
1095- Added 'e' option (relocate backup GPT data structures) to the experts'
1096  menu.
1097
1098- Fixed bug that prevented recovery of partitions in case of partially
1099  damaged GPT data (bad main and good backup or bad backup and good
1100  main header, for instance).
1101
11020.5.0:
1103------
1104
1105- Added GPT-to-MBR conversion function. It's very limited, but potentially
1106  useful in some cases.
1107
1108- Fixed bug that caused incorrect file sizes to be reported on 32-bit
1109  Linux, thus causing problems when editing partition tables in disk images
1110  or when loading GPT backup files.
1111
1112- Fixed bug that caused bogus CRC error reports when loading backup GPT
1113  data.
1114
1115- Reorganized menus. There are now three: the main menu, the experts' menu,
1116  and the recovery & transformation menu. The last of these has most of the
1117  items that had been on the earlier versions' experts' menu.
1118
1119- Added ability to re-load the MBR and generate a fresh GPT from it. This
1120  is normally identical to quitting and re-running the program, but it
1121  could be handy if, say, the GPT partitions on a hybrid configuration are
1122  badly messed up; this will enable using the hybridized partitions as the
1123  starting point for a new GPT setup.
1124
1125- The program now generates CHS values for hybrid and GPT-to-MBR conversion
1126  MBRs. For the moment, the assumption is the maximum number of heads and
1127  sectors per track (255 and 63, respectively), although the bulk of the
1128  code supports other values -- it'd just be awkward to enter the data in
1129  the user interface.
1130
1131- Fixed minor display bug that caused number of sectors on the disk to be
1132  shown as 0 on large disks when running 32-bit binaries.
1133
1134- Reverted 0.4.2's zap (destroy GPT) changes, since I don't want to wipe
1135  out a valid MBR if the user created that MBR over an older GPT without
1136  first properly wiping out the GPT, and the user now wants to wipe out
1137  the GPT.
1138
1139- Reformatted and edited the man page. Aside from edits related to the
1140  preceding program changes, I've altered the markup slightly and trimmed
1141  much of the more tutorial information from the man page to better
1142  conform to typical terse man page style.
1143
11440.4.2:
1145------
1146
1147- Code cleanup.
1148
1149- Fixed very small formatting bug in display of hex code when a match isn't
1150  found when converting from an MBR/gdisk hex code to a GUID type code.
1151
1152- Added the ability to work on disk image files (raw files for virtual
1153  machines, backup images, etc.). The program assumes that all such disk
1154  image files have 512-byte sectors.
1155
1156- Added verification prompt to 'o' main-menu option to avoid accidental
1157  erasures of all partitions.
1158
1159- The "destroy GPT data structures" option ('z' on the experts' menu) now
1160  also destroys all EFI GPT (0xEE) partitions in the MBR.
1161
1162- Added an extra warning to the "destroy GPT data structures" option if an APM
1163  or BSD disklabel was detected on the disk.
1164
1165- Added a buffer flush after destroying GPT data structures, to get the OS
1166  to read the new (empty or MBR-only) partition table.
1167
1168- Fixed bug that allowed entry of nonexistent partition numbers when creating
1169  a hybrid MBR.
1170
11710.4.1:
1172------
1173
1174- Code cleanup/re-organization
1175
1176- Partition creation function ('n' on main menu) now uses the start of the
1177  largest available chunk of free space rather than the first available
1178  sector as the default starting sector number. This should enable easier
1179  partition creation if there are small bits of free space on the disk.
1180
1181- You can now specify the end point of a partition by using a minus sign,
1182  in which case the end point is the default value minus the specified
1183  size. For instance, "-200M" creates a partition that ends 200MiB before
1184  the default end point.
1185
1186- You can now specify the start point of a partition by using a plus or
1187  minus sign, in which case the start point is the specified distance from
1188  the start (+) or end (-) of free space. This is exactly the same as the
1189  new rules for entry of the end point, except that the default value is
1190  set differently.
1191
1192- Deleting a partition now checks for a matching hybrid MBR partition, and
1193  if one is found, it's deleted. Any empty space that then surrounds the
1194  0xEE (EFI GPT) MBR partitions is then added to the nearby 0xEE partition.
1195  If no non-0xEE partitions are left, a fresh protective MBR is generated.
1196
1197- Added hybrid MBR consistency check to the verify ('v') option and to
1198  pre-write checks. If non-0xEE/non-0x00 MBR partitions without
1199  corresponding GPT partitions are found, the user is warned. This finding
1200  does NOT prevent writing the partition table, though.
1201
1202- Added non-destructive write test when opening the device file, in order
1203  to detect the problem with FreeBSD being unable to write to disks with
1204  mounted partitions (or other potential problems).
1205
12060.4.0:
1207------
1208
1209- Added support for BSD disklabels. The program can now convert disks that
1210  use "raw" disklabels, with the caveat that the first partition will
1211  almost certainly need to be deleted because it'll overlap the main GPT
1212  header; and convert disklabels contained within a GPT (or a former MBR,
1213  converted to GPT) partition. In the latter case, the 'b' main menu option
1214  is used.
1215
1216- Added support for compiling on FreeBSD.
1217
1218- Fixed bug that could cause crashes or incomplete sorts when sorting
1219  the partition table.
1220
1221- New partitions, including converted ones, now take on the name of the
1222  partition type as a default name.
1223
1224- Reorganized some code; created a separate C++ class for GPT partitions
1225  (GPTPart), which replaced a struct and enabled moving code from the
1226  bloated GPTData class into GPTPart.
1227
1228- Fixed a bug that produced spurious warnings about unknown sector sizes
1229  when loading a backup file.
1230
12310.3.5:
1232------
1233
1234Note: This version was not officially publicly released; I wanted to test
1235the big-endian support while developing 0.4.0.
1236
1237- Tweaked the disk type identification code to warn users to re-sync their
1238  hybrid MBRs when one is detected.
1239
1240- Tweaked MBR-reading code to ignore 0xEE (EFI GPT) partitions. This will
1241  only have an effect on a poorly partitioned MBR disk that contains an
1242  inappropriate EFI GPT partition, or when attempting to recover a
1243  corrupted disk by using the hybrid MBR for data recovery.
1244
1245- Added big-endian (PowerPC, etc.) support!
1246
1247- Added code to identify and warn of the presence of an Apple Partition
1248  Map (APM) on the disk.
1249
1250- Enabled MBR conversion code to handle multiple logical partitions.
1251
12520.3.4:
1253------
1254
1255- Fixed bug that enabled (possibly accidental) entry of MBR type codes of
1256  0x00 in GPTData::MakeHybrid(). The fix also enables entry of default
1257  type code by pressing the Enter key when prompted. Applied a similar
1258  fix to the entry of the type code for the second protective partition,
1259  if one is used.
1260
1261- Fixed a typo: "sectors" was spelled "sectprs" in one spot!
1262
1263- Fixed bug that caused default entry for end sector to be refused if an
1264  initial value using a plus sign (e.g., "+20G") was also refused.
1265
12660.3.3:
1267------
1268
1269- Gave users control over the way MBR partitions are assigned to slots in a
1270  hybrid MBR setup; the original method (putting the 0xEE partition after
1271  the real partitions) works well for non-boot disks, but both GRUB and
1272  GRUB2 become confused by this type of setup, so it needs changing.
1273
1274- Changed "blocks" to "sectors" in GPT and MBR table displays.
1275
1276- Added "Boot" column to MBR table display; shows an asterisk (*) when the
1277  partition's status is bootable.
1278
12790.3.2:
1280------
1281
1282- Changed __DARWIN_UNIX03 to __APPLE__ as code to enable MacOS X support.
1283
1284- Added the ability to create a hybrid MBR ('h' on experts' menu). This was
1285  motivated by my discovery that Windows 7 remains brain-dead when it comes
1286  to the ability to boot from a GPT disk, at least on BIOS-based machines.
1287
1288- Added 'z' option to experts' menu, to destroy GPT data structures and
1289  exit. The intent is to use this feature to enable subsequent partitioning
1290  of the disk using fdisk or other GPT-unaware tools. (GNU Parted will wipe
1291  the GPT data structures itself when you create a new MBR ["msdos
1292  disklabel," in Parted parlance], so using Parted is another option.)
1293
1294- Slightly altered the effect of the 'o' command on the main menu. It now
1295  blanks out the protective MBR, as well as the GPT data.
1296
12970.3.1:
1298------
1299
1300- Added Mac OS X support, provided as a patch by David Hubbard
1301  (david.c.hubbard@gmail.com).
1302
1303- Fixed bug in disksize() function on Mac OS. (Possibly dependent on the
1304  kernel and/or GCC version.) The disk size, of type uint64_t, was not
1305  being passed correctly, so I reorganized the function to return it as
1306  the function's return value rather than as a parameter. This seems to
1307  work OK on my Mac OS test system and on both 32- and 64-bit Linux
1308  systems.
1309
1310- Fixed off-by-one bug in GPTData::FindLastAvailable().
1311
1312- Fixed bug that caused display of options after a disk-write error.
1313
1314- Fixed several incorrect MacOS X partition type GUIDs, thanks to Yves
1315  Blusseau (1otnwmz02@sneakemail.com).
1316
13170.3.0:
1318------
1319
1320- Changed version number to 0.3.0, reflecting the fact that I've received
1321  no significant bug reports and so am elevating the program to "beta"
1322  status. This change also entailed altering the warning the program
1323  displays when saving partition table changes.
1324
1325- Fixed minor bug in CHS geometry of the protective MBR's type EE partition
1326  (was producing 0x000200 as the start value, but should be 0x000100).
1327  Should be a non-critical bug since the protective MBR partition
1328  definition is only there to keep MBR-only disk utilities from messing
1329  with the disk.
1330
1331- Added ability to enter GUIDs as single massive strings rather than in
1332  chunks.
1333
13340.2.2:
1335------
1336
1337- Added #include directives required to compile the program using GCC
1338  4.4.0.
1339
13400.2.1:
1341------
1342
1343- Fixed partition numbering problem in reports of partition overlaps in
1344  verification function.
1345
1346- Fixed 1-sector partition size problem when creating new partitions
1347  (partitions were 1 sector too big when using the +size option).
1348
1349- Changed BytesToSI() to display values in bytes without decimal points
1350  (e.g., "512 bytes" rather than "512.0 bytes").
1351
1352- Added GPTData class member functions to retrieve GPT data structure
1353  locations on disk; used in my internal-use-only GPT-wiping program.
1354
1355- Eliminated the "a reboot is recommended" notice after writing the
1356  partition table.
1357
1358- Added notice after sorting the partition table to the effect that
1359  editing /etc/fstab and/or the boot loader files may be required.
1360
1361- Fixed bug in MBR-reading function that caused 0x0f (Win95 LBA) and 0x85
1362  (Linux extended) extended partitions to not be read.
1363
1364- Fixed bug in GetLastSector() (in support.cc) that would have prevented
1365  correct user entry of over-32-bit sector numbers on 32-bit systems.
1366
1367- Made some changes/corrections to the partition type list in
1368  parttypes.cc. Most of these were based on newly-discovered MBR type
1369  codes for Apple (Mac OS X) filesystems.
1370
1371- General code cleanup (setting explicit casts, etc.)
1372
13730.2.0:
1374------
1375
1376- Initial semi-public release
1377