Fix build_init vcxproj to correctly detect changes in config.h.
[mono.git] / mcs / class / System.IO.Compression / SharpCompress / Common / Zip / StreamingZipFilePart.cs
1 using System;
2 using System.IO;
3 using System.IO.Compression;
4 using SharpCompress.Common.Zip.Headers;
5 using SharpCompress.IO;
6
7 namespace SharpCompress.Common.Zip
8 {
9     internal class StreamingZipFilePart : ZipFilePart
10     {
11         private Stream decompressionStream;
12
13         internal StreamingZipFilePart(ZipFileEntry header, Stream stream)
14             : base(header, stream)
15         {
16         }
17
18         protected override Stream CreateBaseStream()
19         {
20             return Header.PackedStream;
21         }
22
23         internal override Stream GetCompressedStream()
24         {
25             if (!Header.HasData)
26             {
27                 return Stream.Null;
28             }
29             decompressionStream = CreateDecompressionStream(GetCryptoStream(CreateBaseStream()));
30             if (LeaveStreamOpen)
31             {
32                 return new NonDisposingStream(decompressionStream);
33             }
34             return decompressionStream;
35         }
36
37         internal BinaryReader FixStreamedFileLocation(ref RewindableStream rewindableStream)
38         {
39             if (Header.IsDirectory)
40             {
41                 return new BinaryReader(rewindableStream);
42             }
43             if (Header.HasData)
44             {
45                 if (decompressionStream == null)
46                 {
47                     decompressionStream = GetCompressedStream();
48                 }
49                 decompressionStream.SkipAll();
50
51                 DeflateStream deflateStream = decompressionStream as DeflateStream;
52                 if (deflateStream != null)
53                 {
54                     rewindableStream.Rewind(deflateStream.BaseStream as MemoryStream);
55                 }
56             }
57             var reader = new BinaryReader(rewindableStream);
58             decompressionStream = null;
59             return reader;
60         }
61     }
62 }