From cb27b117b4e68672ffa75080699fd54715cbb56a Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Sat, 31 Jan 2026 19:03:49 +0000 Subject: [PATCH] remove IStreamStack from non specialized streams --- src/SharpCompress/Common/EntryStream.cs | 4 +--- .../Common/Tar/TarReadOnlySubStream.cs | 5 +--- .../Zip/PkwareTraditionalCryptoStream.cs | 5 +--- .../Common/Zip/WinzipAesCryptoStream.cs | 5 +--- .../Compressors/ADC/ADCStream.cs | 5 +--- .../Compressors/ArcLzw/ArcLzwStream.cs | 5 +--- .../Compressors/Arj/LHDecoderStream.cs | 5 +--- .../Compressors/Arj/LhaStream.cs | 5 +--- .../Compressors/BZip2/BZip2Stream.cs | 5 +--- .../Compressors/BZip2/CBZip2InputStream.cs | 5 +--- .../Compressors/BZip2/CBZip2OutputStream.cs | 6 +---- .../Compressors/Deflate/DeflateStream.cs | 5 +--- .../Compressors/Deflate/GZipStream.cs | 5 +--- .../Compressors/Deflate/ZlibBaseStream.cs | 5 +--- .../Compressors/Deflate/ZlibStream.cs | 5 +--- .../Compressors/Deflate64/Deflate64Stream.cs | 5 +--- .../Compressors/Explode/ExplodeStream.cs | 5 +--- .../Compressors/LZMA/AesDecoderStream.cs | 5 +--- .../Compressors/LZMA/Bcj2DecoderStream.cs | 5 +--- .../Compressors/LZMA/LZipStream.cs | 4 +--- .../Compressors/LZMA/LzmaStream.cs | 5 +--- .../LZMA/Utilites/CrcBuilderStream.Async.cs | 3 +-- .../LZMA/Utilites/CrcBuilderStream.cs | 5 +--- .../Compressors/Lzw/LzwStream.cs | 5 +--- .../Compressors/PPMd/PpmdStream.cs | 5 +--- .../Compressors/RLE90/RunLength90Stream.cs | 5 +--- .../MultiVolumeReadOnlyAsyncStream.Async.cs | 5 +--- .../Rar/MultiVolumeReadOnlyAsyncStream.cs | 7 +----- .../Rar/MultiVolumeReadOnlyStream.Async.cs | 5 +--- .../Rar/MultiVolumeReadOnlyStream.cs | 7 +----- .../Rar/RarBLAKE2spStream.Async.cs | 3 +-- .../Compressors/Rar/RarBLAKE2spStream.cs | 5 +--- .../Compressors/Rar/RarCrcStream.Async.cs | 3 +-- .../Compressors/Rar/RarCrcStream.cs | 5 +--- .../Compressors/Rar/RarStream.cs | 5 +--- .../Compressors/Reduce/ReduceStream.cs | 5 +--- .../Compressors/Shrink/ShrinkStream.Async.cs | 3 +-- .../Compressors/Shrink/ShrinkStream.cs | 5 +--- .../Compressors/Squeezed/SqueezedStream.cs | 5 +--- .../Compressors/Xz/XZReadOnlyStream.cs | 5 +--- src/SharpCompress/Compressors/Xz/XZStream.cs | 5 +--- .../Compressors/ZStandard/ZStandardStream.cs | 5 +--- src/SharpCompress/Crypto/Crc32Stream.cs | 5 +--- .../Mocks/AsyncOnlyStream.cs | 9 +------ .../Zip/ZipReaderAsyncTests.cs | 24 +++++++++++++++++++ .../SharpCompress.Test/Zip/ZipReaderTests.cs | 24 +++++++++++++++++++ 46 files changed, 92 insertions(+), 175 deletions(-) diff --git a/src/SharpCompress/Common/EntryStream.cs b/src/SharpCompress/Common/EntryStream.cs index 8d6f3f4d..6b3be5c4 100644 --- a/src/SharpCompress/Common/EntryStream.cs +++ b/src/SharpCompress/Common/EntryStream.cs @@ -8,10 +8,8 @@ using SharpCompress.Readers; namespace SharpCompress.Common; -public partial class EntryStream : Stream, IStreamStack +public partial class EntryStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly IReader _reader; private readonly Stream _stream; private bool _completed; diff --git a/src/SharpCompress/Common/Tar/TarReadOnlySubStream.cs b/src/SharpCompress/Common/Tar/TarReadOnlySubStream.cs index 1f095a8d..c1db57be 100644 --- a/src/SharpCompress/Common/Tar/TarReadOnlySubStream.cs +++ b/src/SharpCompress/Common/Tar/TarReadOnlySubStream.cs @@ -1,15 +1,12 @@ using System; using System.IO; -using SharpCompress.IO; namespace SharpCompress.Common.Tar; -internal class TarReadOnlySubStream : Stream, IStreamStack +internal class TarReadOnlySubStream : Stream { private readonly Stream _stream; - Stream IStreamStack.BaseStream() => _stream; - private bool _isDisposed; private long _amountRead; diff --git a/src/SharpCompress/Common/Zip/PkwareTraditionalCryptoStream.cs b/src/SharpCompress/Common/Zip/PkwareTraditionalCryptoStream.cs index b32cfdc6..c3c04a82 100644 --- a/src/SharpCompress/Common/Zip/PkwareTraditionalCryptoStream.cs +++ b/src/SharpCompress/Common/Zip/PkwareTraditionalCryptoStream.cs @@ -1,6 +1,5 @@ using System; using System.IO; -using SharpCompress.IO; namespace SharpCompress.Common.Zip; @@ -10,10 +9,8 @@ internal enum CryptoMode Decrypt, } -internal class PkwareTraditionalCryptoStream : Stream, IStreamStack +internal class PkwareTraditionalCryptoStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly PkwareTraditionalEncryptionData _encryptor; private readonly CryptoMode _mode; private readonly Stream _stream; diff --git a/src/SharpCompress/Common/Zip/WinzipAesCryptoStream.cs b/src/SharpCompress/Common/Zip/WinzipAesCryptoStream.cs index af105c57..666bf446 100644 --- a/src/SharpCompress/Common/Zip/WinzipAesCryptoStream.cs +++ b/src/SharpCompress/Common/Zip/WinzipAesCryptoStream.cs @@ -2,14 +2,11 @@ using System; using System.Buffers.Binary; using System.IO; using System.Security.Cryptography; -using SharpCompress.IO; namespace SharpCompress.Common.Zip; -internal class WinzipAesCryptoStream : Stream, IStreamStack +internal class WinzipAesCryptoStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private const int BLOCK_SIZE_IN_BYTES = 16; private readonly SymmetricAlgorithm _cipher; private readonly byte[] _counter = new byte[BLOCK_SIZE_IN_BYTES]; diff --git a/src/SharpCompress/Compressors/ADC/ADCStream.cs b/src/SharpCompress/Compressors/ADC/ADCStream.cs index 2839f19f..74211134 100644 --- a/src/SharpCompress/Compressors/ADC/ADCStream.cs +++ b/src/SharpCompress/Compressors/ADC/ADCStream.cs @@ -30,17 +30,14 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.ADC; /// /// Provides a forward readable only stream that decompresses ADC data /// -public sealed partial class ADCStream : Stream, IStreamStack +public sealed partial class ADCStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - /// /// This stream holds the compressed data /// diff --git a/src/SharpCompress/Compressors/ArcLzw/ArcLzwStream.cs b/src/SharpCompress/Compressors/ArcLzw/ArcLzwStream.cs index 89c8ded3..11110690 100644 --- a/src/SharpCompress/Compressors/ArcLzw/ArcLzwStream.cs +++ b/src/SharpCompress/Compressors/ArcLzw/ArcLzwStream.cs @@ -4,12 +4,9 @@ using System.IO; using System.Linq; using SharpCompress.Compressors.RLE90; using SharpCompress.Compressors.Squeezed; -using SharpCompress.IO; -public partial class ArcLzwStream : Stream, IStreamStack +public partial class ArcLzwStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private Stream _stream; private bool _processed; private bool _useCrunched; diff --git a/src/SharpCompress/Compressors/Arj/LHDecoderStream.cs b/src/SharpCompress/Compressors/Arj/LHDecoderStream.cs index 5a23e951..4ada9767 100644 --- a/src/SharpCompress/Compressors/Arj/LHDecoderStream.cs +++ b/src/SharpCompress/Compressors/Arj/LHDecoderStream.cs @@ -1,15 +1,12 @@ using System; using System.Collections.Generic; using System.IO; -using SharpCompress.IO; namespace SharpCompress.Compressors.Arj { [CLSCompliant(true)] - public sealed partial class LHDecoderStream : Stream, IStreamStack + public sealed partial class LHDecoderStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly BitReader _bitReader; private readonly Stream _stream; diff --git a/src/SharpCompress/Compressors/Arj/LhaStream.cs b/src/SharpCompress/Compressors/Arj/LhaStream.cs index 49ceed95..7759c313 100644 --- a/src/SharpCompress/Compressors/Arj/LhaStream.cs +++ b/src/SharpCompress/Compressors/Arj/LhaStream.cs @@ -2,12 +2,11 @@ using System; using System.Data; using System.IO; using System.Linq; -using SharpCompress.IO; namespace SharpCompress.Compressors.Arj { [CLSCompliant(true)] - public sealed class LhaStream : Stream, IStreamStack + public sealed class LhaStream : Stream where C : ILhaDecoderConfig, new() { private readonly BitReader _bitReader; @@ -26,8 +25,6 @@ namespace SharpCompress.Compressors.Arj private readonly int _originalSize; private int _producedBytes = 0; - Stream IStreamStack.BaseStream() => _stream; - public LhaStream(Stream compressedStream, int originalSize) { _stream = compressedStream ?? throw new ArgumentNullException(nameof(compressedStream)); diff --git a/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs b/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs index 012481df..c145cb81 100644 --- a/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs +++ b/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs @@ -2,14 +2,11 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.BZip2; -public sealed partial class BZip2Stream : Stream, IStreamStack +public sealed partial class BZip2Stream : Stream { - Stream IStreamStack.BaseStream() => stream; - private Stream stream = default!; private bool isDisposed; private bool leaveOpen; diff --git a/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs b/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs index 304c4ecf..e303d7d0 100644 --- a/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs +++ b/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs @@ -5,7 +5,6 @@ using System.Buffers; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; /* * Copyright 2001,2004-2005 The Apache Software Foundation @@ -41,10 +40,8 @@ namespace SharpCompress.Compressors.BZip2; * start of the BZIP2 stream to make it compatible with other PGP programs. */ -internal partial class CBZip2InputStream : Stream, IStreamStack +internal partial class CBZip2InputStream : Stream { - Stream IStreamStack.BaseStream() => bsStream; - private static void Cadvise() { //System.out.Println("CRC Error"); diff --git a/src/SharpCompress/Compressors/BZip2/CBZip2OutputStream.cs b/src/SharpCompress/Compressors/BZip2/CBZip2OutputStream.cs index 6a89a0f2..c3a0348e 100644 --- a/src/SharpCompress/Compressors/BZip2/CBZip2OutputStream.cs +++ b/src/SharpCompress/Compressors/BZip2/CBZip2OutputStream.cs @@ -2,8 +2,6 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; - /* * Copyright 2001,2004-2005 The Apache Software Foundation * @@ -41,10 +39,8 @@ namespace SharpCompress.Compressors.BZip2; * start of the BZIP2 stream to make it compatible with other PGP programs. */ -internal sealed class CBZip2OutputStream : Stream, IStreamStack +internal sealed class CBZip2OutputStream : Stream { - Stream IStreamStack.BaseStream() => bsStream; - private const int SETMASK = (1 << 21); private const int CLEARMASK = (~SETMASK); private const int GREATER_ICOST = 15; diff --git a/src/SharpCompress/Compressors/Deflate/DeflateStream.cs b/src/SharpCompress/Compressors/Deflate/DeflateStream.cs index 3f5ad0b8..7fd65184 100644 --- a/src/SharpCompress/Compressors/Deflate/DeflateStream.cs +++ b/src/SharpCompress/Compressors/Deflate/DeflateStream.cs @@ -29,14 +29,11 @@ using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.Deflate; -public partial class DeflateStream : Stream, IStreamStack +public partial class DeflateStream : Stream { - Stream IStreamStack.BaseStream() => _baseStream; - private readonly ZlibBaseStream _baseStream; private bool _disposed; private readonly bool _leaveOpen; diff --git a/src/SharpCompress/Compressors/Deflate/GZipStream.cs b/src/SharpCompress/Compressors/Deflate/GZipStream.cs index b95fc3f7..f3857b2c 100644 --- a/src/SharpCompress/Compressors/Deflate/GZipStream.cs +++ b/src/SharpCompress/Compressors/Deflate/GZipStream.cs @@ -32,14 +32,11 @@ using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.Deflate; -public partial class GZipStream : Stream, IStreamStack +public partial class GZipStream : Stream { - Stream IStreamStack.BaseStream() => BaseStream; - internal static readonly DateTime UNIX_EPOCH = new(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); private string? _comment; diff --git a/src/SharpCompress/Compressors/Deflate/ZlibBaseStream.cs b/src/SharpCompress/Compressors/Deflate/ZlibBaseStream.cs index 04158ee6..3fa7538d 100644 --- a/src/SharpCompress/Compressors/Deflate/ZlibBaseStream.cs +++ b/src/SharpCompress/Compressors/Deflate/ZlibBaseStream.cs @@ -34,7 +34,6 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using SharpCompress.Common.Tar.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Deflate; @@ -45,10 +44,8 @@ internal enum ZlibStreamFlavor GZIP = 1952, } -internal class ZlibBaseStream : Stream, IStreamStack +internal class ZlibBaseStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - protected internal ZlibCodec _z; // deferred init... new ZlibCodec(); protected internal StreamMode _streamMode = StreamMode.Undefined; diff --git a/src/SharpCompress/Compressors/Deflate/ZlibStream.cs b/src/SharpCompress/Compressors/Deflate/ZlibStream.cs index 5088d6da..ede19f6f 100644 --- a/src/SharpCompress/Compressors/Deflate/ZlibStream.cs +++ b/src/SharpCompress/Compressors/Deflate/ZlibStream.cs @@ -30,14 +30,11 @@ using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.Deflate; -public partial class ZlibStream : Stream, IStreamStack +public partial class ZlibStream : Stream { - Stream IStreamStack.BaseStream() => _baseStream; - private readonly ZlibBaseStream _baseStream; private bool _disposed; diff --git a/src/SharpCompress/Compressors/Deflate64/Deflate64Stream.cs b/src/SharpCompress/Compressors/Deflate64/Deflate64Stream.cs index 286d3d07..2300cfbc 100644 --- a/src/SharpCompress/Compressors/Deflate64/Deflate64Stream.cs +++ b/src/SharpCompress/Compressors/Deflate64/Deflate64Stream.cs @@ -10,14 +10,11 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Zip; -using SharpCompress.IO; namespace SharpCompress.Compressors.Deflate64; -public sealed partial class Deflate64Stream : Stream, IStreamStack +public sealed partial class Deflate64Stream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private const int DEFAULT_BUFFER_SIZE = 8192; private Stream _stream; diff --git a/src/SharpCompress/Compressors/Explode/ExplodeStream.cs b/src/SharpCompress/Compressors/Explode/ExplodeStream.cs index 5014d4e4..92fda51c 100644 --- a/src/SharpCompress/Compressors/Explode/ExplodeStream.cs +++ b/src/SharpCompress/Compressors/Explode/ExplodeStream.cs @@ -1,14 +1,11 @@ using System; using System.IO; using SharpCompress.Common.Zip.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Explode; -public partial class ExplodeStream : Stream, IStreamStack +public partial class ExplodeStream : Stream { - Stream IStreamStack.BaseStream() => inStream; - private const int INVALID_CODE = 99; private const int WSIZE = 64 * 1024; diff --git a/src/SharpCompress/Compressors/LZMA/AesDecoderStream.cs b/src/SharpCompress/Compressors/LZMA/AesDecoderStream.cs index f81d5f56..bad6afbd 100644 --- a/src/SharpCompress/Compressors/LZMA/AesDecoderStream.cs +++ b/src/SharpCompress/Compressors/LZMA/AesDecoderStream.cs @@ -5,14 +5,11 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using SharpCompress.Compressors.LZMA.Utilites; -using SharpCompress.IO; namespace SharpCompress.Compressors.LZMA; -internal sealed partial class AesDecoderStream : DecoderStream2, IStreamStack +internal sealed partial class AesDecoderStream : DecoderStream2 { - Stream IStreamStack.BaseStream() => mStream; - private readonly Stream mStream; private readonly ICryptoTransform mDecoder; private readonly byte[] mBuffer; diff --git a/src/SharpCompress/Compressors/LZMA/Bcj2DecoderStream.cs b/src/SharpCompress/Compressors/LZMA/Bcj2DecoderStream.cs index 2fab0880..caaf15e1 100644 --- a/src/SharpCompress/Compressors/LZMA/Bcj2DecoderStream.cs +++ b/src/SharpCompress/Compressors/LZMA/Bcj2DecoderStream.cs @@ -3,14 +3,11 @@ using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.LZMA; -internal class Bcj2DecoderStream : DecoderStream2, IStreamStack +internal class Bcj2DecoderStream : DecoderStream2 { - Stream IStreamStack.BaseStream() => _mMainStream; - private const int K_NUM_TOP_BITS = 24; private const uint K_TOP_VALUE = (1 << K_NUM_TOP_BITS); diff --git a/src/SharpCompress/Compressors/LZMA/LZipStream.cs b/src/SharpCompress/Compressors/LZMA/LZipStream.cs index c827f4ef..30be9b62 100644 --- a/src/SharpCompress/Compressors/LZMA/LZipStream.cs +++ b/src/SharpCompress/Compressors/LZMA/LZipStream.cs @@ -17,10 +17,8 @@ namespace SharpCompress.Compressors.LZMA; /// /// Stream supporting the LZIP format, as documented at http://www.nongnu.org/lzip/manual/lzip_manual.html /// -public sealed partial class LZipStream : Stream, IStreamStack +public sealed partial class LZipStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly Stream _stream; private readonly CountingStream? _countingWritableSubStream; private bool _disposed; diff --git a/src/SharpCompress/Compressors/LZMA/LzmaStream.cs b/src/SharpCompress/Compressors/LZMA/LzmaStream.cs index 6ca9a14d..42d548d7 100644 --- a/src/SharpCompress/Compressors/LZMA/LzmaStream.cs +++ b/src/SharpCompress/Compressors/LZMA/LzmaStream.cs @@ -4,14 +4,11 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using SharpCompress.Compressors.LZMA.LZ; -using SharpCompress.IO; namespace SharpCompress.Compressors.LZMA; -public partial class LzmaStream : Stream, IStreamStack +public partial class LzmaStream : Stream { - Stream IStreamStack.BaseStream() => _inputStream!; - private readonly Stream? _inputStream; private readonly long _inputSize; private readonly long _outputSize; diff --git a/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.Async.cs b/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.Async.cs index 8cf2d974..cca7b2dd 100644 --- a/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.Async.cs +++ b/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.Async.cs @@ -2,11 +2,10 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.LZMA.Utilites; -internal partial class CrcBuilderStream : Stream, IStreamStack +internal partial class CrcBuilderStream : Stream { public override async Task WriteAsync( byte[] buffer, diff --git a/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.cs b/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.cs index 7281e9d7..e935fe6f 100644 --- a/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.cs +++ b/src/SharpCompress/Compressors/LZMA/Utilites/CrcBuilderStream.cs @@ -2,14 +2,11 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.LZMA.Utilites; -internal partial class CrcBuilderStream : Stream, IStreamStack +internal partial class CrcBuilderStream : Stream { - Stream IStreamStack.BaseStream() => _mTarget; - private readonly Stream _mTarget; private uint _mCrc; private bool _mFinished; diff --git a/src/SharpCompress/Compressors/Lzw/LzwStream.cs b/src/SharpCompress/Compressors/Lzw/LzwStream.cs index e6b3b352..4a563c62 100644 --- a/src/SharpCompress/Compressors/Lzw/LzwStream.cs +++ b/src/SharpCompress/Compressors/Lzw/LzwStream.cs @@ -3,7 +3,6 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; -using SharpCompress.IO; namespace SharpCompress.Compressors.Lzw { @@ -45,10 +44,8 @@ namespace SharpCompress.Compressors.Lzw /// } /// /// - public partial class LzwStream : Stream, IStreamStack + public partial class LzwStream : Stream { - Stream IStreamStack.BaseStream() => baseInputStream; - public static bool IsLzwStream(Stream stream) { try diff --git a/src/SharpCompress/Compressors/PPMd/PpmdStream.cs b/src/SharpCompress/Compressors/PPMd/PpmdStream.cs index 893c718b..e1f03de7 100644 --- a/src/SharpCompress/Compressors/PPMd/PpmdStream.cs +++ b/src/SharpCompress/Compressors/PPMd/PpmdStream.cs @@ -7,14 +7,11 @@ using System.Threading.Tasks; using SharpCompress.Compressors.LZMA.RangeCoder; using SharpCompress.Compressors.PPMd.H; using SharpCompress.Compressors.PPMd.I1; -using SharpCompress.IO; namespace SharpCompress.Compressors.PPMd; -public class PpmdStream : Stream, IStreamStack +public class PpmdStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly PpmdProperties _properties; private readonly Stream _stream; private readonly bool _compress; diff --git a/src/SharpCompress/Compressors/RLE90/RunLength90Stream.cs b/src/SharpCompress/Compressors/RLE90/RunLength90Stream.cs index 030e79b4..87d7b957 100644 --- a/src/SharpCompress/Compressors/RLE90/RunLength90Stream.cs +++ b/src/SharpCompress/Compressors/RLE90/RunLength90Stream.cs @@ -1,6 +1,5 @@ using System; using System.IO; -using SharpCompress.IO; namespace SharpCompress.Compressors.RLE90 { @@ -8,10 +7,8 @@ namespace SharpCompress.Compressors.RLE90 /// Real-time streaming RLE90 decompression stream. /// Decompresses bytes on demand without buffering the entire file in memory. /// - public class RunLength90Stream : Stream, IStreamStack + public class RunLength90Stream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly Stream _stream; private readonly int _compressedSize; private int _bytesReadFromSource; diff --git a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.Async.cs b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.Async.cs index 2d0bc2b8..e0b34720 100644 --- a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.Async.cs +++ b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.Async.cs @@ -5,13 +5,10 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal sealed partial class MultiVolumeReadOnlyAsyncStream - : MultiVolumeReadOnlyStreamBase, - IStreamStack +internal sealed partial class MultiVolumeReadOnlyAsyncStream : MultiVolumeReadOnlyStreamBase { internal static async ValueTask Create( IAsyncEnumerable parts diff --git a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.cs b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.cs index 9f11866c..6f4c8b88 100644 --- a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.cs +++ b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyAsyncStream.cs @@ -4,16 +4,11 @@ using System.IO; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal sealed partial class MultiVolumeReadOnlyAsyncStream - : MultiVolumeReadOnlyStreamBase, - IStreamStack +internal sealed partial class MultiVolumeReadOnlyAsyncStream : MultiVolumeReadOnlyStreamBase { - Stream IStreamStack.BaseStream() => currentStream.NotNull(); - private long currentPosition; private long maxPosition; diff --git a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.Async.cs b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.Async.cs index 122ccda5..15699db7 100644 --- a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.Async.cs +++ b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.Async.cs @@ -5,13 +5,10 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal sealed partial class MultiVolumeReadOnlyStream - : MultiVolumeReadOnlyStreamBase, - IStreamStack +internal sealed partial class MultiVolumeReadOnlyStream : MultiVolumeReadOnlyStreamBase { public override async Task ReadAsync( byte[] buffer, diff --git a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.cs b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.cs index 53d71381..161922be 100644 --- a/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.cs +++ b/src/SharpCompress/Compressors/Rar/MultiVolumeReadOnlyStream.cs @@ -3,16 +3,11 @@ using System.Collections.Generic; using System.IO; using SharpCompress.Common; using SharpCompress.Common.Rar; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal sealed partial class MultiVolumeReadOnlyStream - : MultiVolumeReadOnlyStreamBase, - IStreamStack +internal sealed partial class MultiVolumeReadOnlyStream : MultiVolumeReadOnlyStreamBase { - Stream IStreamStack.BaseStream() => currentStream.NotNull(); - private long currentPosition; private long maxPosition; diff --git a/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.Async.cs b/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.Async.cs index 5c657009..4015b420 100644 --- a/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.Async.cs +++ b/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.Async.cs @@ -4,11 +4,10 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal partial class RarBLAKE2spStream : RarStream, IStreamStack +internal partial class RarBLAKE2spStream : RarStream { public static async ValueTask CreateAsync( IRarUnpack unpack, diff --git a/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.cs b/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.cs index 0b692154..42dd25c9 100644 --- a/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.cs +++ b/src/SharpCompress/Compressors/Rar/RarBLAKE2spStream.cs @@ -5,14 +5,11 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal partial class RarBLAKE2spStream : RarStream, IStreamStack +internal partial class RarBLAKE2spStream : RarStream { - Stream IStreamStack.BaseStream() => readStream; - private readonly MultiVolumeReadOnlyStreamBase readStream; private readonly bool disableCRCCheck; diff --git a/src/SharpCompress/Compressors/Rar/RarCrcStream.Async.cs b/src/SharpCompress/Compressors/Rar/RarCrcStream.Async.cs index 040e01bc..f49f63ba 100644 --- a/src/SharpCompress/Compressors/Rar/RarCrcStream.Async.cs +++ b/src/SharpCompress/Compressors/Rar/RarCrcStream.Async.cs @@ -4,11 +4,10 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal partial class RarCrcStream : RarStream, IStreamStack +internal partial class RarCrcStream : RarStream { public static async ValueTask CreateAsync( IRarUnpack unpack, diff --git a/src/SharpCompress/Compressors/Rar/RarCrcStream.cs b/src/SharpCompress/Compressors/Rar/RarCrcStream.cs index 30626d76..8adf324a 100644 --- a/src/SharpCompress/Compressors/Rar/RarCrcStream.cs +++ b/src/SharpCompress/Compressors/Rar/RarCrcStream.cs @@ -4,14 +4,11 @@ using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; using SharpCompress.Common.Rar.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal partial class RarCrcStream : RarStream, IStreamStack +internal partial class RarCrcStream : RarStream { - Stream IStreamStack.BaseStream() => readStream; - private readonly MultiVolumeReadOnlyStreamBase readStream; private uint currentCrc; private readonly bool disableCRC; diff --git a/src/SharpCompress/Compressors/Rar/RarStream.cs b/src/SharpCompress/Compressors/Rar/RarStream.cs index cb74abe4..31e7b11c 100644 --- a/src/SharpCompress/Compressors/Rar/RarStream.cs +++ b/src/SharpCompress/Compressors/Rar/RarStream.cs @@ -4,14 +4,11 @@ using System; using System.Buffers; using System.IO; using SharpCompress.Common.Rar.Headers; -using SharpCompress.IO; namespace SharpCompress.Compressors.Rar; -internal partial class RarStream : Stream, IStreamStack +internal partial class RarStream : Stream { - Stream IStreamStack.BaseStream() => readStream; - private readonly IRarUnpack unpack; private readonly FileHeader fileHeader; private readonly Stream readStream; diff --git a/src/SharpCompress/Compressors/Reduce/ReduceStream.cs b/src/SharpCompress/Compressors/Reduce/ReduceStream.cs index 97d534ed..ad95d207 100644 --- a/src/SharpCompress/Compressors/Reduce/ReduceStream.cs +++ b/src/SharpCompress/Compressors/Reduce/ReduceStream.cs @@ -1,13 +1,10 @@ using System; using System.IO; -using SharpCompress.IO; namespace SharpCompress.Compressors.Reduce; -public partial class ReduceStream : Stream, IStreamStack +public partial class ReduceStream : Stream { - Stream IStreamStack.BaseStream() => inStream; - private readonly long unCompressedSize; private readonly long compressedSize; private readonly Stream inStream; diff --git a/src/SharpCompress/Compressors/Shrink/ShrinkStream.Async.cs b/src/SharpCompress/Compressors/Shrink/ShrinkStream.Async.cs index 7e812145..437a55f0 100644 --- a/src/SharpCompress/Compressors/Shrink/ShrinkStream.Async.cs +++ b/src/SharpCompress/Compressors/Shrink/ShrinkStream.Async.cs @@ -2,11 +2,10 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.Shrink; -internal partial class ShrinkStream : Stream, IStreamStack +internal partial class ShrinkStream : Stream { internal static async ValueTask CreateAsync( Stream stream, diff --git a/src/SharpCompress/Compressors/Shrink/ShrinkStream.cs b/src/SharpCompress/Compressors/Shrink/ShrinkStream.cs index 3680b0d8..14bc6c3d 100644 --- a/src/SharpCompress/Compressors/Shrink/ShrinkStream.cs +++ b/src/SharpCompress/Compressors/Shrink/ShrinkStream.cs @@ -1,14 +1,11 @@ using System; using System.IO; using SharpCompress; -using SharpCompress.IO; namespace SharpCompress.Compressors.Shrink; -internal partial class ShrinkStream : Stream, IStreamStack +internal partial class ShrinkStream : Stream { - Stream IStreamStack.BaseStream() => inStream; - private Stream inStream; private CompressionMode _compressionMode; diff --git a/src/SharpCompress/Compressors/Squeezed/SqueezedStream.cs b/src/SharpCompress/Compressors/Squeezed/SqueezedStream.cs index dda78b87..553c2945 100644 --- a/src/SharpCompress/Compressors/Squeezed/SqueezedStream.cs +++ b/src/SharpCompress/Compressors/Squeezed/SqueezedStream.cs @@ -3,15 +3,12 @@ using System.Collections.Generic; using System.IO; using System.Text; using SharpCompress.Compressors.RLE90; -using SharpCompress.IO; namespace SharpCompress.Compressors.Squeezed { [CLSCompliant(true)] - public class SqueezeStream : Stream, IStreamStack + public class SqueezeStream : Stream { - Stream IStreamStack.BaseStream() => _stream; - private readonly Stream _stream; private readonly int _compressedSize; private const int NUMVALS = 257; diff --git a/src/SharpCompress/Compressors/Xz/XZReadOnlyStream.cs b/src/SharpCompress/Compressors/Xz/XZReadOnlyStream.cs index 51c65cde..5541fb2d 100644 --- a/src/SharpCompress/Compressors/Xz/XZReadOnlyStream.cs +++ b/src/SharpCompress/Compressors/Xz/XZReadOnlyStream.cs @@ -1,13 +1,10 @@ using System.IO; using SharpCompress.Common; -using SharpCompress.IO; namespace SharpCompress.Compressors.Xz; -public abstract class XZReadOnlyStream : ReadOnlyStream, IStreamStack +public abstract class XZReadOnlyStream : ReadOnlyStream { - Stream IStreamStack.BaseStream() => base.BaseStream; - public XZReadOnlyStream(Stream stream) { BaseStream = stream; diff --git a/src/SharpCompress/Compressors/Xz/XZStream.cs b/src/SharpCompress/Compressors/Xz/XZStream.cs index 68104cf2..dda9aa78 100644 --- a/src/SharpCompress/Compressors/Xz/XZStream.cs +++ b/src/SharpCompress/Compressors/Xz/XZStream.cs @@ -5,15 +5,12 @@ using System.IO; using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; -using SharpCompress.IO; namespace SharpCompress.Compressors.Xz; [CLSCompliant(false)] -public sealed partial class XZStream : XZReadOnlyStream, IStreamStack +public sealed partial class XZStream : XZReadOnlyStream { - Stream IStreamStack.BaseStream() => _baseStream; - public XZStream(Stream baseStream) : base(baseStream) { diff --git a/src/SharpCompress/Compressors/ZStandard/ZStandardStream.cs b/src/SharpCompress/Compressors/ZStandard/ZStandardStream.cs index 09f5130a..3a4ffbb0 100644 --- a/src/SharpCompress/Compressors/ZStandard/ZStandardStream.cs +++ b/src/SharpCompress/Compressors/ZStandard/ZStandardStream.cs @@ -5,16 +5,13 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Compressors.ZStandard; -internal partial class ZStandardStream : DecompressionStream, IStreamStack +internal partial class ZStandardStream : DecompressionStream { private readonly Stream stream; - Stream IStreamStack.BaseStream() => stream; - internal static bool IsZStandard(Stream stream) { var buffer = new byte[4]; diff --git a/src/SharpCompress/Crypto/Crc32Stream.cs b/src/SharpCompress/Crypto/Crc32Stream.cs index a31e1542..73a04ed3 100644 --- a/src/SharpCompress/Crypto/Crc32Stream.cs +++ b/src/SharpCompress/Crypto/Crc32Stream.cs @@ -2,15 +2,12 @@ using System; using System.IO; -using SharpCompress.IO; namespace SharpCompress.Crypto; [CLSCompliant(false)] -public sealed class Crc32Stream : Stream, IStreamStack +public sealed class Crc32Stream : Stream { - Stream IStreamStack.BaseStream() => stream; - private readonly Stream stream; private readonly uint[] _table; private uint seed; diff --git a/tests/SharpCompress.Test/Mocks/AsyncOnlyStream.cs b/tests/SharpCompress.Test/Mocks/AsyncOnlyStream.cs index ca3a08d2..291bae8d 100644 --- a/tests/SharpCompress.Test/Mocks/AsyncOnlyStream.cs +++ b/tests/SharpCompress.Test/Mocks/AsyncOnlyStream.cs @@ -2,20 +2,13 @@ using System; using System.IO; using System.Threading; using System.Threading.Tasks; -using SharpCompress.IO; namespace SharpCompress.Test.Mocks; -public class AsyncOnlyStream : Stream, IStreamStack +public class AsyncOnlyStream : Stream { private readonly Stream _stream; -#if DEBUG_STREAMS - long IStreamStack.InstanceId { get; set; } -#endif - - Stream IStreamStack.BaseStream() => _stream; - public AsyncOnlyStream(Stream stream) { _stream = stream ?? throw new ArgumentNullException(nameof(stream)); diff --git a/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs b/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs index 16dc9d0b..c93552cf 100644 --- a/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipReaderAsyncTests.cs @@ -83,6 +83,30 @@ public class ZipReaderAsyncTests : ReaderTests } } + [Fact] + public async ValueTask Zip_Deflate_Streamed2_Skip_Async() + { + using Stream stream = new ForwardOnlyStream( + File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd-.zip")) + ); + await using var reader = await ReaderFactory.OpenAsyncReader(new AsyncOnlyStream(stream)); + var x = 0; + while (await reader.MoveToNextEntryAsync()) + { + if (!reader.Entry.IsDirectory) + { + x++; + if (x % 2 == 0) + { + await reader.WriteEntryToDirectoryAsync( + SCRATCH_FILES_PATH, + new ExtractionOptions { ExtractFullPath = true, Overwrite = true } + ); + } + } + } + } + [Fact] public async ValueTask Zip_Deflate_Read_Async() => await ReadAsync("Zip.deflate.zip", CompressionType.Deflate); diff --git a/tests/SharpCompress.Test/Zip/ZipReaderTests.cs b/tests/SharpCompress.Test/Zip/ZipReaderTests.cs index 275d6fba..65a307a2 100644 --- a/tests/SharpCompress.Test/Zip/ZipReaderTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipReaderTests.cs @@ -80,6 +80,30 @@ public class ZipReaderTests : ReaderTests } } + [Fact] + public void Zip_Deflate_Streamed2_Skip() + { + using Stream stream = new ForwardOnlyStream( + File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.dd-.zip")) + ); + using var reader = ReaderFactory.OpenReader(stream); + var x = 0; + while (reader.MoveToNextEntry()) + { + if (!reader.Entry.IsDirectory) + { + x++; + if (x % 2 == 0) + { + reader.WriteEntryToDirectory( + SCRATCH_FILES_PATH, + new ExtractionOptions { ExtractFullPath = true, Overwrite = true } + ); + } + } + } + } + [Fact] public void Zip_Deflate_Read() => Read("Zip.deflate.zip", CompressionType.Deflate);