Commit | Line | Data |
a02d0f6f |
1 | package IO::Uncompress::Adapter::Inflate; |
1a6a8453 |
2 | |
3 | use strict; |
4 | use warnings; |
a02d0f6f |
5 | use bytes; |
1a6a8453 |
6 | |
a02d0f6f |
7 | use IO::Compress::Base::Common qw(:Status); |
8 | use Compress::Raw::Zlib qw(Z_OK Z_DATA_ERROR Z_STREAM_END Z_FINISH MAX_WBITS); |
1a6a8453 |
9 | |
10 | our ($VERSION); |
63ad731d |
11 | $VERSION = '2.001'; |
1a6a8453 |
12 | |
13 | |
14 | |
15 | sub mkUncompObject |
16 | { |
17 | my $crc32 = shift || 1; |
18 | my $adler32 = shift || 1; |
19 | my $scan = shift || 0; |
20 | |
21 | my $inflate ; |
22 | my $status ; |
23 | |
24 | if ($scan) |
25 | { |
a02d0f6f |
26 | ($inflate, $status) = new Compress::Raw::Zlib::InflateScan |
1a6a8453 |
27 | CRC32 => $crc32, |
28 | ADLER32 => $adler32, |
29 | WindowBits => - MAX_WBITS ; |
30 | } |
31 | else |
32 | { |
a02d0f6f |
33 | ($inflate, $status) = new Compress::Raw::Zlib::Inflate |
1a6a8453 |
34 | AppendOutput => 1, |
35 | CRC32 => $crc32, |
36 | ADLER32 => $adler32, |
37 | WindowBits => - MAX_WBITS ; |
38 | } |
39 | |
40 | return (undef, "Could not create Inflation object: $status", $status) |
41 | if $status != Z_OK ; |
42 | |
43 | return bless {'Inf' => $inflate, |
44 | 'CompSize' => 0, |
45 | 'UnCompSize' => 0, |
46 | 'Error' => '', |
47 | } ; |
48 | |
49 | } |
50 | |
51 | sub uncompr |
52 | { |
53 | my $self = shift ; |
54 | my $from = shift ; |
55 | my $to = shift ; |
56 | my $eof = shift ; |
57 | |
58 | my $inf = $self->{Inf}; |
59 | |
60 | my $status = $inf->inflate($from, $to, $eof); |
61 | $self->{ErrorNo} = $status; |
62 | |
63 | if ($status != Z_STREAM_END && $eof) |
64 | { |
65 | $self->{Error} = "unexpected end of file"; |
66 | return STATUS_ERROR; |
67 | } |
68 | |
69 | if ($status != Z_OK && $status != Z_STREAM_END ) |
70 | { |
71 | $self->{Error} = "Inflation Error: $status"; |
72 | return STATUS_ERROR; |
73 | } |
74 | |
75 | |
76 | return STATUS_OK if $status == Z_OK ; |
77 | return STATUS_ENDSTREAM if $status == Z_STREAM_END ; |
78 | return STATUS_ERROR ; |
79 | } |
80 | |
81 | sub reset |
82 | { |
83 | my $self = shift ; |
84 | $self->{Inf}->inflateReset(); |
85 | |
86 | return STATUS_OK ; |
87 | } |
88 | |
a02d0f6f |
89 | #sub count |
90 | #{ |
91 | # my $self = shift ; |
92 | # $self->{Inf}->inflateCount(); |
93 | #} |
1a6a8453 |
94 | |
95 | sub crc32 |
96 | { |
97 | my $self = shift ; |
98 | $self->{Inf}->crc32(); |
99 | } |
100 | |
101 | sub compressedBytes |
102 | { |
103 | my $self = shift ; |
104 | $self->{Inf}->compressedBytes(); |
105 | } |
106 | |
107 | sub uncompressedBytes |
108 | { |
109 | my $self = shift ; |
110 | $self->{Inf}->uncompressedBytes(); |
111 | } |
112 | |
113 | sub adler32 |
114 | { |
115 | my $self = shift ; |
116 | $self->{Inf}->adler32(); |
117 | } |
118 | |
119 | sub sync |
120 | { |
121 | my $self = shift ; |
122 | ( $self->{Inf}->inflateSync(@_) == Z_OK) |
123 | ? STATUS_OK |
124 | : STATUS_ERROR ; |
125 | } |
126 | |
127 | |
128 | sub getLastBlockOffset |
129 | { |
130 | my $self = shift ; |
131 | $self->{Inf}->getLastBlockOffset(); |
132 | } |
133 | |
134 | sub getEndOffset |
135 | { |
136 | my $self = shift ; |
137 | $self->{Inf}->getEndOffset(); |
138 | } |
139 | |
140 | sub resetLastBlockByte |
141 | { |
142 | my $self = shift ; |
143 | $self->{Inf}->resetLastBlockByte(@_); |
144 | } |
145 | |
146 | sub createDeflateStream |
147 | { |
148 | my $self = shift ; |
149 | my $deflate = $self->{Inf}->createDeflateStream(@_); |
150 | return bless {'Def' => $deflate, |
151 | 'CompSize' => 0, |
152 | 'UnCompSize' => 0, |
153 | 'Error' => '', |
a02d0f6f |
154 | }, 'IO::Compress::Adapter::Deflate'; |
1a6a8453 |
155 | } |
156 | |
157 | 1; |
158 | |
159 | |
160 | __END__ |
161 | |