Support ancient .NET in FileTypes

This commit is contained in:
Matt Nadareski
2024-02-28 21:59:13 -05:00
parent 080c8a749b
commit de59d0252c
49 changed files with 597 additions and 59 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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 };

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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