From 201af08f5f9fd7c93e08ced1a93539d649aa127f Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 25 Apr 2026 21:45:53 -0400 Subject: [PATCH] Document alternative TGZ layout --- SabreTools.Data.Models/GZIP/Enums.cs | 26 ++++++++++++++++++++++++++ SabreTools.Wrappers/GZip.cs | 10 ++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/SabreTools.Data.Models/GZIP/Enums.cs b/SabreTools.Data.Models/GZIP/Enums.cs index b3c7048a..a48271c6 100644 --- a/SabreTools.Data.Models/GZIP/Enums.cs +++ b/SabreTools.Data.Models/GZIP/Enums.cs @@ -66,6 +66,32 @@ namespace SabreTools.Data.Models.GZIP RESERVED7 = 0x80, } + /// + /// TorrentGZ alternative header types + /// + public enum HeaderFileType + { + // Archive + Nothing = 0x00, + ZIP = 0x01, + GZ = 0x02, + SevenZip = 0x03, + RAR = 0x04, + + // Specialty + CHD = 0x05, + + // Copier header + A7800 = 0x06, + Lynx = 0x07, + FDS = 0x08, + NES = 0x09, + PCE = 0x0A, + PSID = 0x0B, + SNES = 0x0C, + SPC = 0x0D, + } + /// public enum OperatingSystem : byte { diff --git a/SabreTools.Wrappers/GZip.cs b/SabreTools.Wrappers/GZip.cs index 993c920b..83d40b7c 100644 --- a/SabreTools.Wrappers/GZip.cs +++ b/SabreTools.Wrappers/GZip.cs @@ -155,9 +155,15 @@ namespace SabreTools.Wrappers // - 0x00-0x0F - MD5 hash of the internal file // - 0x10-0x13 - CRC-32 checksum of the internal file // - 0x14-0x1B - Little-endian file size of the internal file - if (Header.ExtraLength != 0x1C) + // The following fields are included for alternate headers: + // - 0x1C - Alternative header type + // - 0x1D-0x2C - Alternative MD5 hash + // - 0x2D-0x40 - Alternative SHA-1 hash + // - 0x41-0x44 - Alternative CRC-32 checksum + // - 0x45-0x48 - Alternative little-endian uncompressed file size + if (Header.ExtraLength != 0x1C && Header.ExtraLength != 0x4D) return false; - if (Header.ExtraFieldBytes is null || Header.ExtraFieldBytes.Length != 0x1C) + if (Header.ExtraFieldBytes is null || (Header.ExtraFieldBytes.Length != 0x1C && Header.ExtraFieldBytes.Length != 0x4D)) return false; return true;