diff --git a/SabreTools.Library/Data/Constants.cs b/SabreTools.Library/Data/Constants.cs index 61c2201d..6d01f981 100644 --- a/SabreTools.Library/Data/Constants.cs +++ b/SabreTools.Library/Data/Constants.cs @@ -502,16 +502,26 @@ namespace SabreTools.Library.Data #region Magic numbers - public static readonly byte[] SevenZipSignature = { 0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c }; - public readonly static byte[] CHDSignature = { 0x4d, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x48, 0x44 }; - public static readonly byte[] GzSignature = { 0x1f, 0x8b }; - public static readonly byte[] RarSignature = { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00 }; - public static readonly byte[] RarFiveSignature = { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00 }; - public static readonly byte[] TarSignature = { 0x75, 0x73, 0x74, 0x61, 0x72, 0x20, 0x20, 0x00 }; - public static readonly byte[] TarZeroSignature = { 0x75, 0x73, 0x74, 0x61, 0x72, 0x00, 0x30, 0x30 }; - public static readonly byte[] ZipSignature = { 0x50, 0x4b, 0x03, 0x04 }; - public static readonly byte[] ZipSignatureEmpty = { 0x50, 0x4b, 0x05, 0x06 }; - public static readonly byte[] ZipSignatureSpanned = { 0x50, 0x4b, 0x07, 0x08 }; + public static readonly byte[] SevenZipSignature = { 0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c }; + public static readonly byte[] BZ2Signature = { 0x42, 0x5a, 0x68 }; + public static readonly byte[] CabinetSignature = { 0x4d, 0x53, 0x43, 0x46 }; + public static readonly byte[] CHDSignature = { 0x4d, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x48, 0x44 }; + public static readonly byte[] ELFSignature = { 0x7f, 0x45, 0x4c, 0x46 }; + public static readonly byte[] GzSignature = { 0x1f, 0x8b }; + public static readonly byte[] LRZipSignature = { 0x4c, 0x52, 0x5a, 0x49 }; + public static readonly byte[] LZ4Signature = { 0x18, 0x4d, 0x22, 0x04 }; + public static readonly byte[] LZ4SkippableMinSignature = { 0x18, 0x4d, 0x22, 0x04 }; + public static readonly byte[] LZ4SkippableMaxSignature = { 0x18, 0x4d, 0x2a, 0x5f }; + public static readonly byte[] RarSignature = { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00 }; + public static readonly byte[] RarFiveSignature = { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00 }; + public static readonly byte[] TarSignature = { 0x75, 0x73, 0x74, 0x61, 0x72, 0x20, 0x20, 0x00 }; + public static readonly byte[] TarZeroSignature = { 0x75, 0x73, 0x74, 0x61, 0x72, 0x00, 0x30, 0x30 }; + public static readonly byte[] XZSignature = { 0xfd, 0x37, 0x7a, 0x58, 0x5a, 0x00, 0x00 }; + public static readonly byte[] ZipSignature = { 0x50, 0x4b, 0x03, 0x04 }; + public static readonly byte[] ZipSignatureEmpty = { 0x50, 0x4b, 0x05, 0x06 }; + public static readonly byte[] ZipSignatureSpanned = { 0x50, 0x4b, 0x07, 0x08 }; + public static readonly byte[] ZPAQSignature = { 0x7a, 0x50, 0x51 }; + public static readonly byte[] ZstdSignature = { 0xfd, 0x2f, 0xb5 }; #endregion diff --git a/SabreTools.Library/Tools/Utilities.cs b/SabreTools.Library/Tools/Utilities.cs index e1eb5c2b..f40f76d4 100644 --- a/SabreTools.Library/Tools/Utilities.cs +++ b/SabreTools.Library/Tools/Utilities.cs @@ -473,7 +473,7 @@ namespace SabreTools.Library.Tools archive = new TorrentZipArchive(input); break; default: - // We ignore these types for now + // We ignore all other types for now break; } @@ -1339,18 +1339,44 @@ namespace SabreTools.Library.Tools { outFileType = FileType.GZipArchive; } - else if (magic.StartsWith(Constants.RarSignature) || magic.StartsWith(Constants.RarFiveSignature)) + else if (magic.StartsWith(Constants.LRZipSignature)) + { + outFileType = FileType.LRZipArchive; + } + else if (magic.StartsWith(Constants.LZ4Signature) + || magic.StartsWith(Constants.LZ4SkippableMinSignature) + || magic.StartsWith(Constants.LZ4SkippableMaxSignature)) + { + outFileType = FileType.LZ4Archive; + } + else if (magic.StartsWith(Constants.RarSignature) + || magic.StartsWith(Constants.RarFiveSignature)) { outFileType = FileType.RarArchive; } - else if (magic.StartsWith(Constants.TarSignature) || magic.StartsWith(Constants.TarZeroSignature)) + else if (magic.StartsWith(Constants.TarSignature) + || magic.StartsWith(Constants.TarZeroSignature)) { outFileType = FileType.TapeArchive; } - else if (magic.StartsWith(Constants.ZipSignature) || magic.StartsWith(Constants.ZipSignatureEmpty) || magic.StartsWith(Constants.ZipSignatureSpanned)) + else if (magic.StartsWith(Constants.XZSignature)) + { + outFileType = FileType.XZArchive; + } + else if (magic.StartsWith(Constants.ZipSignature) + || magic.StartsWith(Constants.ZipSignatureEmpty) + || magic.StartsWith(Constants.ZipSignatureSpanned)) { outFileType = FileType.ZipArchive; } + else if (magic.StartsWith(Constants.ZPAQSignature)) + { + outFileType = FileType.ZPAQArchive; + } + else if (magic.StartsWith(Constants.ZstdSignature)) + { + outFileType = FileType.ZstdArchive; + } } catch (Exception) {