Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gptfdisk for openSUSE:Factory checked in at 2024-04-14 11:53:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gptfdisk (Old) and /work/SRC/openSUSE:Factory/.gptfdisk.new.26366 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gptfdisk" Sun Apr 14 11:53:40 2024 rev:27 rq:1166946 version:1.0.10 Changes: -------- --- /work/SRC/openSUSE:Factory/gptfdisk/gptfdisk.changes 2023-09-13 20:44:20.841618355 +0200 +++ /work/SRC/openSUSE:Factory/.gptfdisk.new.26366/gptfdisk.changes 2024-04-14 11:53:49.505699259 +0200 @@ -1,0 +2,15 @@ +Thu Apr 11 19:44:38 UTC 2024 - Jan Engelhardt <[email protected]> + +- Update to release 1.0.10 + * Fix failure & crash of sgdisk when compiled with latest popt + * Fix NULL dereference when duplicating string argument + * Allow partition dynamically allocated by --largest-new to be + referenced by other options + * Truncate decimal inputs (e.g. "9.5G" becomes "9G") + * New partition type codes from the Discoverable Partitions + Specification +- Delete 0001-Fix-failure-crash-of-sgdisk-when-compiled-with-lates.patch + gptfdisk-1.0.9-libuuid.patch, + gptfdisk-fix-null-pointer-dereference.patch (merged) + +------------------------------------------------------------------- Old: ---- 0001-Fix-failure-crash-of-sgdisk-when-compiled-with-lates.patch gptfdisk-1.0.9-libuuid.patch gptfdisk-1.0.9.tar.gz gptfdisk-fix-null-pointer-dereference.patch New: ---- gptfdisk-1.0.10.tar.gz BETA DEBUG BEGIN: Old: Specification - Delete 0001-Fix-failure-crash-of-sgdisk-when-compiled-with-lates.patch gptfdisk-1.0.9-libuuid.patch, Old:- Delete 0001-Fix-failure-crash-of-sgdisk-when-compiled-with-lates.patch gptfdisk-1.0.9-libuuid.patch, gptfdisk-fix-null-pointer-dereference.patch (merged) Old: gptfdisk-1.0.9-libuuid.patch, gptfdisk-fix-null-pointer-dereference.patch (merged) BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gptfdisk.spec ++++++ --- /var/tmp/diff_new_pack.d1zaKG/_old 2024-04-14 11:53:50.553737579 +0200 +++ /var/tmp/diff_new_pack.d1zaKG/_new 2024-04-14 11:53:50.553737579 +0200 @@ -1,7 +1,7 @@ # # spec file for package gptfdisk # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: gptfdisk -Version: 1.0.9 +Version: 1.0.10 Release: 0 Summary: GPT partitioning and MBR repair software License: GPL-2.0-only @@ -26,11 +26,6 @@ #Git-Clone: https://git.code.sf.net/p/gptfdisk/code gptfdisk-code #Git-Web: https://sourceforge.net/p/gptfdisk/code/ci/master/tree/ Source: https://downloads.sf.net/%name/%name-%version.tar.gz -Patch1: 0001-Fix-failure-crash-of-sgdisk-when-compiled-with-lates.patch -# PATCH-FIX-UPSTREAM gptfdisk-fix-null-pointer-dereference.patch bsc#1208877 [email protected] -- Fix NULL pointer dereference in previous patch -Patch2: gptfdisk-fix-null-pointer-dereference.patch -# PATCH-FIX-UPSTREAM https://bugs.gentoo.org/844073 https://sourceforge.net/p/gptfdisk/code/ci/6a8416cbd12d55f882bb751993b94f72d338d96f/ -Patch3: gptfdisk-1.0.9-libuuid.patch BuildRequires: gcc-c++ BuildRequires: ncurses-devel BuildRequires: pkgconfig(popt) ++++++ gptfdisk-1.0.9.tar.gz -> gptfdisk-1.0.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/NEWS new/gptfdisk-1.0.10/NEWS --- old/gptfdisk-1.0.9/NEWS 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/NEWS 2024-02-20 01:55:41.000000000 +0100 @@ -1,3 +1,44 @@ +1.0.10 (2/19/2024): +------------------- + +- Fixed problem that caused sgdisk to crash with errors about being unable + to read the disk's partition table when compiled with the latest popt + (commit 740, which is pre-release as I type; presumably version 1.19 and + later once released). + +- Updated guid.cc to deal with minor change in libuuid. + +- Fixed potential NULL derefernce bug in sgdisk. Thanks to Damian Kurek + for this fix. + +- The partition number of "0" can now be used to reference newly-created + partitions when the --largest-new=0 option to sgdisk is used. Thanks to + David JoaquĆn Shourabi Porcel for this improvement. + +- Make explicit casts in gptcurses.cc to eliminate compiler warnings about + mis-matched types in printw() statements. + +- Minor code cleanup based on valgrind analysis. + +- In previous versions, GPT fdisk accepted only integer values for partition + start points, end points, and sizes, and it interpreted decimal values + incorrectly. That is, if you typed "+9.5G" as the partition end point, + you'd end up with something just 9 sectors in size. This version now + truncates decimal numbers to their integral values, so you'd get a 9 GiB + partition instead. + +- Changes to optimize disk handling, particularly on Windows, courtesy of + Frediano Ziglio. + +- Added numerous new partition type codes from Discoverable Partitions + Specification + (https://uapi-group.org/specifications/specs/discoverable_partitions_specification/). + +- Added new sgdisk -k/--move-backup-table and gdisk k (on the experts' menu) + option to relocate the backup partition table. This is the counterpart of + the sgdisk -j/--move-main-table and gdisk j (on the experts' menu) option + to move the main partition table. This code comes from Niklas Gollenstede. + 1.0.9 (4/14/2022): ------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/cgdisk.8 new/gptfdisk-1.0.10/cgdisk.8 --- old/gptfdisk-1.0.9/cgdisk.8 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/cgdisk.8 2024-02-20 01:55:41.000000000 +0100 @@ -1,6 +1,6 @@ -.\" Copyright 2011-2022 Roderick W. Smith ([email protected]) +.\" Copyright 2011-2024 Roderick W. Smith ([email protected]) .\" May be distributed under the GNU General Public License -.TH "CGDISK" "8" "1.0.9" "Roderick W. Smith" "GPT fdisk Manual" +.TH "CGDISK" "8" "1.0.10" "Roderick W. Smith" "GPT fdisk Manual" .SH "NAME" cgdisk \- Curses-based GUID partition table (GPT) manipulator .SH "SYNOPSIS" @@ -25,7 +25,7 @@ For information on MBR vs. GPT, as well as GPT terminology and structure, see the extended GPT fdisk documentation at -\fIhttp://www.rodsbooks.com/gdisk/\fR or consult Wikipedia. +\fIhttps://www.rodsbooks.com/gdisk/\fR or consult Wikipedia. The \fBcgdisk\fR program employs a user interface similar to that of Linux's \fBcfdisk\fR, but \fBcgdisk\fR modifies GPT partitions. It also has the @@ -389,11 +389,11 @@ .BR sgdisk (8), .BR fixparts (8). -\fIhttp://en.wikipedia.org/wiki/GUID_Partition_Table\fR +\fIhttps://en.wikipedia.org/wiki/GUID_Partition_Table\fR -\fIhttp://developer.apple.com/technotes/tn2006/tn2166.html\fR +\fIhttps://developer.apple.com/technotes/tn2006/tn2166.html\fR -\fIhttp://www.rodsbooks.com/gdisk/\fR +\fIhttps://www.rodsbooks.com/gdisk/\fR .SH "AVAILABILITY" The \fBcgdisk\fR command is part of the \fIGPT fdisk\fR package and is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/cgdisk.html new/gptfdisk-1.0.10/cgdisk.html --- old/gptfdisk-1.0.9/cgdisk.html 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/cgdisk.html 2024-02-20 01:55:41.000000000 +0100 @@ -4,7 +4,7 @@ <HTML><HEAD><TITLE>Man page of CGDISK</TITLE> </HEAD><BODY> <H1>CGDISK</H1> -Section: GPT fdisk Manual (8)<BR>Updated: 1.0.9<BR><A HREF="#index">Index</A> +Section: GPT fdisk Manual (8)<BR>Updated: 1.0.10<BR><A HREF="#index">Index</A> <A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR> <A NAME="lbAB"> </A> @@ -39,7 +39,7 @@ <P> For information on MBR vs. GPT, as well as GPT terminology and structure, see the extended GPT fdisk documentation at -<I><A HREF="http://www.rodsbooks.com/gdisk/">http://www.rodsbooks.com/gdisk/</A></I> or consult Wikipedia. +<I><A HREF="https://www.rodsbooks.com/gdisk/">https://www.rodsbooks.com/gdisk/</A></I> or consult Wikipedia. <P> The <B>cgdisk</B> program employs a user interface similar to that of Linux's <B>cfdisk</B>, but <B>cgdisk</B> modifies GPT partitions. It also has the @@ -467,11 +467,11 @@ <B><A HREF="/cgi-bin/man/man2html?8+fixparts">fixparts</A></B>(8). <P> -<I><A HREF="http://en.wikipedia.org/wiki/GUID_Partition_Table">http://en.wikipedia.org/wiki/GUID_Partition_Table</A></I> +<I><A HREF="https://en.wikipedia.org/wiki/GUID_Partition_Table">https://en.wikipedia.org/wiki/GUID_Partition_Table</A></I> <P> -<I><A HREF="http://developer.apple.com/technotes/tn2006/tn2166.html">http://developer.apple.com/technotes/tn2006/tn2166.html</A></I> +<I><A HREF="https://developer.apple.com/technotes/tn2006/tn2166.html">https://developer.apple.com/technotes/tn2006/tn2166.html</A></I> <P> -<I><A HREF="http://www.rodsbooks.com/gdisk/">http://www.rodsbooks.com/gdisk/</A></I> +<I><A HREF="https://www.rodsbooks.com/gdisk/">https://www.rodsbooks.com/gdisk/</A></I> <P> <A NAME="lbAI"> </A> <H2>AVAILABILITY</H2> @@ -496,6 +496,6 @@ This document was created by <A HREF="/cgi-bin/man/man2html">man2html</A>, using the manual pages.<BR> -Time: 23:17:12 GMT, April 14, 2022 +Time: 00:55:41 GMT, February 20, 2024 </BODY> </HTML> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/current.spec new/gptfdisk-1.0.10/current.spec --- old/gptfdisk-1.0.9/current.spec 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/current.spec 2024-02-20 01:55:41.000000000 +0100 @@ -1,12 +1,12 @@ Summary: GPT partitioning and MBR repair software Name: gptfdisk -Version: 1.0.9 +Version: 1.0.10 Release: 1%{?dist} License: GPLv2 URL: http://www.rodsbooks.com/gdisk Group: Applications/System -Source: http://www.rodsbooks.com/gdisk/gptfdisk-1.0.9.tar.gz +Source: http://www.rodsbooks.com/gdisk/gptfdisk-1.0.10.tar.gz BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) %description @@ -81,5 +81,5 @@ %changelog -* Thu Apr 14 2022 R Smith <[email protected]> - 1.0.9 -- Created spec file for 1.0.9 release +* Mon Feb 19 2024 R Smith <[email protected]> - 1.0.10 +- Created spec file for 1.0.10 release diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/diskio-unix.cc new/gptfdisk-1.0.10/diskio-unix.cc --- old/gptfdisk-1.0.9/diskio-unix.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/diskio-unix.cc 2024-02-20 01:55:41.000000000 +0100 @@ -37,8 +37,12 @@ using namespace std; -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__linux__) #define off64_t off_t +#define stat64 stat +#define fstat64 fstat +#define lstat64 lstat +#define lseek64 lseek #endif // Returns the official "real" name for a shortened version of same. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/diskio-windows.cc new/gptfdisk-1.0.10/diskio-windows.cc --- old/gptfdisk-1.0.9/diskio-windows.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/diskio-windows.cc 2024-02-20 01:55:41.000000000 +0100 @@ -63,7 +63,6 @@ fd = CreateFile(realFilename.c_str(),GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (fd == INVALID_HANDLE_VALUE) { - CloseHandle(fd); cerr << "Problem opening " << realFilename << " for reading!\n"; realFilename = ""; userFilename = ""; @@ -94,13 +93,11 @@ // Preceding call can fail when creating backup files; if so, try // again with different option... if (fd == INVALID_HANDLE_VALUE) { - CloseHandle(fd); fd = CreateFile(realFilename.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } // if if (fd == INVALID_HANDLE_VALUE) { - CloseHandle(fd); isOpen = 0; openForWrite = 0; errno = GetLastError(); @@ -114,8 +111,10 @@ // Close the disk device. Note that this does NOT erase the stored filenames, // so the file can be re-opened without specifying the filename. void DiskIO::Close(void) { - if (isOpen) + if (isOpen) { CloseHandle(fd); + fd = INVALID_HANDLE_VALUE; + } isOpen = 0; openForWrite = 0; } // DiskIO::Close() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/fixparts.8 new/gptfdisk-1.0.10/fixparts.8 --- old/gptfdisk-1.0.9/fixparts.8 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/fixparts.8 2024-02-20 01:55:41.000000000 +0100 @@ -1,6 +1,6 @@ -.\" Copyright 2011-2022 Roderick W. Smith ([email protected]) +.\" Copyright 2011-2024 Roderick W. Smith ([email protected]) .\" May be distributed under the GNU General Public License -.TH "FIXPARTS" "8" "1.0.9" "Roderick W. Smith" "FixParts Manual" +.TH "FIXPARTS" "8" "1.0.10" "Roderick W. Smith" "FixParts Manual" .SH "NAME" fixparts \- MBR partition table repair utility .SH "SYNOPSIS" @@ -273,9 +273,9 @@ .BR gdisk (8), .BR sgdisk (8). -\fIhttp://en.wikipedia.org/wiki/Master_boot_record\fR +\fIhttps://en.wikipedia.org/wiki/Master_boot_record\fR -\fIhttp://www.rodsbooks.com/fixparts/\fR +\fIhttps://www.rodsbooks.com/fixparts/\fR .SH "AVAILABILITY" The \fBfixparts\fR command is part of the \fIGPT fdisk\fR package and is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/fixparts.html new/gptfdisk-1.0.10/fixparts.html --- old/gptfdisk-1.0.9/fixparts.html 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/fixparts.html 2024-02-20 01:55:41.000000000 +0100 @@ -4,7 +4,7 @@ <HTML><HEAD><TITLE>Man page of FIXPARTS</TITLE> </HEAD><BODY> <H1>FIXPARTS</H1> -Section: FixParts Manual (8)<BR>Updated: 1.0.9<BR><A HREF="#index">Index</A> +Section: FixParts Manual (8)<BR>Updated: 1.0.10<BR><A HREF="#index">Index</A> <A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR> <A NAME="lbAB"> </A> @@ -338,9 +338,9 @@ <B><A HREF="/cgi-bin/man/man2html?8+sgdisk">sgdisk</A></B>(8). <P> -<I><A HREF="http://en.wikipedia.org/wiki/Master_boot_record">http://en.wikipedia.org/wiki/Master_boot_record</A></I> +<I><A HREF="https://en.wikipedia.org/wiki/Master_boot_record">https://en.wikipedia.org/wiki/Master_boot_record</A></I> <P> -<I><A HREF="http://www.rodsbooks.com/fixparts/">http://www.rodsbooks.com/fixparts/</A></I> +<I><A HREF="https://www.rodsbooks.com/fixparts/">https://www.rodsbooks.com/fixparts/</A></I> <P> <A NAME="lbAI"> </A> <H2>AVAILABILITY</H2> @@ -365,6 +365,6 @@ This document was created by <A HREF="/cgi-bin/man/man2html">man2html</A>, using the manual pages.<BR> -Time: 23:17:12 GMT, April 14, 2022 +Time: 00:55:41 GMT, February 20, 2024 </BODY> </HTML> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gdisk.8 new/gptfdisk-1.0.10/gdisk.8 --- old/gptfdisk-1.0.9/gdisk.8 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gdisk.8 2024-02-20 01:55:41.000000000 +0100 @@ -1,6 +1,6 @@ -.\" Copyright 2011-2022 Roderick W. Smith ([email protected]) +.\" Copyright 2011-2024 Roderick W. Smith ([email protected]) .\" May be distributed under the GNU General Public License -.TH "GDISK" "8" "1.0.9" "Roderick W. Smith" "GPT fdisk Manual" +.TH "GDISK" "8" "1.0.10" "Roderick W. Smith" "GPT fdisk Manual" .SH "NAME" gdisk \- Interactive GUID partition table (GPT) manipulator .SH "SYNOPSIS" @@ -27,7 +27,7 @@ main and backup data, as well as between the GPT headers and the partition tables. For information on MBR vs. GPT, as well as GPT terminology and structure, see the extended \fBgdisk\fR documentation at -\fIhttp://www.rodsbooks.com/gdisk/\fR or consult Wikipedia. +\fIhttps://www.rodsbooks.com/gdisk/\fR or consult Wikipedia. The \fBgdisk\fR program employs a user interface similar to that of Linux's \fBfdisk\fR, but \fBgdisk\fR modifies GPT partitions. It also has the @@ -486,6 +486,13 @@ recommend against adjusting this value unless doing so is absolutely necessary. +.TP +.B k +Adjust the location of the backup partition table. This partition table is +normally located just before the backup metadata at the end of the disk, but +it may need to be moved in some very rare cases. I recommend against +adjusting this value unless doing so is absolutely necessary. + .TP .B l Change the sector alignment value. Disks with more logical sectors per @@ -702,11 +709,11 @@ .BR sgdisk (8), .BR fixparts (8). -\fIhttp://en.wikipedia.org/wiki/GUID_Partition_Table\fR +\fIhttps://en.wikipedia.org/wiki/GUID_Partition_Table\fR -\fIhttp://developer.apple.com/technotes/tn2006/tn2166.html\fR +\fIhttps://developer.apple.com/technotes/tn2006/tn2166.html\fR -\fIhttp://www.rodsbooks.com/gdisk/\fR +\fIhttps://www.rodsbooks.com/gdisk/\fR .SH "AVAILABILITY" The \fBgdisk\fR command is part of the \fIGPT fdisk\fR package and is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gdisk.html new/gptfdisk-1.0.10/gdisk.html --- old/gptfdisk-1.0.9/gdisk.html 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gdisk.html 2024-02-20 01:55:41.000000000 +0100 @@ -4,7 +4,7 @@ <HTML><HEAD><TITLE>Man page of GDISK</TITLE> </HEAD><BODY> <H1>GDISK</H1> -Section: GPT fdisk Manual (8)<BR>Updated: 1.0.9<BR><A HREF="#index">Index</A> +Section: GPT fdisk Manual (8)<BR>Updated: 1.0.10<BR><A HREF="#index">Index</A> <A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR> <A NAME="lbAB"> </A> @@ -41,7 +41,7 @@ main and backup data, as well as between the GPT headers and the partition tables. For information on MBR vs. GPT, as well as GPT terminology and structure, see the extended <B>gdisk</B> documentation at -<I><A HREF="http://www.rodsbooks.com/gdisk/">http://www.rodsbooks.com/gdisk/</A></I> or consult Wikipedia. +<I><A HREF="https://www.rodsbooks.com/gdisk/">https://www.rodsbooks.com/gdisk/</A></I> or consult Wikipedia. <P> The <B>gdisk</B> program employs a user interface similar to that of Linux's <B>fdisk</B>, but <B>gdisk</B> modifies GPT partitions. It also has the @@ -567,6 +567,14 @@ recommend against adjusting this value unless doing so is absolutely necessary. <P> +<DT><B>k</B> + +<DD> +Adjust the location of the backup partition table. This partition table is +normally located just before the backup metadata at the end of the disk, but +it may need to be moved in some very rare cases. I recommend against +adjusting this value unless doing so is absolutely necessary. +<P> <DT><B>l</B> <DD> @@ -825,11 +833,11 @@ <B><A HREF="/cgi-bin/man/man2html?8+fixparts">fixparts</A></B>(8). <P> -<I><A HREF="http://en.wikipedia.org/wiki/GUID_Partition_Table">http://en.wikipedia.org/wiki/GUID_Partition_Table</A></I> +<I><A HREF="https://en.wikipedia.org/wiki/GUID_Partition_Table">https://en.wikipedia.org/wiki/GUID_Partition_Table</A></I> <P> -<I><A HREF="http://developer.apple.com/technotes/tn2006/tn2166.html">http://developer.apple.com/technotes/tn2006/tn2166.html</A></I> +<I><A HREF="https://developer.apple.com/technotes/tn2006/tn2166.html">https://developer.apple.com/technotes/tn2006/tn2166.html</A></I> <P> -<I><A HREF="http://www.rodsbooks.com/gdisk/">http://www.rodsbooks.com/gdisk/</A></I> +<I><A HREF="https://www.rodsbooks.com/gdisk/">https://www.rodsbooks.com/gdisk/</A></I> <P> <A NAME="lbAI"> </A> <H2>AVAILABILITY</H2> @@ -854,6 +862,6 @@ This document was created by <A HREF="/cgi-bin/man/man2html">man2html</A>, using the manual pages.<BR> -Time: 23:17:12 GMT, April 14, 2022 +Time: 00:55:41 GMT, February 20, 2024 </BODY> </HTML> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gpt.cc new/gptfdisk-1.0.10/gpt.cc --- old/gptfdisk-1.0.9/gpt.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gpt.cc 2024-02-20 01:55:41.000000000 +0100 @@ -3,7 +3,7 @@ /* By Rod Smith, initial coding January to February, 2009 */ -/* This program is copyright (c) 2009-2022 by Roderick W. Smith. It is distributed +/* This program is copyright (c) 2009-2024 by Roderick W. Smith. It is distributed under the terms of the GNU GPL version 2, as detailed in the COPYING file. */ #define __STDC_LIMIT_MACROS @@ -80,6 +80,7 @@ beQuiet = 0; whichWasUsed = use_new; mainHeader.numParts = 0; + mainHeader.firstUsableLBA = 0; mainHeader.lastUsableLBA = 0; numParts = 0; SetGPTSize(NUM_GPT_ENTRIES); @@ -344,6 +345,13 @@ << "but is generally ill-advised. Using 'j' on the experts' menu can adjust this\n" << "gap.\n"; } // if + if (secondHeader.partitionEntriesLBA != diskSize - GetTableSizeInSectors() - 1) { + cout << "\nWarning: There is a gap between the secondary partition table (ending at sector\n" + << secondHeader.partitionEntriesLBA + GetTableSizeInSectors() - 1 + << ") and the secondary metadata (sector " << mainHeader.backupLBA << ").\n" + << "This is helpful in some exotic configurations, but is generally ill-advised.\n" + << "Using 'k' on the experts' menu can adjust this gap.\n"; + } // if if (mainHeader.partitionEntriesLBA + GetTableSizeInSectors() != mainHeader.firstUsableLBA) { cout << "\nWarning: There is a gap between the main partition table (ending sector " << mainHeader.partitionEntriesLBA + GetTableSizeInSectors() - 1 << ")\n" @@ -833,25 +841,27 @@ int err, allOK = 1; MBRValidity mbrState; - if (myDisk.OpenForRead(deviceFilename)) { - err = myDisk.OpenForWrite(deviceFilename); - if ((err == 0) && (!justLooking)) { - cout << "\aNOTE: Write test failed with error number " << errno - << ". It will be impossible to save\nchanges to this disk's partition table!\n"; + if (!justLooking) { + if (myDisk.OpenForRead(deviceFilename)) { + err = myDisk.OpenForWrite(deviceFilename); + if (err == 0) { + cout << "\aNOTE: Write test failed with error number " << errno + << ". It will be impossible to save\nchanges to this disk's partition table!\n"; #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) - cout << "You may be able to enable writes by exiting this program, typing\n" - << "'sysctl kern.geom.debugflags=16' at a shell prompt, and re-running this\n" - << "program.\n"; + cout << "You may be able to enable writes by exiting this program, typing\n" + << "'sysctl kern.geom.debugflags=16' at a shell prompt, and re-running this\n" + << "program.\n"; #endif #if defined (__APPLE__) - cout << "You may need to deactivate System Integrity Protection to use this program. See\n" - << "https://www.quora.com/How-do-I-turn-off-the-rootless-in-OS-X-El-Capitan-10-11\n" - << "for more information.\n"; + cout << "You may need to deactivate System Integrity Protection to use this program. See\n" + << "https://www.quora.com/How-do-I-turn-off-the-rootless-in-OS-X-El-Capitan-10-11\n" + << "for more information.\n"; #endif - cout << "\n"; - } // if - myDisk.Close(); // Close and re-open read-only in case of bugs - } else allOK = 0; // if + cout << "\n"; + } // if + myDisk.Close(); // Close and re-open read-only in case of bugs + } else allOK = 0; // if + } if (allOK && myDisk.OpenForRead(deviceFilename)) { // store disk information.... @@ -1500,7 +1510,7 @@ cerr << "Warning! GPT main partition table not overwritten! Error is " << errno << "\n"; allOK = 0; } // if write failed - } // if + } // if if (!myDisk.Seek(secondHeader.partitionEntriesLBA)) allOK = 0; if (allOK) { @@ -1911,6 +1921,23 @@ return retval; } // GPTData::MoveMainTable() +// Change the start sector for the secondary partition table. +// Returns 1 on success, 0 on failure +int GPTData::MoveSecondTable(uint64_t pteSector) { + uint64_t pteSize = GetTableSizeInSectors(); + int retval = 1; + + if ((pteSector > FindLastUsedLBA()) && ((pteSector + pteSize) < diskSize)) { + secondHeader.partitionEntriesLBA = pteSector; // (RebuildSecondHeader actually replaces this with lastUsableLBA+1) + mainHeader.lastUsableLBA = secondHeader.partitionEntriesLBA - UINT64_C(1); + RebuildSecondHeader(); + } else { + cerr << "Unable to set the secondary partition table's location to " << pteSector << "!\n"; + retval = 0; + } // if/else + return retval; +} // GPTData::MoveSecondTable() + // Blank the partition array void GPTData::BlankPartitions(void) { uint32_t i; @@ -2066,6 +2093,7 @@ } // if mainHeader.lastUsableLBA = secondHeader.lastUsableLBA = diskSize - mainHeader.firstUsableLBA; secondHeader.partitionEntriesLBA = secondHeader.lastUsableLBA + UINT64_C(1); + // TODO: Whenever this gets called, it moves the backup table to be the same distance from the backup header as the primary one it from its header. This seems highly problematic, since MoveMainTable does not call this, but then further actions may or may not do so. Moving the primary table may thus imply moving the backup table, or it may leave it where it was. There is also no guarantee that the space where the backup table is moved to is actually available. } // GPTData::FixSecondHeaderLocation() // Sets the partition's name to the specified UnicodeString without @@ -2285,7 +2313,7 @@ } // GPTData::FindFirstAvailable() // Returns the LBA of the start of the first partition on the disk (by -// sector number), or 0 if there are no partitions defined. +// sector number), or UINT64_MAX if there are no partitions defined. uint64_t GPTData::FindFirstUsedLBA(void) { uint32_t i; uint64_t firstFound = UINT64_MAX; @@ -2298,6 +2326,20 @@ return firstFound; } // GPTData::FindFirstUsedLBA() +// Returns the LBA of the end of the last partition on the disk (by +// sector number), or 0 if there are no partitions defined. +uint64_t GPTData::FindLastUsedLBA(void) { + uint32_t i; + uint64_t lastFound = 0; + + for (i = 0; i < numParts; i++) { + if ((partitions[i].IsUsed()) && (partitions[i].GetFirstLBA() > lastFound)) { + lastFound = partitions[i].GetLastLBA(); + } // if + } // for + return lastFound; +} // GPTData::FindLastUsedLBA() + // Finds the first available sector in the largest block of unallocated // space on the disk. Returns 0 if there are no available blocks left uint64_t GPTData::FindFirstInLargest(void) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gpt.h new/gptfdisk-1.0.10/gpt.h --- old/gptfdisk-1.0.9/gpt.h 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gpt.h 2024-02-20 01:55:41.000000000 +0100 @@ -142,6 +142,7 @@ // Adjust GPT structures WITHOUT user interaction... int SetGPTSize(uint32_t numEntries, int fillGPTSectors = 1); int MoveMainTable(uint64_t pteSector); + int MoveSecondTable(uint64_t pteSector); void BlankPartitions(void); int DeletePartition(uint32_t partNum); uint32_t CreatePartition(uint32_t partNum, uint64_t startSector, uint64_t endSector); @@ -158,7 +159,7 @@ void RecomputeCHS(void); int Align(uint64_t* sector); void SetProtectiveMBR(BasicMBRData & newMBR) {protectiveMBR = newMBR;} - + // Return data about the GPT structures.... WhichToUse GetState(void) {return whichWasUsed;} int GetPartRange(uint32_t* low, uint32_t* high); @@ -181,6 +182,7 @@ // Find information about free space uint64_t FindFirstAvailable(uint64_t start = 0); uint64_t FindFirstUsedLBA(void); + uint64_t FindLastUsedLBA(void); uint64_t FindFirstInLargest(void); uint64_t FindLastAvailable(); uint64_t FindLastInFree(uint64_t start, bool align = false); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gptcl.cc new/gptfdisk-1.0.10/gptcl.cc --- old/gptfdisk-1.0.9/gptcl.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gptcl.cc 2024-02-20 01:55:41.000000000 +0100 @@ -1,7 +1,7 @@ /* Implementation of GPTData class derivative with popt-based command line processing - Copyright (C) 2010-2022 Roderick W. Smith + Copyright (C) 2010-2024 Roderick W. Smith This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -68,7 +68,7 @@ int opt, numOptions = 0, saveData = 0, neverSaveData = 0; int partNum = 0, newPartNum = -1, saveNonGPT = 1, retval = 0, pretend = 0; int byteSwapPartNum = 0; - uint64_t low, high, startSector, endSector, sSize, mainTableLBA; + uint64_t low, high, startSector, endSector, sSize, mainTableLBA, secondTableLBA; uint64_t temp; // temporary variable; free to use in any case char *device; string cmd, typeGUID, name; @@ -85,7 +85,7 @@ {"recompute-chs", 'C', POPT_ARG_NONE, NULL, 'C', "recompute CHS values in protective/hybrid MBR", ""}, {"delete", 'd', POPT_ARG_INT, &deletePartNum, 'd', "delete a partition", "partnum"}, {"display-alignment", 'D', POPT_ARG_NONE, NULL, 'D', "show number of sectors per allocation block", ""}, - {"move-second-header", 'e', POPT_ARG_NONE, NULL, 'e', "move second header to end of disk", ""}, + {"move-second-header", 'e', POPT_ARG_NONE, NULL, 'e', "move second/backup header to end of disk", ""}, {"end-of-largest", 'E', POPT_ARG_NONE, NULL, 'E', "show end of largest free block", ""}, {"first-in-largest", 'f', POPT_ARG_NONE, NULL, 'f', "show start of the largest free block", ""}, {"first-aligned-in-largest", 'F', POPT_ARG_NONE, NULL, 'F', "show start of the largest free block, aligned", ""}, @@ -94,7 +94,8 @@ {"hybrid", 'h', POPT_ARG_STRING, &hybrids, 'h', "create hybrid MBR", "partnum[:partnum...][:EE]"}, {"info", 'i', POPT_ARG_INT, &infoPartNum, 'i', "show detailed information on partition", "partnum"}, {"align-end", 'I', POPT_ARG_NONE, NULL, 'I', "align partition end points", ""}, - {"move-main-table", 'j', POPT_ARG_INT, &mainTableLBA, 'j', "adjust the location of the main partition table", "sector"}, + {"move-main-table", 'j', POPT_ARG_INT, &mainTableLBA, 'j', "change the start sector of the main partition table", "sector"}, + {"move-backup-table", 'k', POPT_ARG_INT, &secondTableLBA, 'k', "change the start sector of the second/backup partition table", "sector"}, {"load-backup", 'l', POPT_ARG_STRING, &backupFile, 'l', "load GPT backup from file", "file"}, {"list-types", 'L', POPT_ARG_NONE, NULL, 'L', "list known partition types", ""}, {"gpttombr", 'm', POPT_ARG_STRING, &mbrParts, 'm', "convert GPT to MBR", "partnum[:partnum...]"}, @@ -117,6 +118,7 @@ {"zap", 'z', POPT_ARG_NONE, NULL, 'z', "zap (destroy) GPT (but not MBR) data structures", ""}, {"zap-all", 'Z', POPT_ARG_NONE, NULL, 'Z', "zap (destroy) GPT and MBR data structures", ""}, POPT_AUTOHELP { NULL, 0, 0, NULL, 0 } + // TODO: Incorrect(ly documented) (long) arguments are silently swallowed and seem to take the next argument with them! }; // Create popt context... @@ -156,9 +158,10 @@ // Assume first non-option argument is the device filename.... device = (char*) poptGetArg(poptCon); - poptResetContext(poptCon); if (device != NULL) { + device = strdup(device); + poptResetContext(poptCon); JustLooking(); // reset as necessary BeQuiet(); // Tell called functions to be less verbose & interactive if (LoadPartitions((string) device)) { @@ -280,13 +283,21 @@ alignEnd = true; break; case 'j': - if (MoveMainTable(mainTableLBA)) { - JustLooking(0); - saveData = 1; - } else { - neverSaveData = 1; - } // if/else - break; + if (MoveMainTable(mainTableLBA)) { + JustLooking(0); + saveData = 1; + } else { + neverSaveData = 1; + } // if/else + break; + case 'k': + if (MoveSecondTable(secondTableLBA)) { + JustLooking(0); + saveData = 1; + } else { + neverSaveData = 1; + } // if/else + break; case 'l': LoadBackupFile(backupFile, saveData, neverSaveData); free(backupFile); @@ -331,8 +342,10 @@ startSector = FindFirstInLargest(); Align(&startSector); endSector = FindLastInFree(startSector, alignEnd); - if (largestPartNum <= 0) + if (largestPartNum <= 0) { largestPartNum = FindFirstFreePart() + 1; + newPartNum = largestPartNum - 1; + } if (CreatePartition(largestPartNum - 1, startSector, endSector)) { saveData = 1; } else { @@ -498,6 +511,7 @@ cerr << "Error encountered; not saving changes.\n"; retval = 4; } // if + free(device); } // if (device != NULL) poptFreeContext(poptCon); return retval; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gptcurses.cc new/gptfdisk-1.0.10/gptcurses.cc --- old/gptfdisk-1.0.9/gptcurses.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gptcurses.cc 2024-02-20 01:55:41.000000000 +0100 @@ -1,7 +1,7 @@ /* * Implementation of GPTData class derivative with curses-based text-mode * interaction - * Copyright (C) 2011-2022 Roderick W. Smith + * Copyright (C) 2011-2024 Roderick W. Smith * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -333,13 +333,13 @@ printw("Partition GUID code: %s (%s)\n", partitions[partNum].GetType().AsString().c_str(), partitions[partNum].GetTypeName().c_str()); printw("Partition unique GUID: %s\n", partitions[partNum].GetUniqueGUID().AsString().c_str()); - printw("First sector: %lld (at %s)\n", partitions[partNum].GetFirstLBA(), + printw("First sector: %llu (at %s)\n", (long long unsigned int) partitions[partNum].GetFirstLBA(), BytesToIeee(partitions[partNum].GetFirstLBA(), blockSize).c_str()); - printw("Last sector: %lld (at %s)\n", partitions[partNum].GetLastLBA(), + printw("Last sector: %llu (at %s)\n", (long long unsigned int) partitions[partNum].GetLastLBA(), BytesToIeee(partitions[partNum].GetLastLBA(), blockSize).c_str()); size = partitions[partNum].GetLastLBA() - partitions[partNum].GetFirstLBA() + 1; - printw("Partition size: %lld sectors (%s)\n", size, BytesToIeee(size, blockSize).c_str()); - printw("Attribute flags: %016llx\n", partitions[partNum].GetAttributes().GetAttributes()); + printw("Partition size: %llu sectors (%s)\n", (long long unsigned int) size, BytesToIeee(size, blockSize).c_str()); + printw("Attribute flags: %016llx\n", (long long unsigned int) partitions[partNum].GetAttributes().GetAttributes()); #ifdef USE_UTF16 partitions[partNum].GetDescription().extract(0, NAME_SIZE , temp, NAME_SIZE ); printw("Partition name: '%s'\n", temp); @@ -447,7 +447,8 @@ clrtoeol(); newFirstLBA = currentSpace->firstLBA; Align(&newFirstLBA); - printw("First sector (%lld-%lld, default = %lld): ", newFirstLBA, currentSpace->lastLBA, newFirstLBA); + printw("First sector (%llu-%llu, default = %llu): ", (long long unsigned int) newFirstLBA, + (long long unsigned int) currentSpace->lastLBA, (long long unsigned int) newFirstLBA); echo(); getnstr(inLine, 79); noecho(); @@ -461,7 +462,7 @@ while ((newLastLBA > currentSpace->lastLBA) || (newLastLBA < newFirstLBA)) { move(LINES - 3, 0); clrtoeol(); - printw("Size in sectors or {KMGTP} (default = %lld): ", size); + printw("Size in sectors or {KMGTP} (default = %llu): ", (long long unsigned int) size); echo(); getnstr(inLine, 79); noecho(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gpttext.cc new/gptfdisk-1.0.10/gpttext.cc --- old/gptfdisk-1.0.9/gpttext.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gpttext.cc 2024-02-20 01:55:41.000000000 +0100 @@ -1,5 +1,5 @@ /* - Copyright (C) 2010-2022 <Roderick W. Smith> + Copyright (C) 2010-2024 <Roderick W. Smith> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -186,6 +186,8 @@ uint64_t maxValue = FindFirstUsedLBA() - pteSize; ostringstream prompt; + if (maxValue == UINT64_MAX - pteSize) + maxValue = FindLastAvailable() - pteSize; cout << "Currently, main partition table begins at sector " << mainHeader.partitionEntriesLBA << " and ends at sector " << mainHeader.partitionEntriesLBA + pteSize - 1 << "\n"; prompt << "Enter new starting location (2 to " << maxValue << "; default is 2; 1 to abort): "; @@ -197,6 +199,26 @@ } // if } // GPTDataTextUI::MoveMainTable() +// Move the backup partition table. +void GPTDataTextUI::MoveSecondTable(void) { + uint64_t newStart, pteSize = GetTableSizeInSectors(); + uint64_t minValue = FindLastUsedLBA() + 1; + uint64_t maxValue = diskSize - 1 - pteSize; + ostringstream prompt; + + cout << "Currently, backup partition table begins at sector " << secondHeader.partitionEntriesLBA + << " and ends at\n" + << "sector " << secondHeader.partitionEntriesLBA + pteSize - 1 << "\n"; + prompt << "Enter new starting location (" << minValue << " to " << maxValue << + "; default is " << maxValue << "; 1 to abort): "; + newStart = GetNumber(minValue, maxValue, maxValue, prompt.str()); + if (newStart != secondHeader.partitionEntriesLBA) { + GPTData::MoveSecondTable(newStart); + } else { + cout << "Aborting change!\n"; + } // if +} // GPTDataTextUI::MoveSecondTable() + // Interactively create a partition void GPTDataTextUI::CreatePartition(void) { uint64_t firstBlock, firstInLargest, lastBlock, sector, origSector, lastAligned; @@ -698,7 +720,7 @@ void GPTDataTextUI::RecoveryMenu(string filename) { uint32_t numParts; int goOn = 1, temp1; - + do { cout << "\nRecovery/transformation command (? for help): "; switch (ReadString()[0]) { @@ -824,7 +846,7 @@ string guidStr, device; GUIDData aGUID; ostringstream prompt; - + do { cout << "\nExpert command (? for help): "; switch (ReadString()[0]) { @@ -873,6 +895,9 @@ case 'j': case 'J': MoveMainTable(); break; + case 'k': case 'K': + MoveSecondTable(); + break; case 'l': case 'L': prompt.seekp(0); prompt << "Enter the sector alignment value (1-" << MAX_ALIGNMENT << ", default = " @@ -946,6 +971,7 @@ cout << "h\trecompute CHS values in protective/hybrid MBR\n"; cout << "i\tshow detailed information on a partition\n"; cout << "j\tmove the main partition table\n"; + cout << "k\tmove the backup partition table\n"; cout << "l\tset the sector alignment value\n"; cout << "m\treturn to main menu\n"; cout << "n\tcreate a new protective MBR\n"; @@ -1007,4 +1033,3 @@ return ReadString().c_str(); } // ReadUString() #endif - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/gpttext.h new/gptfdisk-1.0.10/gpttext.h --- old/gptfdisk-1.0.9/gpttext.h 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/gpttext.h 2024-02-20 01:55:41.000000000 +0100 @@ -41,6 +41,7 @@ uint32_t GetPartNum(void); void ResizePartitionTable(void); void MoveMainTable(void); + void MoveSecondTable(void); void CreatePartition(void); void DeletePartition(void); void ChangePartType(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/guid.cc new/gptfdisk-1.0.10/guid.cc --- old/gptfdisk-1.0.9/guid.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/guid.cc 2024-02-20 01:55:41.000000000 +0100 @@ -141,7 +141,7 @@ void GUIDData::Randomize(void) { int i, uuidGenerated = 0; -#ifdef _UUID_UUID_H +#if defined (_UUID_UUID_H) || defined (_UL_LIBUUID_UUID_H) uuid_generate(uuidData); ReverseBytes(&uuidData[0], 4); ReverseBytes(&uuidData[4], 2); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/parttypes.cc new/gptfdisk-1.0.10/parttypes.cc --- old/gptfdisk-1.0.9/parttypes.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/parttypes.cc 2024-02-20 01:55:41.000000000 +0100 @@ -165,6 +165,112 @@ AddType(0x831A, "C215D751-7BCD-4649-BE90-6627490A4C05", "Linux ARM32 /usr verity"); AddType(0x831B, "6E11A4E7-FBCA-4DED-B9E9-E1A512BB664E", "Linux ARM64 /usr verity"); AddType(0x831C, "6A491E03-3BE7-4545-8E38-83320E0EA880", "Linux IA-64 /usr verity"); + AddType(0x831D, "6523F8AE-3EB1-4E2A-A05A-18B695AE656F", "Linux Alpha root (/)"); + AddType(0x831E, "D27F46ED-2919-4CB8-BD25-9531F3C16534", "Linux ARC root (/)"); + AddType(0x831F, "77055800-792C-4F94-B39A-98C91B762BB6", "Linux LoongArch root (/)"); + AddType(0x8320, "E9434544-6E2C-47CC-BAE2-12D6DEAFB44C", "Linux MIPS-32 BE root (/)"); + AddType(0x8321, "D113AF76-80EF-41B4-BDB6-0CFF4D3D4A25", "Linux MIPS-64 BE root (/)"); + AddType(0x8322, "37C58C8A-D913-4156-A25F-48B1B64E07F0", "Linux MIPS-32 LE root (/)"); + AddType(0x8323, "700BDA43-7A34-4507-B179-EEB93D7A7CA3", "Linux MIPS-64 LE root (/)"); + AddType(0x8324, "1AACDB3B-5444-4138-BD9E-E5C2239B2346", "Linux PA-RISC root (/)"); + AddType(0x8325, "1DE3F1EF-FA98-47B5-8DCD-4A860A654D78", "Linux PowerPC-32 root (/)"); + AddType(0x8326, "912ADE1D-A839-4913-8964-A10EEE08FBD2", "Linux PowerPC-64 BE root (/)"); + AddType(0x8327, "C31C45E6-3F39-412E-80FB-4809C4980599", "Linux PowerPC-64 LE root (/)"); + AddType(0x8328, "60D5A7FE-8E7D-435C-B714-3DD8162144E1", "Linux RISC-V-32 root (/)"); + AddType(0x8329, "72EC70A6-CF74-40E6-BD49-4BDA08E8F224", "Linux RISC-V-64 root (/)"); + AddType(0x832A, "08A7ACEA-624C-4A20-91E8-6E0FA67D23F9", "Linux s390 root (/)"); + AddType(0x832B, "5EEAD9A9-FE09-4A1E-A1D7-520D00531306", "Linux s390x root (/)"); + AddType(0x832C, "C50CDD70-3862-4CC3-90E1-809A8C93EE2C", "Linux TILE-Gx root (/)"); + AddType(0x832D, "E18CF08C-33EC-4C0D-8246-C6C6FB3DA024", "Linux Alpha /usr"); + AddType(0x832E, "7978A683-6316-4922-BBEE-38BFF5A2FECC", "Linux ARC /usr"); + AddType(0x832F, "E611C702-575C-4CBE-9A46-434FA0BF7E3F", "Linux LoongArch /usr"); + AddType(0x8330, "773B2ABC-2A99-4398-8BF5-03BAAC40D02B", "Linux MIPS-32 BE /usr"); + AddType(0x8331, "57E13958-7331-4365-8E6E-35EEEE17C61B", "Linux MIPS-64 BE /usr"); + AddType(0x8332, "0F4868E9-9952-4706-979F-3ED3A473E947", "Linux MIPS-32 LE /usr"); + AddType(0x8333, "C97C1F32-BA06-40B4-9F22-236061B08AA8", "Linux MIPS-64 LE /usr"); + AddType(0x8334, "DC4A4480-6917-4262-A4EC-DB9384949F25", "Linux PA-RISC /usr"); + AddType(0x8335, "7D14FEC5-CC71-415D-9D6C-06BF0B3C3EAF", "Linux PowerPC-32 /usr"); + AddType(0x8336, "2C9739E2-F068-46B3-9FD0-01C5A9AFBCCA", "Linux PowerPC-64 BE /usr"); + AddType(0x8337, "15BB03AF-77E7-4D4A-B12B-C0D084F7491C", "Linux PowerPC-64 LE /usr"); + AddType(0x8338, "B933FB22-5C3F-4F91-AF90-E2BB0FA50702", "Linux RISC-V-32 /usr"); + AddType(0x8339, "BEAEC34B-8442-439B-A40B-984381ED097D", "Linux RISC-V-64 /usr"); + AddType(0x833A, "CD0F869B-D0FB-4CA0-B141-9EA87CC78D66", "Linux s390 /usr"); + AddType(0x833B, "8A4F5770-50AA-4ED3-874A-99B710DB6FEA", "Linux s390x /usr"); + AddType(0x833C, "55497029-C7C1-44CC-AA39-815ED1558630", "Linux TILE-Gx /usr"); + AddType(0x833D, "FC56D9E9-E6E5-4C06-BE32-E74407CE09A5", "Linux Alpha root verity"); + AddType(0x833E, "24B2D975-0F97-4521-AFA1-CD531E421B8D", "Linux ARC root verity"); + AddType(0x833F, "F3393B22-E9AF-4613-A948-9D3BFBD0C535", "Linux LoongArch root verity"); + AddType(0x8340, "7A430799-F711-4C7E-8E5B-1D685BD48607", "Linux MIPS-32 BE root verity"); + AddType(0x8341, "579536F8-6A33-4055-A95A-DF2D5E2C42A8", "Linux MIPS-64 BE root verity"); + AddType(0x8342, "D7D150D2-2A04-4A33-8F12-16651205FF7B", "Linux MIPS-32 LE root verity"); + AddType(0x8343, "16B417F8-3E06-4F57-8DD2-9B5232F41AA6", "Linux MIPS-64 LE root verity"); + AddType(0x8344, "D212A430-FBC5-49F9-A983-A7FEEF2B8D0E", "Linux PA-RISC root verity"); + AddType(0x8345, "906BD944-4589-4AAE-A4E4-DD983917446A", "Linux PowerPC-64 LE root verity"); + AddType(0x8346, "9225A9A3-3C19-4D89-B4F6-EEFF88F17631", "Linux PowerPC-64 BE root verity"); + AddType(0x8347, "98CFE649-1588-46DC-B2F0-ADD147424925", "Linux PowerPC-32 root verity"); + AddType(0x8348, "AE0253BE-1167-4007-AC68-43926C14C5DE", "Linux RISC-V-32 root verity"); + AddType(0x8349, "B6ED5582-440B-4209-B8DA-5FF7C419EA3D", "Linux RISC-V-64 root verity"); + AddType(0x834A, "7AC63B47-B25C-463B-8DF8-B4A94E6C90E1", "Linux s390 root verity"); + AddType(0x834B, "B325BFBE-C7BE-4AB8-8357-139E652D2F6B", "Linux s390x root verity"); + AddType(0x834C, "966061EC-28E4-4B2E-B4A5-1F0A825A1D84", "Linux TILE-Gx root verity"); + AddType(0x834D, "8CCE0D25-C0D0-4A44-BD87-46331BF1DF67", "Linux Alpha /usr verity"); + AddType(0x834E, "FCA0598C-D880-4591-8C16-4EDA05C7347C", "Linux ARC /usr verity"); + AddType(0x834F, "F46B2C26-59AE-48F0-9106-C50ED47F673D", "Linux LoongArch /usr verity"); + AddType(0x8350, "6E5A1BC8-D223-49B7-BCA8-37A5FCCEB996", "Linux MIPS-32 BE /usr verity"); + AddType(0x8351, "81CF9D90-7458-4DF4-8DCF-C8A3A404F09B", "Linux MIPS-64 BE /usr verity"); + AddType(0x8352, "46B98D8D-B55C-4E8F-AAB3-37FCA7F80752", "Linux MIPS-32 LE /usr verity"); + AddType(0x8353, "3C3D61FE-B5F3-414D-BB71-8739A694A4EF", "Linux MIPS-64 LE /usr verity"); + AddType(0x8354, "5843D618-EC37-48D7-9F12-CEA8E08768B2", "Linux PA-RISC /usr verity"); + AddType(0x8355, "EE2B9983-21E8-4153-86D9-B6901A54D1CE", "Linux PowerPC-64 LE /usr verity"); + AddType(0x8356, "BDB528A5-A259-475F-A87D-DA53FA736A07", "Linux PowerPC-64 BE /usr verity"); + AddType(0x8357, "DF765D00-270E-49E5-BC75-F47BB2118B09", "Linux PowerPC-32 /usr verity"); + AddType(0x8358, "CB1EE4E3-8CD0-4136-A0A4-AA61A32E8730", "Linux RISC-V-32 /usr verity"); + AddType(0x8359, "8F1056BE-9B05-47C4-81D6-BE53128E5B54", "Linux RISC-V-64 /usr verity"); + AddType(0x835A, "B663C618-E7BC-4D6D-90AA-11B756BB1797", "Linux s390 /usr verity"); + AddType(0x835B, "31741CC4-1A2A-4111-A581-E00B447D2D06", "Linux s390x /usr verity"); + AddType(0x835C, "2FB4BF56-07FA-42DA-8132-6B139F2026AE", "Linux TILE-Gx /usr verity"); + AddType(0x835D, "D46495B7-A053-414F-80F7-700C99921EF8", "Linux Alpha root verity signature"); + AddType(0x835E, "143A70BA-CBD3-4F06-919F-6C05683A78BC", "Linux ARC root verity signature"); + AddType(0x835F, "42B0455F-EB11-491D-98D3-56145BA9D037", "Linux ARM32 root verity signature"); + AddType(0x8360, "6DB69DE6-29F4-4758-A7A5-962190F00CE3", "Linux ARM64 root verity signature"); + AddType(0x8361, "E98B36EE-32BA-4882-9B12-0CE14655F46A", "Linux IA-64 root verity signature"); + AddType(0x8362, "5AFB67EB-ECC8-4F85-AE8E-AC1E7C50E7D0", "Linux LoongArch root verity signature"); + AddType(0x8363, "BBA210A2-9C5D-45EE-9E87-FF2CCBD002D0", "Linux MIPS-32 BE root verity signature"); + AddType(0x8364, "43CE94D4-0F3D-4999-8250-B9DEAFD98E6E", "Linux MIPS-64 BE root verity signature"); + AddType(0x8365, "C919CC1F-4456-4EFF-918C-F75E94525CA5", "Linux MIPS-32 LE root verity signature"); + AddType(0x8366, "904E58EF-5C65-4A31-9C57-6AF5FC7C5DE7", "Linux MIPS-64 LE root verity signature"); + AddType(0x8367, "15DE6170-65D3-431C-916E-B0DCD8393F25", "Linux PA-RISC root verity signature"); + AddType(0x8368, "D4A236E7-E873-4C07-BF1D-BF6CF7F1C3C6", "Linux PowerPC-64 LE root verity signature"); + AddType(0x8369, "F5E2C20C-45B2-4FFA-BCE9-2A60737E1AAF", "Linux PowerPC-64 BE root verity signature"); + AddType(0x836A, "1B31B5AA-ADD9-463A-B2ED-BD467FC857E7", "Linux PowerPC-32 root verity signature"); + AddType(0x836B, "3A112A75-8729-4380-B4CF-764D79934448", "Linux RISC-V-32 root verity signature"); + AddType(0x836C, "EFE0F087-EA8D-4469-821A-4C2A96A8386A", "Linux RISC-V-64 root verity signature"); + AddType(0x836D, "3482388E-4254-435A-A241-766A065F9960", "Linux s390 root verity signature"); + AddType(0x836E, "C80187A5-73A3-491A-901A-017C3FA953E9", "Linux s390x root verity signature"); + AddType(0x836F, "B3671439-97B0-4A53-90F7-2D5A8F3AD47B", "Linux TILE-Gx root verity signature"); + AddType(0x8370, "41092B05-9FC8-4523-994F-2DEF0408B176", "Linux x86-64 root verity signature"); + AddType(0x8371, "5996FC05-109C-48DE-808B-23FA0830B676", "Linux x86 root verity signature"); + AddType(0x8372, "5C6E1C76-076A-457A-A0FE-F3B4CD21CE6E", "Linux Alpha /usr verity signature"); + AddType(0x8373, "94F9A9A1-9971-427A-A400-50CB297F0F35", "Linux ARC /usr verity signature"); + AddType(0x8374, "D7FF812F-37D1-4902-A810-D76BA57B975A", "Linux ARM32 /usr verity signature"); + AddType(0x8375, "C23CE4FF-44BD-4B00-B2D4-B41B3419E02A", "Linux ARM64 /usr verity signature"); + AddType(0x8376, "8DE58BC2-2A43-460D-B14E-A76E4A17B47F", "Linux IA-64 /usr verity signature"); + AddType(0x8377, "B024F315-D330-444C-8461-44BBDE524E99", "Linux LoongArch /usr verity signature"); + AddType(0x8378, "97AE158D-F216-497B-8057-F7F905770F54", "Linux MIPS-32 BE /usr verity signature"); + AddType(0x8379, "05816CE2-DD40-4AC6-A61D-37D32DC1BA7D", "Linux MIPS-64 BE /usr verity signature"); + AddType(0x837A, "3E23CA0B-A4BC-4B4E-8087-5AB6A26AA8A9", "Linux MIPS-32 LE /usr verity signature"); + AddType(0x837B, "F2C2C7EE-ADCC-4351-B5C6-EE9816B66E16", "Linux MIPS-64 LE /usr verity signature"); + AddType(0x837C, "450DD7D1-3224-45EC-9CF2-A43A346D71EE", "Linux PA-RISC /usr verity signature"); + AddType(0x837D, "C8BFBD1E-268E-4521-8BBA-BF314C399557", "Linux PowerPC-64 LE /usr verity signature"); + AddType(0x837E, "0B888863-D7F8-4D9E-9766-239FCE4D58AF", "Linux PowerPC-64 BE /usr verity signature"); + AddType(0x837F, "7007891D-D371-4A80-86A4-5CB875B9302E", "Linux PowerPC-32 /usr verity signature"); + AddType(0x8380, "C3836A13-3137-45BA-B583-B16C50FE5EB4", "Linux RISC-V-32 /usr verity signature"); + AddType(0x8381, "D2F9000A-7A18-453F-B5CD-4D32F77A7B32", "Linux RISC-V-64 /usr verity signature"); + AddType(0x8382, "17440E4F-A8D0-467F-A46E-3912AE6EF2C5", "Linux s390 /usr verity signature"); + AddType(0x8383, "3F324816-667B-46AE-86EE-9B0C0C6C11B4", "Linux s390x /usr verity signature"); + AddType(0x8384, "4EDE75E2-6CCC-4CC8-B9C7-70334B087510", "Linux TILE-Gx /usr verity signature"); + AddType(0x8385, "E7BB33FB-06CF-4E81-8273-E543B413E2E2", "Linux x86-64 /usr verity signature"); + AddType(0x8386, "974A71C0-DE41-43C3-BE5D-5C5CCD1AD2C0", "Linux x86 /usr verity signature"); // Used by Intel Rapid Start technology AddType(0x8400, "D3BFE2DE-3DAF-11DF-BA40-E3A556D89593", "Intel Rapid Start"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/sgdisk.8 new/gptfdisk-1.0.10/sgdisk.8 --- old/gptfdisk-1.0.9/sgdisk.8 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/sgdisk.8 2024-02-20 01:55:41.000000000 +0100 @@ -1,6 +1,6 @@ -.\" Copyright 2011-2022 Roderick W. Smith ([email protected]) +.\" Copyright 2011-2024 Roderick W. Smith ([email protected]) .\" May be distributed under the GNU General Public License -.TH "SGDISK" "8" "1.0.9" "Roderick W. Smith" "GPT fdisk Manual" +.TH "SGDISK" "8" "1.0.10" "Roderick W. Smith" "GPT fdisk Manual" .SH "NAME" sgdisk \- Command\-line GUID partition table (GPT) manipulator for Linux and Unix .SH "SYNOPSIS" @@ -23,7 +23,7 @@ main and backup data, as well as between the GPT headers and the partition tables. For information on MBR vs. GPT, as well as GPT terminology and structure, see the extended \fBgdisk\fR documentation at -\fIhttp://www.rodsbooks.com/gdisk/\fR or consult Wikipedia. +\fIhttps://www.rodsbooks.com/gdisk/\fR or consult Wikipedia. The \fBsgdisk\fR program employs a user interface that's based entirely on the command line, making it suitable for use in scripts or by experts who @@ -304,13 +304,23 @@ to create a partition in that space, then it will \fBnot\fR be end\-aligned. .TP -.B \-j, \-\-adjust\-main\-table=sector -Adjust the location of the main partition table. This value is normally 2, +.B \-j, \-\-move\-main\-table=sector +Sets the start sector of the main partition table. This value is normally 2, but it may need to be increased in some cases, such as when a system\-on\-chip (SoC) is hard\-coded to read boot code from sector 2. I recommend against adjusting this value unless doing so is absolutely necessary. +.TP +.B \-k, \-\-move\-backup\-table=sector +Sets the start sector of the second/backup partition table. The backup table +is usually placed just before the last sector, which holds the backup header. +The default value is thus the size of the disk, minus one, minus the total +size of the partition table (in sectors, usually 32). +There are probably very few reasons to ever change this, and while the EFI +standard does not mandate it, most tooling assumes the backup table to be at +the very end of the disk. + .TP .B \-l, \-\-load\-backup=file Load partition data from a backup file. This option is the reverse of the @@ -370,8 +380,11 @@ .B \-N, \-\-largest\-new=num Create a new partition that fills the largest available block of space on the disk. You can use the \fI\-a\fR (\fI\-\-set\-alignment\fR) option to -adjust the alignment, if desired. A num value of 0 causes the program to -use the first available partition number. +adjust the alignment, if desired. A num value of 0 causes the program to use +the first available partition number. Subsequent uses of the \fI\-A\fR +(\fI\-\-attributes\fR), \fI\-c\fR (\fI\-\-change\-name\fR), \fI\-t\fR +(\fI\-\-typecode\fR), and \fI\-u\fR (\fI\-\-partition\-guid\fR) options may +also use \fI0\fR to refer to the same partition. .TP .B \-o, \-\-clear @@ -632,11 +645,11 @@ .BR sfdisk (8), .BR fixparts (8). -\fIhttp://en.wikipedia.org/wiki/GUID_Partition_Table\fR +\fIhttps://en.wikipedia.org/wiki/GUID_Partition_Table\fR -\fIhttp://developer.apple.com/technotes/tn2006/tn2166.html\fR +\fIhttps://developer.apple.com/technotes/tn2006/tn2166.html\fR -\fIhttp://www.rodsbooks.com/gdisk/\fR +\fIhttps://www.rodsbooks.com/gdisk/\fR .SH "AVAILABILITY" The \fBsgdisk\fR command is part of the \fIGPT fdisk\fR package and is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/sgdisk.html new/gptfdisk-1.0.10/sgdisk.html --- old/gptfdisk-1.0.9/sgdisk.html 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/sgdisk.html 2024-02-20 01:55:41.000000000 +0100 @@ -4,7 +4,7 @@ <HTML><HEAD><TITLE>Man page of SGDISK</TITLE> </HEAD><BODY> <H1>SGDISK</H1> -Section: GPT fdisk Manual (8)<BR>Updated: 1.0.9<BR><A HREF="#index">Index</A> +Section: GPT fdisk Manual (8)<BR>Updated: 1.0.10<BR><A HREF="#index">Index</A> <A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR> <A NAME="lbAB"> </A> @@ -37,7 +37,7 @@ main and backup data, as well as between the GPT headers and the partition tables. For information on MBR vs. GPT, as well as GPT terminology and structure, see the extended <B>gdisk</B> documentation at -<I><A HREF="http://www.rodsbooks.com/gdisk/">http://www.rodsbooks.com/gdisk/</A></I> or consult Wikipedia. +<I><A HREF="https://www.rodsbooks.com/gdisk/">https://www.rodsbooks.com/gdisk/</A></I> or consult Wikipedia. <P> The <B>sgdisk</B> program employs a user interface that's based entirely on the command line, making it suitable for use in scripts or by experts who @@ -344,15 +344,26 @@ with the current final partition being aligned, and if <B>sgdisk</B> is asked to create a partition in that space, then it will <B>not</B> be end-aligned. <P> -<DT><B>-j, --adjust-main-table=sector</B> +<DT><B>-j, --move-main-table=sector</B> <DD> -Adjust the location of the main partition table. This value is normally 2, +Sets the start sector of the main partition table. This value is normally 2, but it may need to be increased in some cases, such as when a system-on-chip (SoC) is hard-coded to read boot code from sector 2. I recommend against adjusting this value unless doing so is absolutely necessary. <P> +<DT><B>-k, --move-backup-table=sector</B> + +<DD> +Sets the start sector of the second/backup partition table. The backup table +is usually placed just before the last sector, which holds the backup header. +The default value is thus the size of the disk, minus one, minus the total +size of the partition table (in sectors, usually 32). +There are probably very few reasons to ever change this, and while the EFI +standard does not mandate it, most tooling assumes the backup table to be at +the very end of the disk. +<P> <DT><B>-l, --load-backup=file</B> <DD> @@ -417,8 +428,11 @@ <DD> Create a new partition that fills the largest available block of space on the disk. You can use the <I>-a</I> (<I>--set-alignment</I>) option to -adjust the alignment, if desired. A num value of 0 causes the program to -use the first available partition number. +adjust the alignment, if desired. A num value of 0 causes the program to use +the first available partition number. Subsequent uses of the <I>-A</I> +(<I>--attributes</I>), <I>-c</I> (<I>--change-name</I>), <I>-t</I> +(<I>--typecode</I>), and <I>-u</I> (<I>--partition-guid</I>) options may +also use <I>0</I> to refer to the same partition. <P> <DT><B>-o, --clear</B> @@ -734,11 +748,11 @@ <B><A HREF="/cgi-bin/man/man2html?8+fixparts">fixparts</A></B>(8). <P> -<I><A HREF="http://en.wikipedia.org/wiki/GUID_Partition_Table">http://en.wikipedia.org/wiki/GUID_Partition_Table</A></I> +<I><A HREF="https://en.wikipedia.org/wiki/GUID_Partition_Table">https://en.wikipedia.org/wiki/GUID_Partition_Table</A></I> <P> -<I><A HREF="http://developer.apple.com/technotes/tn2006/tn2166.html">http://developer.apple.com/technotes/tn2006/tn2166.html</A></I> +<I><A HREF="https://developer.apple.com/technotes/tn2006/tn2166.html">https://developer.apple.com/technotes/tn2006/tn2166.html</A></I> <P> -<I><A HREF="http://www.rodsbooks.com/gdisk/">http://www.rodsbooks.com/gdisk/</A></I> +<I><A HREF="https://www.rodsbooks.com/gdisk/">https://www.rodsbooks.com/gdisk/</A></I> <P> <A NAME="lbAJ"> </A> <H2>AVAILABILITY</H2> @@ -764,6 +778,6 @@ This document was created by <A HREF="/cgi-bin/man/man2html">man2html</A>, using the manual pages.<BR> -Time: 23:17:12 GMT, April 14, 2022 +Time: 00:55:41 GMT, February 20, 2024 </BODY> </HTML> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/support.cc new/gptfdisk-1.0.10/support.cc --- old/gptfdisk-1.0.9/support.cc 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/support.cc 2024-02-20 01:55:41.000000000 +0100 @@ -3,7 +3,7 @@ // Primarily by Rod Smith, February 2009, but with a few functions // copied from other sources (see attributions below). -/* This program is copyright (c) 2009-2022 by Roderick W. Smith. It is distributed +/* This program is copyright (c) 2009-2024 by Roderick W. Smith. It is distributed under the terms of the GNU GPL version 2, as detailed in the COPYING file. */ #define __STDC_LIMIT_MACROS @@ -124,6 +124,8 @@ // inValue works out to something outside the range low-high, returns the // computed value; the calling function is responsible for checking the // validity of this value. +// If inValue contains a decimal number (e.g., "9.5G"), quietly truncate it +// (to "9G" in this example). // NOTE: There's a difference in how GCC and VC++ treat oversized values // (say, "999999999999999999999") read via the ">>" operator; GCC turns // them into the maximum value for the type, whereas VC++ turns them into @@ -158,6 +160,15 @@ badInput = 1; inString >> response >> suffix; suffix = toupper(suffix); + foundAt = suffixes.find(suffix); + // If suffix is invalid, try to find a valid one. Done because users + // sometimes enter decimal numbers; when they do, suffix becomes + // '.', and we need to truncate the number and find the real suffix. + while (foundAt > (suffixes.length() - 1) && inString.peek() != -1) { + inString >> suffix; + foundAt = suffixes.find(suffix); + suffix = toupper(suffix); + } // If no response, or if response == 0, use default (def) if ((inValue.length() == 0) || (response == 0)) { @@ -167,7 +178,6 @@ } // if // Find multiplication and division factors for the suffix - foundAt = suffixes.find(suffix); if (foundAt != string::npos) { bytesPerUnit = UINT64_C(1) << (10 * (foundAt + 1)); mult = bytesPerUnit / sSize; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gptfdisk-1.0.9/support.h new/gptfdisk-1.0.10/support.h --- old/gptfdisk-1.0.9/support.h 2022-04-15 01:17:12.000000000 +0200 +++ new/gptfdisk-1.0.10/support.h 2024-02-20 01:55:41.000000000 +0100 @@ -8,7 +8,7 @@ #include <stdlib.h> #include <string> -#define GPTFDISK_VERSION "1.0.9" +#define GPTFDISK_VERSION "1.0.10" #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) // Darwin (Mac OS) & FreeBSD: disk IOCTLs are different, and there is no lseek64
