Handle as many warnings as possible

This commit is contained in:
Matt Nadareski
2024-04-24 16:08:17 -04:00
parent b8b5e6595a
commit a271727e2c
46 changed files with 669 additions and 661 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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()}");
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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