File Coverage

blib/lib/IO/Uncompress/UnLzma.pm
Criterion Covered Total %
statement 16 18 88.8
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 24 91.6


line stmt bran cond sub pod time code
1             package IO::Uncompress::UnLzma ;
2              
3 9     9   230550 use strict ;
  9         82  
  9         224  
4 9     9   31 use warnings;
  9         7  
  9         184  
5 9     9   26 use bytes;
  9         10  
  9         32  
6              
7 9     9   246 use IO::Compress::Base::Common 2.073 qw(:Status createSelfTiedObject);
  9         123  
  9         906  
8              
9 9     9   37 use IO::Uncompress::Base 2.073 ;
  9         97  
  9         296  
10 9     9   136 use IO::Uncompress::Adapter::UnLzma 2.073 ;
  0            
  0            
11              
12             require Exporter ;
13             our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnLzmaError);
14              
15             $VERSION = '2.073';
16             $UnLzmaError = '';
17              
18             @ISA = qw( IO::Uncompress::Base Exporter );
19             @EXPORT_OK = qw( $UnLzmaError unlzma ) ;
20             #%EXPORT_TAGS = %IO::Uncompress::Base::EXPORT_TAGS ;
21             push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
22             #Exporter::export_ok_tags('all');
23              
24              
25             sub new
26             {
27             my $class = shift ;
28             my $obj = createSelfTiedObject($class, \$UnLzmaError);
29              
30             $obj->_create(undef, 0, @_);
31             }
32              
33             sub unlzma
34             {
35             my $obj = createSelfTiedObject(undef, \$UnLzmaError);
36             return $obj->_inf(@_);
37             }
38              
39             #our %PARAMS = (
40             #'verbosity' => [IO::Compress::Base::Common::Parse_boolean, 0],
41             #'small' => [IO::Compress::Base::Common::Parse_boolean, 0],
42             # );
43              
44             sub getExtraParams
45             {
46             return ();
47             }
48              
49              
50             sub ckParams
51             {
52             my $self = shift ;
53             my $got = shift ;
54              
55             return 1;
56             }
57              
58             sub mkUncomp
59             {
60             my $self = shift ;
61             my $got = shift ;
62              
63             #my $Small = $got->getValue('small');
64             #my $Verbosity = $got->getValue('verbosity');
65              
66             my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::UnLzma::mkUncompObject(
67             );
68              
69             return $self->saveErrorString(undef, $errstr, $errno)
70             if ! defined $obj;
71            
72             *$self->{Uncomp} = $obj;
73              
74             *$self->{Info} = $self->ckMagic()
75             or return 0 ;
76              
77             return 1;
78             }
79              
80              
81             sub ckMagic
82             {
83             my $self = shift;
84              
85             my $got = $self->isLzma(@_);
86              
87             if ($got) {
88             *$self->{Pending} = *$self->{HeaderPending} ;
89             }
90             else {
91             $self->pushBack(*$self->{HeaderPending});
92             *$self->{Uncomp}->reset();
93             }
94             *$self->{HeaderPending} = '';
95              
96             return $got ;
97             }
98              
99              
100             sub isLzma
101             {
102             my $self = shift ;
103             my $magic = shift;
104              
105             $magic = '' unless defined $magic ;
106              
107             my $buffer = '';
108              
109             $self->smartRead(\$buffer, *$self->{BlockSize}) >= 0
110             or return $self->saveErrorString(undef, "No data to read");
111              
112             my $temp_buf = $magic . $buffer ;
113             *$self->{HeaderPending} = $temp_buf ;
114             $buffer = '';
115             my $status = *$self->{Uncomp}->uncompr(\$temp_buf, \$buffer, $self->smartEof()) ;
116            
117             return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, STATUS_ERROR)
118             if $status == STATUS_ERROR;
119              
120             $self->pushBack($temp_buf) ;
121              
122             return $self->saveErrorString(undef, "unexpected end of file", STATUS_ERROR)
123             if $self->smartEof() && $status != STATUS_ENDSTREAM;
124            
125             #my $buf_len = *$self->{Uncomp}->uncompressedBytes();
126             my $buf_len = length $buffer;
127              
128             if ($status == STATUS_ENDSTREAM) {
129             if (*$self->{MultiStream}
130             && (length $temp_buf || ! $self->smartEof())){
131             *$self->{NewStream} = 1 ;
132             *$self->{EndStream} = 0 ;
133             }
134             else {
135             *$self->{EndStream} = 1 ;
136             }
137             }
138             *$self->{HeaderPending} = $buffer ;
139             *$self->{InflatedBytesRead} = $buf_len ;
140             *$self->{TotalInflatedBytesRead} += $buf_len ;
141             *$self->{Type} = 'lzma';
142              
143             $self->saveStatus(STATUS_OK);
144              
145             return {
146             'Type' => 'lzma',
147             'HeaderLength' => 0,
148             'TrailerLength' => 0,
149             'Header' => ''
150             };
151            
152              
153             return '';
154              
155             # my $magic ;
156             # $self->smartReadExact(\$magic, 4);
157             #
158             # *$self->{HeaderPending} = $magic ;
159             #
160             # return $self->HeaderError("Header size is " .
161             # 4 . " bytes")
162             # if length $magic != 4;
163             #
164             # return $self->HeaderError("Bad Magic.")
165             # if ! isBzip2Magic($magic) ;
166             #
167             #
168             # *$self->{Type} = 'bzip2';
169             # return $magic;
170             }
171              
172              
173             sub readHeader
174             {
175             my $self = shift;
176             my $magic = shift ;
177              
178             $self->pushBack($magic);
179             *$self->{HeaderPending} = '';
180              
181              
182             return {
183             'Type' => 'lzma',
184             'FingerprintLength' => 0,
185             'HeaderLength' => 0,
186             'TrailerLength' => 0,
187             'Header' => ''
188             };
189            
190             }
191              
192             sub chkTrailer
193             {
194             return STATUS_OK;
195             }
196              
197              
198             1 ;
199              
200             __END__