Merge pull request #3591 from directhex/mono_libdir_fallback
[mono.git] / mcs / class / WindowsBase / ZipSharp / UnzipReadStream.cs
1 // ZipReadStream.cs
2 //
3 // Copyright (c) 2008 [copyright holders]
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in
13 // all copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 // THE SOFTWARE.
22 //
23 //
24
25 using System;
26 using System.IO;
27 using System.IO.Packaging;
28
29 namespace zipsharp
30 {
31         class UnzipReadStream : Stream
32         {
33                 long length;
34                 
35                 UnzipArchive Archive { get; set; }
36
37                 public override bool CanRead {
38                         get { return true; }
39                 }
40                 
41                 public override bool CanSeek {
42                         get { return false; }
43                 }
44
45                 public override bool CanWrite {
46                         get { return false; }
47                 }
48
49                 public override bool CanTimeout {
50                         get { return false; }
51                 }
52
53                 public CompressionOption CompressionLevel {
54                         get; set;
55                 }
56
57                 public override long Length {
58                         get {
59                                 return length;
60                         }
61                 }
62
63                 public override long Position {
64                         get { return NativeUnzip.CurrentFilePosition (Archive.Handle); }
65                         set { throw new NotSupportedException (); }
66                 }
67                 
68                 public UnzipReadStream (UnzipArchive archive, CompressionOption compressionLevel)
69                 {
70                         Archive = archive;
71                         Archive.FileActive = true;
72                         CompressionLevel = compressionLevel;
73                         length = NativeVersion.Use32Bit ? NativeUnzip.CurrentFileLength32 (Archive.Handle) : NativeUnzip.CurrentFileLength64 (Archive.Handle);
74                 }
75
76                 public override void Close()
77                 {
78                         Archive.FileActive = false;
79                         NativeUnzip.CloseCurrentFile (Archive.Handle);
80                 }
81
82                 public override void Flush()
83                 {
84                         
85                 }
86  
87                 public override int Read(byte[] buffer, int offset, int count)
88                 {
89                         return NativeUnzip.Read (Archive.Handle, buffer, offset, count);
90                 }
91
92                 public override long Seek(long offset, SeekOrigin origin)
93                 {
94                         throw new NotSupportedException ();
95                 }
96                 
97                 public override void SetLength(long value)
98                 {
99                         throw new NotSupportedException ();
100                 }
101                 
102                 public override void Write(byte[] buffer, int offset, int count)
103                 {
104                         throw new NotSupportedException ();
105                 }
106         }
107 }