line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package IO::Uncompress::UnLzf ; |
2
|
|
|
|
|
|
|
|
3
|
11
|
|
|
11
|
|
79307
|
use strict ; |
|
11
|
|
|
|
|
23
|
|
|
11
|
|
|
|
|
274
|
|
4
|
11
|
|
|
11
|
|
48
|
use warnings; |
|
11
|
|
|
|
|
17
|
|
|
11
|
|
|
|
|
276
|
|
5
|
11
|
|
|
11
|
|
49
|
use bytes; |
|
11
|
|
|
|
|
18
|
|
|
11
|
|
|
|
|
46
|
|
6
|
|
|
|
|
|
|
|
7
|
11
|
|
|
11
|
|
353
|
use IO::Compress::Base::Common 2.204 qw(:Status createSelfTiedObject); |
|
11
|
|
|
|
|
207
|
|
|
11
|
|
|
|
|
1195
|
|
8
|
|
|
|
|
|
|
|
9
|
11
|
|
|
11
|
|
3847
|
use IO::Uncompress::Base 2.204 ; |
|
11
|
|
|
|
|
57835
|
|
|
11
|
|
|
|
|
630
|
|
10
|
11
|
|
|
11
|
|
3211
|
use IO::Uncompress::Adapter::Lzf 2.204 ; |
|
11
|
|
|
|
|
203
|
|
|
11
|
|
|
|
|
1053
|
|
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
require Exporter ; |
14
|
|
|
|
|
|
|
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnLzfError); |
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
$VERSION = '2.204'; |
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
|
|
65
|
use constant SIGNATURE => 'ZV'; |
|
11
|
|
|
|
|
19
|
|
|
11
|
|
|
|
|
8977
|
|
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
sub new |
28
|
|
|
|
|
|
|
{ |
29
|
786
|
|
|
786
|
1
|
1374916
|
my $class = shift ; |
30
|
786
|
|
|
|
|
2275
|
my $obj = createSelfTiedObject($class, \$UnLzfError); |
31
|
|
|
|
|
|
|
|
32
|
786
|
|
|
|
|
26785
|
$obj->_create(undef, 0, @_); |
33
|
|
|
|
|
|
|
} |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
sub unlzf |
36
|
|
|
|
|
|
|
{ |
37
|
63
|
|
|
63
|
1
|
77978
|
my $obj = createSelfTiedObject(undef, \$UnLzfError); |
38
|
63
|
|
|
|
|
2233
|
return $obj->_inf(@_); |
39
|
|
|
|
|
|
|
} |
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
sub getExtraParams |
42
|
|
|
|
|
|
|
{ |
43
|
832
|
|
|
832
|
0
|
31130
|
return (); |
44
|
|
|
|
|
|
|
} |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
sub ckParams |
47
|
|
|
|
|
|
|
{ |
48
|
838
|
|
|
838
|
0
|
53129
|
my $self = shift ; |
49
|
838
|
|
|
|
|
1288
|
my $got = shift ; |
50
|
|
|
|
|
|
|
|
51
|
838
|
|
|
|
|
1314
|
return 1; |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
sub postCheckParams |
56
|
|
|
|
|
|
|
{ |
57
|
828
|
|
|
828
|
0
|
135242
|
my $self = shift ; |
58
|
828
|
|
|
|
|
1028
|
my $got = shift ; |
59
|
|
|
|
|
|
|
|
60
|
828
|
100
|
|
|
|
1676
|
return $self->saveErrorString(undef, "MultiStream not supported by Lzf", STATUS_ERROR) |
61
|
|
|
|
|
|
|
if $got->getValue('multistream') ; |
62
|
|
|
|
|
|
|
|
63
|
826
|
|
|
|
|
4191
|
$got->setValue('multistream' => 0); |
64
|
826
|
|
|
|
|
4446
|
return 1; |
65
|
|
|
|
|
|
|
} |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
sub mkUncomp |
68
|
|
|
|
|
|
|
{ |
69
|
837
|
|
|
837
|
0
|
98470
|
my $self = shift ; |
70
|
837
|
|
|
|
|
1039
|
my $got = shift ; |
71
|
|
|
|
|
|
|
|
72
|
837
|
100
|
|
|
|
1414
|
my $magic = $self->ckMagic() |
73
|
|
|
|
|
|
|
or return 0; |
74
|
|
|
|
|
|
|
|
75
|
777
|
50
|
|
|
|
1426
|
*$self->{Info} = $self->readHeader($magic) |
76
|
|
|
|
|
|
|
or return undef ; |
77
|
|
|
|
|
|
|
|
78
|
777
|
|
|
|
|
1961
|
my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Lzf::mkUncompObject(); |
79
|
|
|
|
|
|
|
|
80
|
777
|
50
|
|
|
|
1478
|
return $self->saveErrorString(undef, $errstr, $errno) |
81
|
|
|
|
|
|
|
if ! defined $obj; |
82
|
|
|
|
|
|
|
|
83
|
777
|
|
|
|
|
1168
|
*$self->{Uncomp} = $obj; |
84
|
|
|
|
|
|
|
|
85
|
777
|
|
|
|
|
1419
|
return 1; |
86
|
|
|
|
|
|
|
} |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
sub ckMagic |
90
|
|
|
|
|
|
|
{ |
91
|
1018
|
|
|
1018
|
0
|
375283
|
my $self = shift; |
92
|
|
|
|
|
|
|
|
93
|
1018
|
|
|
|
|
1225
|
my $magic ; |
94
|
1018
|
|
|
|
|
2708
|
$self->smartReadExact(\$magic, 3); |
95
|
|
|
|
|
|
|
|
96
|
1018
|
|
|
|
|
42405
|
*$self->{HeaderPending} = $magic ; |
97
|
|
|
|
|
|
|
|
98
|
1018
|
100
|
|
|
|
2392
|
return $self->HeaderError("Header size is " . |
99
|
|
|
|
|
|
|
3 . " bytes") |
100
|
|
|
|
|
|
|
if length $magic != 3; |
101
|
|
|
|
|
|
|
|
102
|
1010
|
100
|
|
|
|
1914
|
return $self->HeaderError("Bad Magic.") |
103
|
|
|
|
|
|
|
if ! isLzfMagic($magic) ; |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
|
106
|
956
|
|
|
|
|
1768
|
*$self->{Type} = 'lzf'; |
107
|
956
|
|
|
|
|
2226
|
return $magic; |
108
|
|
|
|
|
|
|
} |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
sub readHeader |
111
|
|
|
|
|
|
|
{ |
112
|
956
|
|
|
956
|
0
|
2039
|
my $self = shift; |
113
|
956
|
|
|
|
|
1188
|
my $magic = shift ; |
114
|
|
|
|
|
|
|
|
115
|
956
|
|
|
|
|
2227
|
$self->pushBack($magic); |
116
|
956
|
|
|
|
|
9110
|
*$self->{HeaderPending} = ''; |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
return { |
119
|
956
|
|
|
|
|
4043
|
'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
|
15386
|
return STATUS_OK; |
133
|
|
|
|
|
|
|
} |
134
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
sub readBlock |
136
|
|
|
|
|
|
|
{ |
137
|
1297
|
|
|
1297
|
0
|
1262015
|
my $self = shift ; |
138
|
1297
|
|
|
|
|
1585
|
my $buff = shift ; |
139
|
1297
|
|
|
|
|
1586
|
my $size = shift ; |
140
|
|
|
|
|
|
|
|
141
|
1297
|
100
|
|
|
|
2455
|
return STATUS_ENDSTREAM |
142
|
|
|
|
|
|
|
if $self->smartEof() ; |
143
|
|
|
|
|
|
|
|
144
|
973
|
|
|
|
|
10107
|
my $buffer; |
145
|
|
|
|
|
|
|
|
146
|
973
|
100
|
|
|
|
1935
|
if ( ! $self->smartReadExact(\$buffer, 3 )){ |
147
|
1
|
|
|
|
|
18
|
$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
|
|
|
|
|
23791
|
my $sig = substr($buffer, 0, 2); |
156
|
972
|
|
|
|
|
1962
|
my $type = unpack 'C', substr($buffer, 2, 1); |
157
|
|
|
|
|
|
|
|
158
|
972
|
100
|
|
|
|
1879
|
if ($sig ne SIGNATURE) { |
159
|
16
|
|
|
|
|
58
|
$self->pushBack($buffer); |
160
|
16
|
|
|
|
|
168
|
return STATUS_ENDSTREAM |
161
|
|
|
|
|
|
|
} |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
#return STATUS_ENDSTREAM |
164
|
|
|
|
|
|
|
# if $sig ne SIGNATURE; |
165
|
|
|
|
|
|
|
|
166
|
956
|
|
|
|
|
1123
|
my $cSize = 0; |
167
|
956
|
|
|
|
|
1074
|
my $uSize = 0; |
168
|
956
|
100
|
|
|
|
1748
|
if ($type == 0) { # uncompressed |
|
|
50
|
|
|
|
|
|
169
|
790
|
100
|
|
|
|
1417
|
$self->smartReadExact(\$buffer, 2) |
170
|
|
|
|
|
|
|
or return $self->saveErrorString(STATUS_ERROR, "xxx"); |
171
|
774
|
|
|
|
|
22762
|
$uSize = unpack("n", $buffer); |
172
|
774
|
|
|
|
|
997
|
$cSize = $uSize; |
173
|
774
|
|
|
|
|
1745
|
*$self->{Uncomp}->setIdentity(); |
174
|
|
|
|
|
|
|
} |
175
|
|
|
|
|
|
|
elsif ($type == 1) { # compressed |
176
|
166
|
50
|
|
|
|
382
|
$self->smartReadExact(\$buffer, 4) |
177
|
|
|
|
|
|
|
or return $self->saveErrorString(STATUS_ERROR, "xxx"); |
178
|
166
|
|
|
|
|
4815
|
($cSize, $uSize) = unpack("n n", $buffer); |
179
|
166
|
|
|
|
|
451
|
*$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
|
|
|
|
|
2008
|
*$self->{LzfData}{compSize} = $cSize; |
189
|
940
|
|
|
|
|
1343
|
*$self->{LzfData}{uncSize} = $uSize; |
190
|
|
|
|
|
|
|
|
191
|
940
|
100
|
|
|
|
1717
|
$self->smartReadExact($buff, $cSize) |
192
|
|
|
|
|
|
|
or return $self->saveErrorString(STATUS_ERROR, "xxx"); |
193
|
|
|
|
|
|
|
|
194
|
352
|
|
|
|
|
10035
|
return STATUS_OK; |
195
|
|
|
|
|
|
|
} |
196
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
sub postBlockChk |
199
|
|
|
|
|
|
|
{ |
200
|
350
|
|
|
350
|
0
|
4341
|
my $self = shift ; |
201
|
350
|
|
|
|
|
456
|
my $buffer = shift ; |
202
|
350
|
|
|
|
|
417
|
my $offset = shift ; |
203
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
return $self->saveErrorString(STATUS_ERROR, "uncompressed size wrong", STATUS_ERROR) |
205
|
350
|
50
|
|
|
|
836
|
if length($$buffer) - $offset != *$self->{LzfData}{uncSize} ; |
206
|
|
|
|
|
|
|
|
207
|
350
|
|
|
|
|
576
|
return STATUS_OK; |
208
|
|
|
|
|
|
|
} |
209
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
sub isLzfMagic |
211
|
|
|
|
|
|
|
{ |
212
|
1010
|
|
|
1010
|
0
|
1422
|
my $buffer = shift ; |
213
|
1010
|
|
|
|
|
1728
|
my $sig = substr($buffer, 0, 2); |
214
|
1010
|
|
|
|
|
2281
|
my $type = unpack 'C', substr($buffer, 2, 1); |
215
|
1010
|
|
66
|
|
|
4387
|
return $sig eq SIGNATURE && ($type == 0 || $type == 1); |
216
|
|
|
|
|
|
|
} |
217
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
1 ; |
219
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
__END__ |