line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package IO::Uncompress::UnLzf ; |
2
|
|
|
|
|
|
|
|
3
|
11
|
|
|
11
|
|
93128
|
use strict ; |
|
11
|
|
|
|
|
23
|
|
|
11
|
|
|
|
|
304
|
|
4
|
11
|
|
|
11
|
|
51
|
use warnings; |
|
11
|
|
|
|
|
24
|
|
|
11
|
|
|
|
|
273
|
|
5
|
11
|
|
|
11
|
|
52
|
use bytes; |
|
11
|
|
|
|
|
20
|
|
|
11
|
|
|
|
|
89
|
|
6
|
|
|
|
|
|
|
|
7
|
11
|
|
|
11
|
|
378
|
use IO::Compress::Base::Common 2.206 qw(:Status createSelfTiedObject); |
|
11
|
|
|
|
|
247
|
|
|
11
|
|
|
|
|
1280
|
|
8
|
|
|
|
|
|
|
|
9
|
11
|
|
|
11
|
|
4399
|
use IO::Uncompress::Base 2.206 ; |
|
11
|
|
|
|
|
64366
|
|
|
11
|
|
|
|
|
656
|
|
10
|
11
|
|
|
11
|
|
3596
|
use IO::Uncompress::Adapter::Lzf 2.206 ; |
|
11
|
|
|
|
|
215
|
|
|
11
|
|
|
|
|
1243
|
|
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
require Exporter ; |
14
|
|
|
|
|
|
|
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnLzfError); |
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
$VERSION = '2.206'; |
17
|
|
|
|
|
|
|
$UnLzfError = ''; |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
@ISA = qw( IO::Uncompress::Base Exporter ); |
20
|
|
|
|
|
|
|
@EXPORT_OK = qw( $UnLzfError unlzf ) ; |
21
|
|
|
|
|
|
|
#%EXPORT_TAGS = %IO::Uncompress::Base::EXPORT_TAGS ; |
22
|
|
|
|
|
|
|
push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; |
23
|
|
|
|
|
|
|
#Exporter::export_ok_tags('all'); |
24
|
|
|
|
|
|
|
|
25
|
11
|
|
|
11
|
|
76
|
use constant SIGNATURE => 'ZV'; |
|
11
|
|
|
|
|
18
|
|
|
11
|
|
|
|
|
10065
|
|
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
sub new |
28
|
|
|
|
|
|
|
{ |
29
|
786
|
|
|
786
|
1
|
1311830
|
my $class = shift ; |
30
|
786
|
|
|
|
|
2221
|
my $obj = createSelfTiedObject($class, \$UnLzfError); |
31
|
|
|
|
|
|
|
|
32
|
786
|
|
|
|
|
25944
|
$obj->_create(undef, 0, @_); |
33
|
|
|
|
|
|
|
} |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
sub unlzf |
36
|
|
|
|
|
|
|
{ |
37
|
63
|
|
|
63
|
1
|
91427
|
my $obj = createSelfTiedObject(undef, \$UnLzfError); |
38
|
63
|
|
|
|
|
2757
|
return $obj->_inf(@_); |
39
|
|
|
|
|
|
|
} |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
sub getExtraParams |
42
|
|
|
|
|
|
|
{ |
43
|
832
|
|
|
832
|
0
|
31424
|
return (); |
44
|
|
|
|
|
|
|
} |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
sub ckParams |
47
|
|
|
|
|
|
|
{ |
48
|
838
|
|
|
838
|
0
|
56230
|
my $self = shift ; |
49
|
838
|
|
|
|
|
1015
|
my $got = shift ; |
50
|
|
|
|
|
|
|
|
51
|
838
|
|
|
|
|
1262
|
return 1; |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
sub postCheckParams |
56
|
|
|
|
|
|
|
{ |
57
|
828
|
|
|
828
|
0
|
136151
|
my $self = shift ; |
58
|
828
|
|
|
|
|
1053
|
my $got = shift ; |
59
|
|
|
|
|
|
|
|
60
|
828
|
100
|
|
|
|
1671
|
return $self->saveErrorString(undef, "MultiStream not supported by Lzf", STATUS_ERROR) |
61
|
|
|
|
|
|
|
if $got->getValue('multistream') ; |
62
|
|
|
|
|
|
|
|
63
|
826
|
|
|
|
|
4170
|
$got->setValue('multistream' => 0); |
64
|
826
|
|
|
|
|
4328
|
return 1; |
65
|
|
|
|
|
|
|
} |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
sub mkUncomp |
68
|
|
|
|
|
|
|
{ |
69
|
837
|
|
|
837
|
0
|
99594
|
my $self = shift ; |
70
|
837
|
|
|
|
|
1109
|
my $got = shift ; |
71
|
|
|
|
|
|
|
|
72
|
837
|
100
|
|
|
|
1398
|
my $magic = $self->ckMagic() |
73
|
|
|
|
|
|
|
or return 0; |
74
|
|
|
|
|
|
|
|
75
|
777
|
50
|
|
|
|
1544
|
*$self->{Info} = $self->readHeader($magic) |
76
|
|
|
|
|
|
|
or return undef ; |
77
|
|
|
|
|
|
|
|
78
|
777
|
|
|
|
|
2021
|
my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Lzf::mkUncompObject(); |
79
|
|
|
|
|
|
|
|
80
|
777
|
50
|
|
|
|
1492
|
return $self->saveErrorString(undef, $errstr, $errno) |
81
|
|
|
|
|
|
|
if ! defined $obj; |
82
|
|
|
|
|
|
|
|
83
|
777
|
|
|
|
|
1217
|
*$self->{Uncomp} = $obj; |
84
|
|
|
|
|
|
|
|
85
|
777
|
|
|
|
|
1459
|
return 1; |
86
|
|
|
|
|
|
|
} |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
sub ckMagic |
90
|
|
|
|
|
|
|
{ |
91
|
1018
|
|
|
1018
|
0
|
435398
|
my $self = shift; |
92
|
|
|
|
|
|
|
|
93
|
1018
|
|
|
|
|
1395
|
my $magic ; |
94
|
1018
|
|
|
|
|
2651
|
$self->smartReadExact(\$magic, 3); |
95
|
|
|
|
|
|
|
|
96
|
1018
|
|
|
|
|
40091
|
*$self->{HeaderPending} = $magic ; |
97
|
|
|
|
|
|
|
|
98
|
1018
|
100
|
|
|
|
2396
|
return $self->HeaderError("Header size is " . |
99
|
|
|
|
|
|
|
3 . " bytes") |
100
|
|
|
|
|
|
|
if length $magic != 3; |
101
|
|
|
|
|
|
|
|
102
|
1010
|
100
|
|
|
|
1858
|
return $self->HeaderError("Bad Magic.") |
103
|
|
|
|
|
|
|
if ! isLzfMagic($magic) ; |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
|
106
|
956
|
|
|
|
|
1912
|
*$self->{Type} = 'lzf'; |
107
|
956
|
|
|
|
|
2340
|
return $magic; |
108
|
|
|
|
|
|
|
} |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
sub readHeader |
111
|
|
|
|
|
|
|
{ |
112
|
956
|
|
|
956
|
0
|
2354
|
my $self = shift; |
113
|
956
|
|
|
|
|
1215
|
my $magic = shift ; |
114
|
|
|
|
|
|
|
|
115
|
956
|
|
|
|
|
2343
|
$self->pushBack($magic); |
116
|
956
|
|
|
|
|
9733
|
*$self->{HeaderPending} = ''; |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
return { |
119
|
956
|
|
|
|
|
4167
|
'Type' => 'lzf', |
120
|
|
|
|
|
|
|
'FingerprintLength' => 3, |
121
|
|
|
|
|
|
|
'HeaderLength' => 3, |
122
|
|
|
|
|
|
|
'TrailerLength' => 0, |
123
|
|
|
|
|
|
|
'Header' => '$magic' |
124
|
|
|
|
|
|
|
}; |
125
|
|
|
|
|
|
|
|
126
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
|
128
|
|
|
|
|
|
|
} |
129
|
|
|
|
|
|
|
|
130
|
|
|
|
|
|
|
sub chkTrailer |
131
|
|
|
|
|
|
|
{ |
132
|
341
|
|
|
341
|
0
|
16850
|
return STATUS_OK; |
133
|
|
|
|
|
|
|
} |
134
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
sub readBlock |
136
|
|
|
|
|
|
|
{ |
137
|
1297
|
|
|
1297
|
0
|
1167380
|
my $self = shift ; |
138
|
1297
|
|
|
|
|
1628
|
my $buff = shift ; |
139
|
1297
|
|
|
|
|
1735
|
my $size = shift ; |
140
|
|
|
|
|
|
|
|
141
|
1297
|
100
|
|
|
|
2534
|
return STATUS_ENDSTREAM |
142
|
|
|
|
|
|
|
if $self->smartEof() ; |
143
|
|
|
|
|
|
|
|
144
|
973
|
|
|
|
|
10640
|
my $buffer; |
145
|
|
|
|
|
|
|
|
146
|
973
|
100
|
|
|
|
2050
|
if ( ! $self->smartReadExact(\$buffer, 3 )){ |
147
|
1
|
|
|
|
|
15
|
$self->pushBack($buffer); |
148
|
1
|
|
|
|
|
6
|
return STATUS_ENDSTREAM; |
149
|
|
|
|
|
|
|
} |
150
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
#$self->smartReadExact(\$buffer, 3 ) |
152
|
|
|
|
|
|
|
# or return $self->saveErrorString(STATUS_ERROR,"Minimum header size is " . |
153
|
|
|
|
|
|
|
# 3 . " bytes") ; |
154
|
|
|
|
|
|
|
|
155
|
972
|
|
|
|
|
24783
|
my $sig = substr($buffer, 0, 2); |
156
|
972
|
|
|
|
|
1967
|
my $type = unpack 'C', substr($buffer, 2, 1); |
157
|
|
|
|
|
|
|
|
158
|
972
|
100
|
|
|
|
1869
|
if ($sig ne SIGNATURE) { |
159
|
16
|
|
|
|
|
37
|
$self->pushBack($buffer); |
160
|
16
|
|
|
|
|
143
|
return STATUS_ENDSTREAM |
161
|
|
|
|
|
|
|
} |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
#return STATUS_ENDSTREAM |
164
|
|
|
|
|
|
|
# if $sig ne SIGNATURE; |
165
|
|
|
|
|
|
|
|
166
|
956
|
|
|
|
|
1138
|
my $cSize = 0; |
167
|
956
|
|
|
|
|
1074
|
my $uSize = 0; |
168
|
956
|
100
|
|
|
|
1794
|
if ($type == 0) { # uncompressed |
|
|
50
|
|
|
|
|
|
169
|
790
|
100
|
|
|
|
1533
|
$self->smartReadExact(\$buffer, 2) |
170
|
|
|
|
|
|
|
or return $self->saveErrorString(STATUS_ERROR, "xxx"); |
171
|
774
|
|
|
|
|
23334
|
$uSize = unpack("n", $buffer); |
172
|
774
|
|
|
|
|
1020
|
$cSize = $uSize; |
173
|
774
|
|
|
|
|
1846
|
*$self->{Uncomp}->setIdentity(); |
174
|
|
|
|
|
|
|
} |
175
|
|
|
|
|
|
|
elsif ($type == 1) { # compressed |
176
|
166
|
50
|
|
|
|
407
|
$self->smartReadExact(\$buffer, 4) |
177
|
|
|
|
|
|
|
or return $self->saveErrorString(STATUS_ERROR, "xxx"); |
178
|
166
|
|
|
|
|
6396
|
($cSize, $uSize) = unpack("n n", $buffer); |
179
|
166
|
|
|
|
|
540
|
*$self->{Uncomp}->setUSize($uSize); |
180
|
|
|
|
|
|
|
} |
181
|
|
|
|
|
|
|
#elsif ($type == 2) { # CRC - not implemented by lzf yet |
182
|
|
|
|
|
|
|
#} |
183
|
|
|
|
|
|
|
else { |
184
|
0
|
|
|
|
|
0
|
return $self->saveErrorString(STATUS_ERROR, "unexpected block type - $type", STATUS_ERROR); |
185
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
} |
187
|
|
|
|
|
|
|
|
188
|
940
|
|
|
|
|
2114
|
*$self->{LzfData}{compSize} = $cSize; |
189
|
940
|
|
|
|
|
1539
|
*$self->{LzfData}{uncSize} = $uSize; |
190
|
|
|
|
|
|
|
|
191
|
940
|
100
|
|
|
|
1855
|
$self->smartReadExact($buff, $cSize) |
192
|
|
|
|
|
|
|
or return $self->saveErrorString(STATUS_ERROR, "xxx"); |
193
|
|
|
|
|
|
|
|
194
|
352
|
|
|
|
|
11219
|
return STATUS_OK; |
195
|
|
|
|
|
|
|
} |
196
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
sub postBlockChk |
199
|
|
|
|
|
|
|
{ |
200
|
350
|
|
|
350
|
0
|
4848
|
my $self = shift ; |
201
|
350
|
|
|
|
|
523
|
my $buffer = shift ; |
202
|
350
|
|
|
|
|
452
|
my $offset = shift ; |
203
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
return $self->saveErrorString(STATUS_ERROR, "uncompressed size wrong", STATUS_ERROR) |
205
|
350
|
50
|
|
|
|
874
|
if length($$buffer) - $offset != *$self->{LzfData}{uncSize} ; |
206
|
|
|
|
|
|
|
|
207
|
350
|
|
|
|
|
650
|
return STATUS_OK; |
208
|
|
|
|
|
|
|
} |
209
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
sub isLzfMagic |
211
|
|
|
|
|
|
|
{ |
212
|
1010
|
|
|
1010
|
0
|
1460
|
my $buffer = shift ; |
213
|
1010
|
|
|
|
|
1730
|
my $sig = substr($buffer, 0, 2); |
214
|
1010
|
|
|
|
|
2348
|
my $type = unpack 'C', substr($buffer, 2, 1); |
215
|
1010
|
|
66
|
|
|
4682
|
return $sig eq SIGNATURE && ($type == 0 || $type == 1); |
216
|
|
|
|
|
|
|
} |
217
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
1 ; |
219
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
__END__ |