mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Support ancient .NET in FileTypes
This commit is contained in:
@@ -7,7 +7,9 @@ using Compress.SevenZip.Structure;
|
||||
using Compress.Support.Compression.BZip2;
|
||||
using Compress.Support.Compression.LZMA;
|
||||
using Compress.Support.Compression.PPmd;
|
||||
#if NET462_OR_GREATER || NETCOREAPP
|
||||
using Compress.Support.Compression.zStd;
|
||||
#endif
|
||||
using Compress.Support.Filters;
|
||||
using FileStream = RVIO.FileStream;
|
||||
|
||||
@@ -163,9 +165,11 @@ namespace Compress.SevenZip
|
||||
case DecompressType.BCJ2:
|
||||
coder.DecoderStream = new BCJ2Filter(inputCoders[0], inputCoders[1], inputCoders[2], inputCoders[3]);
|
||||
break;
|
||||
#if NET462_OR_GREATER || NETCOREAPP
|
||||
case DecompressType.ZSTD:
|
||||
coder.DecoderStream =new zStdSharp(inputCoders[0]);
|
||||
coder.DecoderStream = new zStdSharp(inputCoders[0]);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return ZipReturn.ZipDecodeError;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Compress.SevenZip
|
||||
ZipStatus = ZipStatus.TrrntZip;
|
||||
}
|
||||
|
||||
private bool IsRomVault7Z(long testBaseOffset,ulong testHeaderPos,ulong testHeaderLength,uint testHeaderCRC)
|
||||
private bool IsRomVault7Z(long testBaseOffset, ulong testHeaderPos, ulong testHeaderLength, uint testHeaderCRC)
|
||||
{
|
||||
long length = _zipFs.Length;
|
||||
if (length < 32)
|
||||
@@ -39,8 +39,8 @@ namespace Compress.SevenZip
|
||||
byte[] rv7Zid = Util.Enc.GetBytes(sig);
|
||||
byte[] header = new byte[12];
|
||||
_zipFs.Read(header, 0, 12);
|
||||
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
if (header[i] != rv7Zid[i])
|
||||
@@ -52,7 +52,11 @@ namespace Compress.SevenZip
|
||||
uint headerCRC;
|
||||
ulong headerOffset; // is location of header in file
|
||||
ulong headerSize;
|
||||
#if NET20 || NET35 || NET40
|
||||
using (BinaryReader br = new(_zipFs, Encoding.UTF8))
|
||||
#else
|
||||
using (BinaryReader br = new(_zipFs, Encoding.UTF8, true))
|
||||
#endif
|
||||
{
|
||||
headerCRC = br.ReadUInt32();
|
||||
headerOffset = br.ReadUInt64();
|
||||
@@ -62,7 +66,7 @@ namespace Compress.SevenZip
|
||||
if (headerCRC != testHeaderCRC)
|
||||
return false;
|
||||
|
||||
if (headerOffset != testHeaderPos+(ulong)testBaseOffset)
|
||||
if (headerOffset != testHeaderPos + (ulong)testBaseOffset)
|
||||
return false;
|
||||
|
||||
return headerSize == testHeaderLength;
|
||||
|
||||
@@ -57,7 +57,11 @@ namespace Compress.SevenZip
|
||||
_signatureHeader = new SignatureHeader();
|
||||
_header = new Header();
|
||||
|
||||
#if NET20 || NET35 || NET40
|
||||
using (BinaryWriter bw = new(_zipFs, Encoding.UTF8))
|
||||
#else
|
||||
using (BinaryWriter bw = new(_zipFs, Encoding.UTF8, true))
|
||||
#endif
|
||||
{
|
||||
_signatureHeader.Write(bw);
|
||||
}
|
||||
@@ -179,6 +183,7 @@ namespace Compress.SevenZip
|
||||
_compressStream = lzs;
|
||||
break;
|
||||
|
||||
#if NET462_OR_GREATER || NETCOREAPP
|
||||
case SevenZipCompressType.zstd:
|
||||
|
||||
ZstdSharp.CompressionStream zss = new(_zipFs, 19);
|
||||
@@ -186,6 +191,7 @@ namespace Compress.SevenZip
|
||||
newStream.Properties = new byte[] { 1, 5, 19, 0, 0 };
|
||||
_compressStream = zss;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case SevenZipCompressType.uncompressed:
|
||||
newStream.Method = new byte[] { 0 };
|
||||
|
||||
@@ -130,7 +130,11 @@ namespace Compress.SevenZip
|
||||
byte[] newHeaderByte;
|
||||
using (Stream headerMem = new MemoryStream())
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
using BinaryWriter headerBw = new(headerMem, Encoding.UTF8);
|
||||
#else
|
||||
using BinaryWriter headerBw = new(headerMem, Encoding.UTF8, true);
|
||||
#endif
|
||||
_header.WriteHeader(headerBw);
|
||||
|
||||
newHeaderByte = new byte[headerMem.Length];
|
||||
@@ -140,7 +144,7 @@ namespace Compress.SevenZip
|
||||
|
||||
uint mainHeaderCRC = CRC.CalculateDigest(newHeaderByte, 0, (uint)newHeaderByte.Length);
|
||||
|
||||
#region Header Compression
|
||||
#region Header Compression
|
||||
long packedHeaderPos = _zipFs.Position;
|
||||
LzmaEncoderProperties ep = new(true, GetDictionarySizeFromUncompressedSize((ulong)newHeaderByte.Length), 64);
|
||||
LzmaStream lzs = new(ep, false, _zipFs);
|
||||
@@ -177,7 +181,11 @@ namespace Compress.SevenZip
|
||||
|
||||
using (Stream headerMem = new MemoryStream())
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
using BinaryWriter bw = new(headerMem, Encoding.UTF8);
|
||||
#else
|
||||
using BinaryWriter bw = new(headerMem, Encoding.UTF8, true);
|
||||
#endif
|
||||
bw.Write((byte)HeaderProperty.kEncodedHeader);
|
||||
streamsInfo.WriteHeader(bw);
|
||||
|
||||
@@ -186,10 +194,13 @@ namespace Compress.SevenZip
|
||||
headerMem.Read(newHeaderByte, 0, newHeaderByte.Length);
|
||||
}
|
||||
mainHeaderCRC = CRC.CalculateDigest(newHeaderByte, 0, (uint)newHeaderByte.Length);
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
#if NET20 || NET35 || NET40
|
||||
using (BinaryWriter bw = new(_zipFs, Encoding.UTF8))
|
||||
#else
|
||||
using (BinaryWriter bw = new(_zipFs, Encoding.UTF8, true))
|
||||
#endif
|
||||
{
|
||||
ulong headerPosition = (ulong)_zipFs.Position + 32; //tzip header is 32 bytes
|
||||
WriteRomVault7Zip(bw, headerPosition, (ulong)newHeaderByte.Length, mainHeaderCRC);
|
||||
|
||||
@@ -98,7 +98,11 @@ namespace Compress.SevenZip.Structure
|
||||
byte[] namebyte;
|
||||
using (MemoryStream nameMem = new())
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
using BinaryWriter nameBw = new(nameMem, Encoding.UTF8);
|
||||
#else
|
||||
using BinaryWriter nameBw = new(nameMem, Encoding.UTF8, true);
|
||||
#endif
|
||||
nameBw.Write((byte)0); //not external
|
||||
foreach (string name in Names)
|
||||
{
|
||||
|
||||
@@ -49,7 +49,11 @@ namespace Compress.SevenZip.Structure
|
||||
{
|
||||
header = null;
|
||||
|
||||
#if NET20 || NET35 || NET40
|
||||
using BinaryReader br = new(stream, Encoding.UTF8);
|
||||
#else
|
||||
using BinaryReader br = new(stream, Encoding.UTF8, true);
|
||||
#endif
|
||||
HeaderProperty hp = (HeaderProperty)br.ReadByte();
|
||||
switch (hp)
|
||||
{
|
||||
|
||||
@@ -20,7 +20,11 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
public bool Read(Stream stream)
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
using BinaryReader br = new(stream, Encoding.UTF8);
|
||||
#else
|
||||
using BinaryReader br = new(stream, Encoding.UTF8, true);
|
||||
#endif
|
||||
byte[] signatureBytes = br.ReadBytes(6);
|
||||
if (!signatureBytes.Compare(Signature))
|
||||
{
|
||||
@@ -82,7 +86,11 @@ namespace Compress.SevenZip.Structure
|
||||
byte[] sigHeaderBytes;
|
||||
using (MemoryStream sigHeaderMem = new())
|
||||
{
|
||||
#if NET20 || NET35 || NET40
|
||||
using BinaryWriter sigHeaderBw = new(sigHeaderMem, Encoding.UTF8);
|
||||
#else
|
||||
using BinaryWriter sigHeaderBw = new(sigHeaderMem, Encoding.UTF8, true);
|
||||
#endif
|
||||
sigHeaderBw.Write((ulong)((long)headerpos - BaseOffset)); //NextHeaderOffset
|
||||
sigHeaderBw.Write(headerLength); //NextHeaderSize
|
||||
sigHeaderBw.Write(headerCRC); //NextHeaderCRC
|
||||
|
||||
Reference in New Issue
Block a user