This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update IO-Compress to CPAN version 2.068
[perl5.git] / cpan / IO-Compress / lib / IO / Uncompress / Adapter / Inflate.pm
CommitLineData
a02d0f6f 1package IO::Uncompress::Adapter::Inflate;
1a6a8453
PM
2
3use strict;
4use warnings;
496575ce 5#use bytes;
1a6a8453 6
3acdfe42
CBW
7use IO::Compress::Base::Common 2.068 qw(:Status);
8use Compress::Raw::Zlib 2.068 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
1a6a8453
PM
9
10our ($VERSION);
3acdfe42 11$VERSION = '2.068';
1a6a8453
PM
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
319fab50 27 #LimitOutput => 1,
1a6a8453
PM
28 CRC32 => $crc32,
29 ADLER32 => $adler32,
30 WindowBits => - MAX_WBITS ;
31 }
32 else
33 {
a02d0f6f 34 ($inflate, $status) = new Compress::Raw::Zlib::Inflate
1a6a8453 35 AppendOutput => 1,
319fab50 36 LimitOutput => 1,
1a6a8453
PM
37 CRC32 => $crc32,
38 ADLER32 => $adler32,
39 WindowBits => - MAX_WBITS ;
40 }
41
42 return (undef, "Could not create Inflation object: $status", $status)
43 if $status != Z_OK ;
44
45 return bless {'Inf' => $inflate,
46 'CompSize' => 0,
47 'UnCompSize' => 0,
48 'Error' => '',
dcfdccf9 49 'ConsumesInput' => 1,
1a6a8453
PM
50 } ;
51
52}
53
54sub uncompr
55{
56 my $self = shift ;
57 my $from = shift ;
58 my $to = shift ;
59 my $eof = shift ;
60
61 my $inf = $self->{Inf};
62
63 my $status = $inf->inflate($from, $to, $eof);
64 $self->{ErrorNo} = $status;
65
319fab50 66 if ($status != Z_OK && $status != Z_STREAM_END && $status != Z_BUF_ERROR)
1a6a8453
PM
67 {
68 $self->{Error} = "Inflation Error: $status";
69 return STATUS_ERROR;
70 }
319fab50
PM
71
72 return STATUS_OK if $status == Z_BUF_ERROR ; # ???
1a6a8453
PM
73 return STATUS_OK if $status == Z_OK ;
74 return STATUS_ENDSTREAM if $status == Z_STREAM_END ;
75 return STATUS_ERROR ;
76}
77
78sub reset
79{
80 my $self = shift ;
81 $self->{Inf}->inflateReset();
82
83 return STATUS_OK ;
84}
85
a02d0f6f
RGS
86#sub count
87#{
88# my $self = shift ;
89# $self->{Inf}->inflateCount();
90#}
1a6a8453
PM
91
92sub crc32
93{
94 my $self = shift ;
95 $self->{Inf}->crc32();
96}
97
98sub compressedBytes
99{
100 my $self = shift ;
101 $self->{Inf}->compressedBytes();
102}
103
104sub uncompressedBytes
105{
106 my $self = shift ;
107 $self->{Inf}->uncompressedBytes();
108}
109
110sub adler32
111{
112 my $self = shift ;
113 $self->{Inf}->adler32();
114}
115
116sub sync
117{
118 my $self = shift ;
119 ( $self->{Inf}->inflateSync(@_) == Z_OK)
120 ? STATUS_OK
121 : STATUS_ERROR ;
122}
123
124
125sub getLastBlockOffset
126{
127 my $self = shift ;
128 $self->{Inf}->getLastBlockOffset();
129}
130
131sub getEndOffset
132{
133 my $self = shift ;
134 $self->{Inf}->getEndOffset();
135}
136
137sub resetLastBlockByte
138{
139 my $self = shift ;
140 $self->{Inf}->resetLastBlockByte(@_);
141}
142
143sub createDeflateStream
144{
145 my $self = shift ;
146 my $deflate = $self->{Inf}->createDeflateStream(@_);
147 return bless {'Def' => $deflate,
148 'CompSize' => 0,
149 'UnCompSize' => 0,
150 'Error' => '',
a02d0f6f 151 }, 'IO::Compress::Adapter::Deflate';
1a6a8453
PM
152}
153
1541;
155
156
157__END__
158