Skip to content
metadata version 10.2, patch level 4

For this release, I took the code a little more seriously.

 - (feature) A new build configuration was added, called "USERSPACE".
   This is for block devices that have no partition labels so these can
   still be mapped. This can be enabled by specifying USERSPACE=1 in
   the make flags.
 - (deprecation) A warning message was added for a retrofit-specific
   fix. This fix is no longer needed because the only slot to process
   can be specified on the command line. This will be removed once the
   metadata format changes to keep backward compatibility when it is
   expected (same format version).
 - (bug fix) An unconfirmed bug was found where the program would
   always read the first slot's metadata. This was fixed.
 - (bug fix) The slot suffixing attribute of the partition wasn't
   respected. Instead, the program used the block device's attribute to
   determine whether the slot should be suffixed. This is now fixed.
 - (bug fix) A duplicate error message was changed to avoid confusion.
 - (bug fix) The program previously ignored the block device resolved
   by libblkid. Now, blkid tokens can be specified on the command line.
 - (bug fix) When the program couldn't find a valid metadata header, it
   previously continued anyway. It should now skip the invalid metadata
   header.
 - (semantic change) This program's error messages previously had
   non-conventional scopes (e.g. "geometry: main: ",
   "metadata: backup: ", etc.). This version uses the metadata
   partition argument as the scope.
 - (non-functional) A maintenance script was added. This makes it
   convenient for me (or anyone else) to track the upstream format and
   make appropriate changes to maintain compatibility.
 - (non-functional) The -Wall -Wextra -Wpedantic C flags made some
   warnings about the program using pointer arithmetic. These warnings
   were suppressed by first casting to a byte pointer, then indexing it
   as an array, then casting the pointer to its correct type.
 - (non-functional) Some #include statements were grouped together.
   This somewhat improves readability at the start of the main code.
 - (non-functional) Code comments were made to divide the main code
   into parts. This should prevent anyone from getting lost when
   reading it.
 - (non-functional) Some useless variables were removed. One was
   redundant and was only there for implicit casting. The others were
   unused and appeared in the warnings.
 - (non-functional) The internal control flow structures for retrieving
   the geometry and header structs (choosing between main and backup)
   were previously different. Now, they are the same.