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