mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Handle as many warnings as possible
This commit is contained in:
@@ -23,13 +23,13 @@ namespace Compress.SevenZip
|
||||
}
|
||||
|
||||
|
||||
private List<SevenZipLocalFile> _localFiles = new();
|
||||
private List<SevenZipLocalFile> _localFiles = [];
|
||||
|
||||
private FileInfo _zipFileInfo;
|
||||
private FileInfo? _zipFileInfo;
|
||||
|
||||
private Stream _zipFs;
|
||||
private Stream? _zipFs;
|
||||
|
||||
private SignatureHeader _signatureHeader;
|
||||
private SignatureHeader? _signatureHeader;
|
||||
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace Compress.SevenZip
|
||||
}
|
||||
break;
|
||||
case ZipOpenType.OpenWrite:
|
||||
_zipFs.Flush();
|
||||
_zipFs!.Flush();
|
||||
_zipFs.Close();
|
||||
_zipFs.Dispose();
|
||||
if (_zipFileInfo != null)
|
||||
@@ -106,7 +106,7 @@ namespace Compress.SevenZip
|
||||
}
|
||||
|
||||
|
||||
private Header _header;
|
||||
private Header? _header;
|
||||
|
||||
public StringBuilder HeaderReport()
|
||||
{
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace Compress.SevenZip
|
||||
}
|
||||
|
||||
|
||||
public ZipReturn ZipFileOpen(Stream inStream)
|
||||
public ZipReturn ZipFileOpen(Stream? inStream)
|
||||
{
|
||||
ZipFileClose();
|
||||
_zipFileInfo = null;
|
||||
@@ -74,12 +74,12 @@ namespace Compress.SevenZip
|
||||
try
|
||||
{
|
||||
SignatureHeader signatureHeader = new();
|
||||
if (!signatureHeader.Read(_zipFs))
|
||||
if (!signatureHeader.Read(_zipFs!))
|
||||
{
|
||||
return ZipReturn.ZipSignatureError;
|
||||
}
|
||||
|
||||
_baseOffset = _zipFs.Position;
|
||||
_baseOffset = _zipFs!.Position;
|
||||
|
||||
_zipFs.Seek(_baseOffset + (long)signatureHeader.NextHeaderOffset, SeekOrigin.Begin);
|
||||
byte[] mainHeader = new byte[signatureHeader.NextHeaderSize];
|
||||
@@ -126,7 +126,7 @@ namespace Compress.SevenZip
|
||||
if (_header == null)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < _header.FileInfo.Names.Length; i++)
|
||||
for (int i = 0; i < _header.FileInfo!.Names!.Length; i++)
|
||||
{
|
||||
SevenZipLocalFile lf = new() { Filename = _header.FileInfo.Names[i] };
|
||||
|
||||
@@ -134,13 +134,13 @@ namespace Compress.SevenZip
|
||||
{
|
||||
lf.StreamIndex = folderIndex;
|
||||
lf.StreamOffset = streamOffset;
|
||||
lf.UncompressedSize = _header.StreamsInfo.Folders[folderIndex].UnpackedStreamInfo[unpackedStreamsIndex].UnpackedSize;
|
||||
lf.CRC = Util.UIntToBytes(_header.StreamsInfo.Folders[folderIndex].UnpackedStreamInfo[unpackedStreamsIndex].Crc);
|
||||
lf.UncompressedSize = _header.StreamsInfo!.Folders![folderIndex].UnpackedStreamInfo![unpackedStreamsIndex].UnpackedSize;
|
||||
lf.CRC = Util.UIntToBytes(_header.StreamsInfo.Folders[folderIndex].UnpackedStreamInfo![unpackedStreamsIndex].Crc);
|
||||
|
||||
streamOffset += lf.UncompressedSize;
|
||||
unpackedStreamsIndex++;
|
||||
|
||||
if (unpackedStreamsIndex >= _header.StreamsInfo.Folders[folderIndex].UnpackedStreamInfo.Length)
|
||||
if (unpackedStreamsIndex >= _header.StreamsInfo.Folders[folderIndex].UnpackedStreamInfo!.Length)
|
||||
{
|
||||
folderIndex++;
|
||||
unpackedStreamsIndex = 0;
|
||||
|
||||
@@ -18,9 +18,9 @@ namespace Compress.SevenZip
|
||||
public partial class SevenZ
|
||||
{
|
||||
private int _streamIndex = -1;
|
||||
private Stream _stream;
|
||||
private Stream? _stream;
|
||||
|
||||
public ZipReturn ZipFileOpenReadStream(int index, out Stream stream, out ulong unCompressedSize)
|
||||
public ZipReturn ZipFileOpenReadStream(int index, out Stream? stream, out ulong unCompressedSize)
|
||||
{
|
||||
Debug.WriteLine("Opening File " + _localFiles[index].Filename);
|
||||
stream = null;
|
||||
@@ -42,7 +42,7 @@ namespace Compress.SevenZip
|
||||
int thisStreamIndex = _localFiles[index].StreamIndex;
|
||||
ulong streamOffset = _localFiles[index].StreamOffset;
|
||||
|
||||
if ((thisStreamIndex == _streamIndex) && (streamOffset >= (ulong)_stream.Position))
|
||||
if ((thisStreamIndex == _streamIndex) && (streamOffset >= (ulong)_stream!.Position))
|
||||
{
|
||||
stream = _stream;
|
||||
stream.Seek((long)_localFiles[index].StreamOffset - _stream.Position, SeekOrigin.Current);
|
||||
@@ -52,26 +52,26 @@ namespace Compress.SevenZip
|
||||
ZipFileCloseReadStream();
|
||||
_streamIndex = thisStreamIndex;
|
||||
|
||||
if (_header.StreamsInfo == null)
|
||||
if (_header?.StreamsInfo == null)
|
||||
{
|
||||
stream = null;
|
||||
return ZipReturn.ZipGood;
|
||||
}
|
||||
|
||||
Folder folder = _header.StreamsInfo.Folders[_streamIndex];
|
||||
Folder folder = _header.StreamsInfo.Folders![_streamIndex];
|
||||
|
||||
// first make the List of Decompressors streams
|
||||
int codersNeeded = folder.Coders.Length;
|
||||
int codersNeeded = folder.Coders!.Length;
|
||||
|
||||
List<InStreamSourceInfo> allInputStreams = new();
|
||||
List<InStreamSourceInfo> allInputStreams = [];
|
||||
for (int i = 0; i < codersNeeded; i++)
|
||||
{
|
||||
folder.Coders[i].DecoderStream = null;
|
||||
allInputStreams.AddRange(folder.Coders[i].InputStreamsSourceInfo);
|
||||
allInputStreams.AddRange(folder.Coders[i].InputStreamsSourceInfo!);
|
||||
}
|
||||
|
||||
// now use the binding pairs to links the outputs to the inputs
|
||||
int bindPairsCount = folder.BindPairs.Length;
|
||||
int bindPairsCount = folder.BindPairs!.Length;
|
||||
for (int i = 0; i < bindPairsCount; i++)
|
||||
{
|
||||
allInputStreams[(int)folder.BindPairs[i].InIndex].InStreamSource = InStreamSource.CompStreamOutput;
|
||||
@@ -80,17 +80,17 @@ namespace Compress.SevenZip
|
||||
}
|
||||
|
||||
// next use the stream indises to connect the remaining input streams from the sourcefile
|
||||
int packedStreamsCount = folder.PackedStreamIndices.Length;
|
||||
int packedStreamsCount = folder.PackedStreamIndices!.Length;
|
||||
for (int i = 0; i < packedStreamsCount; i++)
|
||||
{
|
||||
ulong packedStreamIndex = (ulong)i + folder.PackedStreamIndexBase;
|
||||
|
||||
// create and open the source file stream if needed
|
||||
if (_header.StreamsInfo.PackedStreams[packedStreamIndex].PackedStream == null)
|
||||
if (_header.StreamsInfo.PackedStreams![packedStreamIndex].PackedStream == null)
|
||||
{
|
||||
_header.StreamsInfo.PackedStreams[packedStreamIndex].PackedStream = CloneStream(_zipFs);
|
||||
_header.StreamsInfo.PackedStreams[packedStreamIndex].PackedStream = CloneStream(_zipFs!)!;
|
||||
}
|
||||
_header.StreamsInfo.PackedStreams[packedStreamIndex].PackedStream.Seek(
|
||||
_header.StreamsInfo.PackedStreams[packedStreamIndex].PackedStream!.Seek(
|
||||
_baseOffset + (long)_header.StreamsInfo.PackedStreams[packedStreamIndex].StreamPosition, SeekOrigin.Begin);
|
||||
|
||||
|
||||
@@ -117,9 +117,9 @@ namespace Compress.SevenZip
|
||||
inputCoders.Clear();
|
||||
for (int j = 0; j < (int)coder.NumInStreams; j++)
|
||||
{
|
||||
if (coder.InputStreamsSourceInfo[j].InStreamSource == InStreamSource.FileStream)
|
||||
if (coder.InputStreamsSourceInfo![j].InStreamSource == InStreamSource.FileStream)
|
||||
{
|
||||
inputCoders.Add(_header.StreamsInfo.PackedStreams[coder.InputStreamsSourceInfo[j].InStreamIndex].PackedStream);
|
||||
inputCoders.Add(_header.StreamsInfo.PackedStreams![coder.InputStreamsSourceInfo[j].InStreamIndex].PackedStream!);
|
||||
}
|
||||
else if (coder.InputStreamsSourceInfo[j].InStreamSource == InStreamSource.CompStreamOutput)
|
||||
{
|
||||
@@ -127,7 +127,7 @@ namespace Compress.SevenZip
|
||||
{
|
||||
break;
|
||||
}
|
||||
inputCoders.Add(folder.Coders[coder.InputStreamsSourceInfo[j].InStreamIndex].DecoderStream);
|
||||
inputCoders.Add(folder.Coders[coder.InputStreamsSourceInfo[j].InStreamIndex].DecoderStream!);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -145,16 +145,16 @@ namespace Compress.SevenZip
|
||||
coder.DecoderStream = inputCoders[0];
|
||||
break;
|
||||
case DecompressType.Delta:
|
||||
coder.DecoderStream = new Delta(folder.Coders[i].Properties, inputCoders[0]);
|
||||
coder.DecoderStream = new Delta(folder.Coders[i].Properties!, inputCoders[0]);
|
||||
break;
|
||||
case DecompressType.LZMA:
|
||||
coder.DecoderStream = new LzmaStream(folder.Coders[i].Properties, inputCoders[0]);
|
||||
coder.DecoderStream = new LzmaStream(folder.Coders[i].Properties!, inputCoders[0]);
|
||||
break;
|
||||
case DecompressType.LZMA2:
|
||||
coder.DecoderStream = new LzmaStream(folder.Coders[i].Properties, inputCoders[0]);
|
||||
coder.DecoderStream = new LzmaStream(folder.Coders[i].Properties!, inputCoders[0]);
|
||||
break;
|
||||
case DecompressType.PPMd:
|
||||
coder.DecoderStream = new PpmdStream(new PpmdProperties(folder.Coders[i].Properties), inputCoders[0], false);
|
||||
coder.DecoderStream = new PpmdStream(new PpmdProperties(folder.Coders[i].Properties!), inputCoders[0], false);
|
||||
break;
|
||||
case DecompressType.BZip2:
|
||||
coder.DecoderStream = new CBZip2InputStream(inputCoders[0], false);
|
||||
@@ -194,7 +194,7 @@ namespace Compress.SevenZip
|
||||
}
|
||||
|
||||
stream = folder.Coders[outputStream].DecoderStream;
|
||||
stream.Seek((long)_localFiles[index].StreamOffset, SeekOrigin.Current);
|
||||
stream!.Seek((long)_localFiles[index].StreamOffset, SeekOrigin.Current);
|
||||
|
||||
_stream = stream;
|
||||
|
||||
@@ -208,12 +208,12 @@ namespace Compress.SevenZip
|
||||
|
||||
}
|
||||
|
||||
private Stream CloneStream(Stream s)
|
||||
private Stream? CloneStream(Stream s)
|
||||
{
|
||||
switch (s)
|
||||
{
|
||||
case System.IO.FileStream _:
|
||||
int errorCode = FileStream.OpenFileRead(ZipFilename, out Stream streamOut);
|
||||
int errorCode = FileStream.OpenFileRead(ZipFilename, out Stream? streamOut);
|
||||
return errorCode != 0 ? null : streamOut;
|
||||
|
||||
case MemoryStream memStream:
|
||||
@@ -233,20 +233,20 @@ namespace Compress.SevenZip
|
||||
{
|
||||
if (_streamIndex != -1)
|
||||
{
|
||||
if (_header.StreamsInfo != null)
|
||||
if (_header!.StreamsInfo != null)
|
||||
{
|
||||
Folder folder = _header.StreamsInfo.Folders[_streamIndex];
|
||||
Folder folder = _header.StreamsInfo.Folders![_streamIndex];
|
||||
|
||||
foreach (Coder c in folder.Coders)
|
||||
foreach (Coder c in folder.Coders!)
|
||||
{
|
||||
Stream ds = c?.DecoderStream;
|
||||
Stream? ds = c?.DecoderStream;
|
||||
if (ds == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ds.Close();
|
||||
ds.Dispose();
|
||||
c.DecoderStream = null;
|
||||
c!.DecoderStream = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -254,7 +254,7 @@ namespace Compress.SevenZip
|
||||
|
||||
if (_header?.StreamsInfo != null)
|
||||
{
|
||||
foreach (PackedStreamInfo psi in _header.StreamsInfo.PackedStreams)
|
||||
foreach (PackedStreamInfo psi in _header.StreamsInfo.PackedStreams!)
|
||||
{
|
||||
if (psi?.PackedStream == null)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Compress.SevenZip
|
||||
|
||||
private bool IsRomVault7Z(long testBaseOffset, ulong testHeaderPos, ulong testHeaderLength, uint testHeaderCRC)
|
||||
{
|
||||
long length = _zipFs.Length;
|
||||
long length = _zipFs!.Length;
|
||||
if (length < 32)
|
||||
{
|
||||
return false;
|
||||
@@ -87,7 +87,7 @@ namespace Compress.SevenZip
|
||||
|
||||
// read fist 128 bytes, pad with zeros if less bytes
|
||||
int bufferPos = 0;
|
||||
_zipFs.Seek(0, SeekOrigin.Begin);
|
||||
_zipFs!.Seek(0, SeekOrigin.Begin);
|
||||
int ar = _zipFs.Read(buffer, bufferPos, crcsz);
|
||||
if (ar < crcsz)
|
||||
{
|
||||
|
||||
@@ -58,14 +58,14 @@ namespace Compress.SevenZip
|
||||
_header = new Header();
|
||||
|
||||
#if NET20 || NET35 || NET40
|
||||
using (BinaryWriter bw = new(_zipFs, Encoding.UTF8))
|
||||
using (BinaryWriter bw = new(_zipFs!, Encoding.UTF8))
|
||||
#else
|
||||
using (BinaryWriter bw = new(_zipFs, Encoding.UTF8, true))
|
||||
using (BinaryWriter bw = new(_zipFs!, Encoding.UTF8, true))
|
||||
#endif
|
||||
{
|
||||
_signatureHeader.Write(bw);
|
||||
}
|
||||
_baseOffset = _zipFs.Position;
|
||||
_baseOffset = _zipFs!.Position;
|
||||
|
||||
|
||||
_packedOutStreams = new List<outStreams>();
|
||||
@@ -167,7 +167,7 @@ namespace Compress.SevenZip
|
||||
|
||||
outStreams newStream = new()
|
||||
{
|
||||
packedStart = (ulong)_zipFs.Position,
|
||||
packedStart = (ulong)_zipFs!.Position,
|
||||
compType = _compType,
|
||||
packedSize = 0,
|
||||
unpackedStreams = new List<UnpackedStreamInfo>()
|
||||
@@ -200,11 +200,11 @@ namespace Compress.SevenZip
|
||||
break;
|
||||
}
|
||||
|
||||
_packedOutStreams.Add(newStream);
|
||||
_packedOutStreams!.Add(newStream);
|
||||
#endif
|
||||
|
||||
unpackedStreamInfo = new UnpackedStreamInfo { UnpackedSize = uncompressedSize };
|
||||
_packedOutStreams[_packedOutStreams.Count - 1].unpackedStreams.Add(unpackedStreamInfo);
|
||||
_packedOutStreams[_packedOutStreams.Count - 1].unpackedStreams!.Add(unpackedStreamInfo);
|
||||
|
||||
stream = _compressStream;
|
||||
return ZipReturn.ZipGood;
|
||||
@@ -222,12 +222,12 @@ namespace Compress.SevenZip
|
||||
#if !solid
|
||||
if (unpackedStreamInfo != null)
|
||||
{
|
||||
if (_packedOutStreams[_packedOutStreams.Count - 1].compType != SevenZipCompressType.uncompressed)
|
||||
if (_packedOutStreams![_packedOutStreams.Count - 1].compType != SevenZipCompressType.uncompressed)
|
||||
{
|
||||
_compressStream.Flush();
|
||||
_compressStream!.Flush();
|
||||
_compressStream.Close();
|
||||
}
|
||||
_packedOutStreams[_packedOutStreams.Count - 1].packedSize = (ulong)_zipFs.Position - _packedOutStreams[_packedOutStreams.Count - 1].packedStart;
|
||||
_packedOutStreams[_packedOutStreams.Count - 1].packedSize = (ulong)_zipFs!.Position - _packedOutStreams[_packedOutStreams.Count - 1].packedStart;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Compress.SevenZip
|
||||
int fileCount = _localFiles.Count;
|
||||
|
||||
//FileInfo
|
||||
_header.FileInfo = new Structure.FileInfo
|
||||
_header!.FileInfo = new Structure.FileInfo
|
||||
{
|
||||
Names = new string[fileCount]
|
||||
};
|
||||
@@ -22,7 +22,7 @@ namespace Compress.SevenZip
|
||||
ulong emptyFileCount = 0;
|
||||
for (int i = 0; i < fileCount; i++)
|
||||
{
|
||||
_header.FileInfo.Names[i] = _localFiles[i].Filename;
|
||||
_header.FileInfo.Names[i] = _localFiles[i].Filename!;
|
||||
|
||||
if (_localFiles[i].UncompressedSize != 0)
|
||||
{
|
||||
@@ -83,7 +83,7 @@ namespace Compress.SevenZip
|
||||
|
||||
_header.StreamsInfo = new StreamsInfo { PackPosition = 0 };
|
||||
|
||||
_header.StreamsInfo.PackedStreams = new PackedStreamInfo[_packedOutStreams.Count];
|
||||
_header.StreamsInfo.PackedStreams = new PackedStreamInfo[_packedOutStreams!.Count];
|
||||
for (int i = 0; i < _packedOutStreams.Count; i++)
|
||||
{
|
||||
_header.StreamsInfo.PackedStreams[i] = new PackedStreamInfo { PackedSize = _packedOutStreams[i].packedSize };
|
||||
@@ -93,7 +93,7 @@ namespace Compress.SevenZip
|
||||
for (int i = 0; i < _packedOutStreams.Count; i++)
|
||||
{
|
||||
ulong unpackedStreamSize = 0;
|
||||
foreach (UnpackedStreamInfo v in _packedOutStreams[i].unpackedStreams)
|
||||
foreach (UnpackedStreamInfo v in _packedOutStreams[i].unpackedStreams!)
|
||||
unpackedStreamSize += v.UnpackedSize;
|
||||
|
||||
_header.StreamsInfo.Folders[i] = new Folder()
|
||||
@@ -109,7 +109,7 @@ namespace Compress.SevenZip
|
||||
},
|
||||
PackedStreamIndices = new ulong[] { (ulong)i },
|
||||
UnpackedStreamSizes = new ulong[] { unpackedStreamSize },
|
||||
UnpackedStreamInfo = _packedOutStreams[i].unpackedStreams.ToArray(),
|
||||
UnpackedStreamInfo = _packedOutStreams[i].unpackedStreams!.ToArray(),
|
||||
UnpackCRC = null
|
||||
};
|
||||
}
|
||||
@@ -135,7 +135,7 @@ namespace Compress.SevenZip
|
||||
#else
|
||||
using BinaryWriter headerBw = new(headerMem, Encoding.UTF8, true);
|
||||
#endif
|
||||
_header.WriteHeader(headerBw);
|
||||
_header!.WriteHeader(headerBw);
|
||||
|
||||
newHeaderByte = new byte[headerMem.Length];
|
||||
headerMem.Position = 0;
|
||||
@@ -145,7 +145,7 @@ namespace Compress.SevenZip
|
||||
uint mainHeaderCRC = CRC.CalculateDigest(newHeaderByte, 0, (uint)newHeaderByte.Length);
|
||||
|
||||
#region Header Compression
|
||||
long packedHeaderPos = _zipFs.Position;
|
||||
long packedHeaderPos = _zipFs!.Position;
|
||||
LzmaEncoderProperties ep = new(true, GetDictionarySizeFromUncompressedSize((ulong)newHeaderByte.Length), 64);
|
||||
LzmaStream lzs = new(ep, false, _zipFs);
|
||||
byte[] lzmaStreamProperties = lzs.Properties;
|
||||
@@ -206,7 +206,7 @@ namespace Compress.SevenZip
|
||||
WriteRomVault7Zip(bw, headerPosition, (ulong)newHeaderByte.Length, mainHeaderCRC);
|
||||
|
||||
_zipFs.Write(newHeaderByte, 0, newHeaderByte.Length);
|
||||
_signatureHeader.WriteFinal(bw, headerPosition, (ulong)newHeaderByte.Length, mainHeaderCRC);
|
||||
_signatureHeader!.WriteFinal(bw, headerPosition, (ulong)newHeaderByte.Length, mainHeaderCRC);
|
||||
}
|
||||
_zipFs.Flush();
|
||||
_zipFs.Close();
|
||||
|
||||
@@ -36,16 +36,16 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
public class Coder
|
||||
{
|
||||
public byte[] Method;
|
||||
public byte[]? Method;
|
||||
public ulong NumInStreams;
|
||||
public ulong NumOutStreams;
|
||||
public byte[] Properties;
|
||||
public byte[]? Properties;
|
||||
|
||||
/************Local Variables***********/
|
||||
public DecompressType DecoderType;
|
||||
public bool OutputUsedInternally = false;
|
||||
public InStreamSourceInfo[] InputStreamsSourceInfo;
|
||||
public Stream DecoderStream;
|
||||
public InStreamSourceInfo[]? InputStreamsSourceInfo;
|
||||
public Stream? DecoderStream;
|
||||
|
||||
public void Read(BinaryReader br)
|
||||
{
|
||||
@@ -120,7 +120,7 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
public void Write(BinaryWriter bw)
|
||||
{
|
||||
byte flags = (byte)Method.Length;
|
||||
byte flags = (byte)Method!.Length;
|
||||
if ((NumInStreams != 1) || (NumOutStreams != 1))
|
||||
{
|
||||
flags = (byte)(flags | 0x10);
|
||||
@@ -152,10 +152,10 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
public void Report(ref StringBuilder sb)
|
||||
{
|
||||
sb.AppendLine($" Method[] = {Method.ToArrayString()} : {DecoderType}");
|
||||
sb.AppendLine($" Method[] = {Method!.ToArrayString()} : {DecoderType}");
|
||||
sb.AppendLine($" NumInStreams = {NumInStreams}");
|
||||
sb.AppendLine($" NumOutStreams = {NumOutStreams}");
|
||||
sb.AppendLine($" Properties[] = {Properties.ToArrayString()}");
|
||||
sb.AppendLine($" Properties[] = {Properties!.ToArrayString()}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,13 +6,13 @@ namespace Compress.SevenZip.Structure
|
||||
{
|
||||
public class FileInfo
|
||||
{
|
||||
public string[] Names;
|
||||
public bool[] EmptyStreamFlags;
|
||||
public bool[] EmptyFileFlags;
|
||||
public uint[] Attributes;
|
||||
public ulong[] TimeCreation;
|
||||
public ulong[] TimeLastAccess;
|
||||
public ulong[] TimeLastWrite;
|
||||
public string[]? Names;
|
||||
public bool[]? EmptyStreamFlags;
|
||||
public bool[]? EmptyFileFlags;
|
||||
public uint[]? Attributes;
|
||||
public ulong[]? TimeCreation;
|
||||
public ulong[]? TimeLastAccess;
|
||||
public ulong[]? TimeLastWrite;
|
||||
|
||||
public void Read(BinaryReader br)
|
||||
{
|
||||
@@ -92,7 +92,7 @@ namespace Compress.SevenZip.Structure
|
||||
public void Write(BinaryWriter bw)
|
||||
{
|
||||
bw.Write((byte)HeaderProperty.kFilesInfo);
|
||||
bw.WriteEncodedUInt64((ulong)Names.Length);
|
||||
bw.WriteEncodedUInt64((ulong)Names!.Length);
|
||||
|
||||
|
||||
byte[] namebyte;
|
||||
|
||||
@@ -7,13 +7,13 @@ namespace Compress.SevenZip.Structure
|
||||
{
|
||||
public class Folder
|
||||
{
|
||||
public Coder[] Coders;
|
||||
public BindPair[] BindPairs;
|
||||
public Coder[]? Coders;
|
||||
public BindPair[]? BindPairs;
|
||||
public ulong PackedStreamIndexBase;
|
||||
public ulong[] PackedStreamIndices;
|
||||
public ulong[] UnpackedStreamSizes;
|
||||
public ulong[]? PackedStreamIndices;
|
||||
public ulong[]? UnpackedStreamSizes;
|
||||
public uint? UnpackCRC;
|
||||
public UnpackedStreamInfo[] UnpackedStreamInfo;
|
||||
public UnpackedStreamInfo[]? UnpackedStreamInfo;
|
||||
|
||||
|
||||
private void ReadFolder(BinaryReader br)
|
||||
@@ -80,7 +80,7 @@ namespace Compress.SevenZip.Structure
|
||||
private void ReadUnpackedStreamSize(BinaryReader br)
|
||||
{
|
||||
ulong outStreams = 0;
|
||||
foreach (Coder c in Coders)
|
||||
foreach (Coder c in Coders!)
|
||||
{
|
||||
outStreams += c.NumOutStreams;
|
||||
}
|
||||
@@ -95,7 +95,7 @@ namespace Compress.SevenZip.Structure
|
||||
private ulong GetUnpackSize()
|
||||
{
|
||||
ulong outStreams = 0;
|
||||
foreach (Coder coder in Coders)
|
||||
foreach (Coder coder in Coders!)
|
||||
{
|
||||
outStreams += coder.NumInStreams;
|
||||
}
|
||||
@@ -103,7 +103,7 @@ namespace Compress.SevenZip.Structure
|
||||
for (ulong j = 0; j < outStreams; j++)
|
||||
{
|
||||
bool found = false;
|
||||
foreach (BindPair bindPair in BindPairs)
|
||||
foreach (BindPair bindPair in BindPairs!)
|
||||
{
|
||||
if (bindPair.OutIndex != j)
|
||||
{
|
||||
@@ -116,7 +116,7 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
if (!found)
|
||||
{
|
||||
return UnpackedStreamSizes[j];
|
||||
return UnpackedStreamSizes![j]!;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace Compress.SevenZip.Structure
|
||||
}
|
||||
|
||||
|
||||
public static void ReadUnPackInfo(BinaryReader br, out Folder[] Folders)
|
||||
public static void ReadUnPackInfo(BinaryReader br, out Folder[]? Folders)
|
||||
{
|
||||
Folders = null;
|
||||
for (; ; )
|
||||
@@ -149,7 +149,7 @@ namespace Compress.SevenZip.Structure
|
||||
Folders[i] = new Folder();
|
||||
Folders[i].ReadFolder(br);
|
||||
Folders[i].PackedStreamIndexBase = folderIndex;
|
||||
folderIndex += (ulong)Folders[i].PackedStreamIndices.Length;
|
||||
folderIndex += (ulong)Folders[i].PackedStreamIndices!.Length;
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -165,7 +165,7 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
case HeaderProperty.kCodersUnPackSize:
|
||||
{
|
||||
for (uint i = 0; i < Folders.Length; i++)
|
||||
for (uint i = 0; i < Folders!.Length; i++)
|
||||
{
|
||||
Folders[i].ReadUnpackedStreamSize(br);
|
||||
}
|
||||
@@ -175,7 +175,7 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
case HeaderProperty.kCRC:
|
||||
{
|
||||
Util.UnPackCRCs(br, (ulong)Folders.Length, out uint?[] crcs);
|
||||
Util.UnPackCRCs(br, (ulong)Folders!.Length, out uint?[] crcs);
|
||||
for (int i = 0; i < Folders.Length; i++)
|
||||
{
|
||||
Folders[i].UnpackCRC = crcs[i];
|
||||
@@ -193,7 +193,7 @@ namespace Compress.SevenZip.Structure
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReadSubStreamsInfo(BinaryReader br, ref Folder[] Folders)
|
||||
public static void ReadSubStreamsInfo(BinaryReader br, ref Folder[]? Folders)
|
||||
{
|
||||
for (; ; )
|
||||
{
|
||||
@@ -202,13 +202,13 @@ namespace Compress.SevenZip.Structure
|
||||
{
|
||||
case HeaderProperty.kNumUnPackStream:
|
||||
{
|
||||
for (int f = 0; f < Folders.Length; f++)
|
||||
for (int f = 0; f < Folders!.Length; f++)
|
||||
{
|
||||
int numStreams = (int)br.ReadEncodedUInt64();
|
||||
Folders[f].UnpackedStreamInfo = new UnpackedStreamInfo[numStreams];
|
||||
for (int i = 0; i < numStreams; i++)
|
||||
{
|
||||
Folders[f].UnpackedStreamInfo[i] = new UnpackedStreamInfo();
|
||||
Folders[f].UnpackedStreamInfo![i] = new UnpackedStreamInfo();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,11 +217,11 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
case HeaderProperty.kSize:
|
||||
{
|
||||
for (int f = 0; f < Folders.Length; f++)
|
||||
for (int f = 0; f < Folders!.Length; f++)
|
||||
{
|
||||
Folder folder = Folders[f];
|
||||
|
||||
if (folder.UnpackedStreamInfo.Length == 0)
|
||||
if (folder.UnpackedStreamInfo!.Length == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -244,7 +244,7 @@ namespace Compress.SevenZip.Structure
|
||||
case HeaderProperty.kCRC:
|
||||
{
|
||||
ulong numCRC = 0;
|
||||
foreach (Folder folder in Folders)
|
||||
foreach (Folder folder in Folders!)
|
||||
{
|
||||
if (folder.UnpackedStreamInfo == null)
|
||||
{
|
||||
@@ -266,7 +266,7 @@ namespace Compress.SevenZip.Structure
|
||||
for (uint i = 0; i < Folders.Length; i++)
|
||||
{
|
||||
Folder folder = Folders[i];
|
||||
if ((folder.UnpackedStreamInfo.Length == 1) && folder.UnpackCRC.HasValue)
|
||||
if ((folder.UnpackedStreamInfo!.Length == 1) && folder.UnpackCRC.HasValue)
|
||||
{
|
||||
folder.UnpackedStreamInfo[0].Crc = folder.UnpackCRC;
|
||||
}
|
||||
@@ -293,7 +293,7 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
private void WriteFolder(BinaryWriter bw)
|
||||
{
|
||||
ulong numCoders = (ulong)Coders.Length;
|
||||
ulong numCoders = (ulong)Coders!.Length;
|
||||
bw.WriteEncodedUInt64(numCoders);
|
||||
for (ulong i = 0; i < numCoders; i++)
|
||||
{
|
||||
@@ -303,7 +303,7 @@ namespace Compress.SevenZip.Structure
|
||||
ulong numBindingPairs = BindPairs == null ? 0 : (ulong)BindPairs.Length;
|
||||
for (ulong i = 0; i < numBindingPairs; i++)
|
||||
{
|
||||
BindPairs[i].Write(bw);
|
||||
BindPairs![i].Write(bw);
|
||||
}
|
||||
|
||||
//need to look at PAckedStreamIndices but don't need them for basic writing I am doing
|
||||
@@ -311,7 +311,7 @@ namespace Compress.SevenZip.Structure
|
||||
|
||||
private void WriteUnpackedStreamSize(BinaryWriter bw)
|
||||
{
|
||||
ulong numUnpackedStreamSizes = (ulong)UnpackedStreamSizes.Length;
|
||||
ulong numUnpackedStreamSizes = (ulong)UnpackedStreamSizes!.Length;
|
||||
for (ulong i = 0; i < numUnpackedStreamSizes; i++)
|
||||
{
|
||||
bw.WriteEncodedUInt64(UnpackedStreamSizes[i]);
|
||||
@@ -362,7 +362,7 @@ namespace Compress.SevenZip.Structure
|
||||
bw.Write((byte)HeaderProperty.kNumUnPackStream);
|
||||
for (int f = 0; f < Folders.Length; f++)
|
||||
{
|
||||
ulong numStreams = (ulong)Folders[f].UnpackedStreamInfo.Length;
|
||||
ulong numStreams = (ulong)Folders[f].UnpackedStreamInfo!.Length;
|
||||
bw.WriteEncodedUInt64(numStreams);
|
||||
}
|
||||
|
||||
@@ -371,7 +371,7 @@ namespace Compress.SevenZip.Structure
|
||||
for (int f = 0; f < Folders.Length; f++)
|
||||
{
|
||||
Folder folder = Folders[f];
|
||||
for (int i = 0; i < folder.UnpackedStreamInfo.Length - 1; i++)
|
||||
for (int i = 0; i < folder.UnpackedStreamInfo!.Length - 1; i++)
|
||||
{
|
||||
bw.WriteEncodedUInt64(folder.UnpackedStreamInfo[i].UnpackedSize);
|
||||
}
|
||||
@@ -382,9 +382,9 @@ namespace Compress.SevenZip.Structure
|
||||
for (int f = 0; f < Folders.Length; f++)
|
||||
{
|
||||
Folder folder = Folders[f];
|
||||
for (int i = 0; i < folder.UnpackedStreamInfo.Length; i++)
|
||||
for (int i = 0; i < folder.UnpackedStreamInfo!.Length; i++)
|
||||
{
|
||||
bw.Write(Util.UIntToBytes(folder.UnpackedStreamInfo[i].Crc));
|
||||
bw.Write(Util.UIntToBytes(folder.UnpackedStreamInfo[i].Crc)!);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -420,8 +420,8 @@ namespace Compress.SevenZip.Structure
|
||||
}
|
||||
|
||||
sb.AppendLine($" PackedStreamIndexBase = {PackedStreamIndexBase}");
|
||||
sb.AppendLine($" PackedStreamIndices[] = {PackedStreamIndices.ToArrayString()}");
|
||||
sb.AppendLine($" UnpackedStreamSizes[] = {UnpackedStreamSizes.ToArrayString()}");
|
||||
sb.AppendLine($" PackedStreamIndices[] = {PackedStreamIndices!.ToArrayString()}");
|
||||
sb.AppendLine($" UnpackedStreamSizes[] = {UnpackedStreamSizes!.ToArrayString()}");
|
||||
sb.AppendLine($" UnpackCRC = {UnpackCRC.ToHex()}");
|
||||
|
||||
if (UnpackedStreamInfo == null)
|
||||
|
||||
@@ -7,8 +7,8 @@ namespace Compress.SevenZip.Structure
|
||||
{
|
||||
public class Header
|
||||
{
|
||||
public StreamsInfo StreamsInfo;
|
||||
public FileInfo FileInfo;
|
||||
public StreamsInfo? StreamsInfo;
|
||||
public FileInfo? FileInfo;
|
||||
|
||||
public void Read(BinaryReader br)
|
||||
{
|
||||
@@ -40,12 +40,12 @@ namespace Compress.SevenZip.Structure
|
||||
public void WriteHeader(BinaryWriter bw)
|
||||
{
|
||||
bw.Write((byte)HeaderProperty.kHeader);
|
||||
StreamsInfo.Write(bw);
|
||||
FileInfo.Write(bw);
|
||||
StreamsInfo!.Write(bw);
|
||||
FileInfo!.Write(bw);
|
||||
bw.Write((byte)HeaderProperty.kEnd);
|
||||
}
|
||||
|
||||
public static ZipReturn ReadHeaderOrPackedHeader(Stream stream, long baseOffset, out Header header)
|
||||
public static ZipReturn ReadHeaderOrPackedHeader(Stream stream, long baseOffset, out Header? header)
|
||||
{
|
||||
header = null;
|
||||
|
||||
@@ -62,25 +62,25 @@ namespace Compress.SevenZip.Structure
|
||||
StreamsInfo streamsInfo = new();
|
||||
streamsInfo.Read(br);
|
||||
|
||||
if (streamsInfo.Folders.Length > 1)
|
||||
if (streamsInfo.Folders!.Length > 1)
|
||||
{
|
||||
return ZipReturn.ZipUnsupportedCompression;
|
||||
}
|
||||
|
||||
Folder firstFolder = streamsInfo.Folders[0];
|
||||
if (firstFolder.Coders.Length > 1)
|
||||
if (firstFolder.Coders!.Length > 1)
|
||||
{
|
||||
return ZipReturn.ZipUnsupportedCompression;
|
||||
}
|
||||
|
||||
byte[] method = firstFolder.Coders[0].Method;
|
||||
byte[] method = firstFolder.Coders[0].Method!;
|
||||
if (!((method.Length == 3) && (method[0] == 3) && (method[1] == 1) && (method[2] == 1))) // LZMA
|
||||
{
|
||||
return ZipReturn.ZipUnsupportedCompression;
|
||||
}
|
||||
|
||||
stream.Seek(baseOffset + (long)streamsInfo.PackPosition, SeekOrigin.Begin);
|
||||
using (LzmaStream decoder = new(firstFolder.Coders[0].Properties, stream))
|
||||
using (LzmaStream decoder = new(firstFolder.Coders[0].Properties!, stream))
|
||||
{
|
||||
ZipReturn zr = ReadHeaderOrPackedHeader(decoder, baseOffset, out header);
|
||||
if (zr != ZipReturn.ZipGood)
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace Compress.SevenZip.Structure
|
||||
public ulong PackedSize;
|
||||
public ulong? Crc;
|
||||
public ulong StreamPosition;
|
||||
public Stream PackedStream;
|
||||
public Stream? PackedStream;
|
||||
|
||||
public static void Read(BinaryReader br, out ulong packPosition, out PackedStreamInfo[] packedStreams)
|
||||
{
|
||||
|
||||
@@ -7,8 +7,8 @@ namespace Compress.SevenZip.Structure
|
||||
public class StreamsInfo
|
||||
{
|
||||
public ulong PackPosition;
|
||||
public PackedStreamInfo[] PackedStreams;
|
||||
public Folder[] Folders;
|
||||
public PackedStreamInfo[]? PackedStreams;
|
||||
public Folder[]? Folders;
|
||||
|
||||
public void Read(BinaryReader br)
|
||||
{
|
||||
@@ -41,16 +41,16 @@ namespace Compress.SevenZip.Structure
|
||||
public void Write(BinaryWriter bw)
|
||||
{
|
||||
bw.Write((byte)HeaderProperty.kMainStreamsInfo);
|
||||
PackedStreamInfo.Write(bw, PackPosition, PackedStreams);
|
||||
Folder.WriteUnPackInfo(bw, Folders);
|
||||
Folder.WriteSubStreamsInfo(bw, Folders);
|
||||
PackedStreamInfo.Write(bw, PackPosition, PackedStreams!);
|
||||
Folder.WriteUnPackInfo(bw, Folders!);
|
||||
Folder.WriteSubStreamsInfo(bw, Folders!);
|
||||
bw.Write((byte)HeaderProperty.kEnd);
|
||||
}
|
||||
|
||||
public void WriteHeader(BinaryWriter bw)
|
||||
{
|
||||
PackedStreamInfo.Write(bw, PackPosition, PackedStreams);
|
||||
Folder.WriteUnPackInfo(bw, Folders);
|
||||
PackedStreamInfo.Write(bw, PackPosition, PackedStreams!);
|
||||
Folder.WriteUnPackInfo(bw, Folders!);
|
||||
bw.Write((byte)HeaderProperty.kEnd);
|
||||
}
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace Compress.SevenZip
|
||||
{
|
||||
if (digestsDefined[i])
|
||||
{
|
||||
bw.Write((uint)digests[i]);
|
||||
bw.Write((uint)digests[i]!);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -334,7 +334,7 @@ namespace Compress.SevenZip
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] UIntToBytes(uint? crc)
|
||||
public static byte[]? UIntToBytes(uint? crc)
|
||||
{
|
||||
if (crc == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user