Compress::Raw::Zlib, Compress::Zlib, IO::Compress::Zlib 2.000_10
[p5sagit/p5-mst-13.2.git] / ext / Compress / IO / Zlib / lib / IO / Uncompress / Adapter / Inflate.pm
CommitLineData
a02d0f6f 1package IO::Uncompress::Adapter::Inflate;
1a6a8453 2
3use strict;
4use warnings;
a02d0f6f 5use bytes;
1a6a8453 6
a02d0f6f 7use IO::Compress::Base::Common qw(:Status);
8use Compress::Raw::Zlib qw(Z_OK Z_DATA_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
1a6a8453 9
10our ($VERSION);
cb7abd7f 11$VERSION = '2.000_10';
1a6a8453 12
13
14
15sub 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
51sub 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
81sub 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
95sub crc32
96{
97 my $self = shift ;
98 $self->{Inf}->crc32();
99}
100
101sub compressedBytes
102{
103 my $self = shift ;
104 $self->{Inf}->compressedBytes();
105}
106
107sub uncompressedBytes
108{
109 my $self = shift ;
110 $self->{Inf}->uncompressedBytes();
111}
112
113sub adler32
114{
115 my $self = shift ;
116 $self->{Inf}->adler32();
117}
118
119sub sync
120{
121 my $self = shift ;
122 ( $self->{Inf}->inflateSync(@_) == Z_OK)
123 ? STATUS_OK
124 : STATUS_ERROR ;
125}
126
127
128sub getLastBlockOffset
129{
130 my $self = shift ;
131 $self->{Inf}->getLastBlockOffset();
132}
133
134sub getEndOffset
135{
136 my $self = shift ;
137 $self->{Inf}->getEndOffset();
138}
139
140sub resetLastBlockByte
141{
142 my $self = shift ;
143 $self->{Inf}->resetLastBlockByte(@_);
144}
145
146sub 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
1571;
158
159
160__END__
161