File Coverage

blib/lib/IO/Compress/Lzop.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::Compress::Lzop ;
2              
3 10     10   45027 use strict ;
  10         13  
  10         258  
4 10     10   34 use warnings;
  10         13  
  10         265  
5             require Exporter ;
6 10     10   4345 use bytes;
  10         72  
  10         38  
7              
8 10     10   4653 use IO::Compress::Base 2.072 ;
  10         168966  
  10         464  
9              
10 10     10   58 use IO::Compress::Base::Common 2.072 qw(isaScalar createSelfTiedObject);
  10         106  
  10         585  
11 10     10   4057 use IO::Compress::Adapter::LZO 2.072 ;
  0            
  0            
12             use Compress::LZO qw(crc32 adler32 LZO_VERSION);
13             use IO::Compress::Lzop::Constants 2.072 ;
14              
15             our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $LzopError);
16              
17             $VERSION = '2.072';
18             $LzopError = '';
19              
20             @ISA = qw(Exporter IO::Compress::Base);
21             @EXPORT_OK = qw( $LzopError lzop ) ;
22             %EXPORT_TAGS = %IO::Compress::Base::EXPORT_TAGS ;
23             push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
24             Exporter::export_ok_tags('all');
25              
26             sub new
27             {
28             my $class = shift ;
29              
30             my $obj = createSelfTiedObject($class, \$LzopError);
31             return $obj->_create(undef, @_);
32             }
33              
34             sub lzop
35             {
36             my $obj = createSelfTiedObject(undef, \$LzopError);
37             return $obj->_def(@_);
38             }
39              
40             #sub ckSum
41             #{
42             # my $self = shift ;
43             #
44             # return adler32($_[0]) if *$self->{LZOP}{Adler32} ;
45             # return crc32($_[0]) if *$self->{LZOP}{CRRC32} ;
46             # return '';
47             #}
48              
49             sub mkHeader
50             {
51             my $self = shift ;
52             my $param = shift ;
53              
54             my $filename = '';
55              
56             my $time = $param->getValue('time') ;
57            
58             my $flags = F_OS_UNIX ;
59             if (! $param->getValue('minimal')) {
60             $flags |= F_ADLER32_D | F_ADLER32_C ;
61             $filename = $param->getValue('name') || '';
62             }
63              
64             my $mode = 0 ;
65             if ($param->getValue('mode')) {
66             $mode = $param->getValue('mode');
67             }
68              
69             my $xtr = '';
70             if ($param->parsed('extra')) {
71             $flags |= F_H_EXTRA_FIELD ;
72              
73             my $extra = $param->getValue('extra') ;
74             $xtr .= pack 'N', length($extra) ; # Extra Length
75             $xtr .= $extra ; # Extra Data
76             $xtr .= pack 'N', adler32($xtr) ; # Extra CRC
77             }
78            
79             my $hdr = '' ;
80              
81             $hdr .= pack 'n', 0x1010 ; # lzop Version
82             $hdr .= pack 'n', 0x1080 ; # LZO library version
83             $hdr .= pack 'n', 0x1010 ; # lzop extract version
84             $hdr .= pack 'C', 1 ; # Method
85             $hdr .= pack 'C', 5 ; # Level
86             $hdr .= pack 'N', $flags ; # Flags
87              
88             $hdr .= pack 'N', $mode ; # Mode
89             $hdr .= pack 'N', $time ; # Time
90             $hdr .= pack 'N', 0 ; # GMDiff
91              
92             # Filename
93             $hdr .= pack 'C', length $filename ; # filename length
94             $hdr .= $filename ;
95              
96             # Header CRC
97             $hdr .= pack 'N', adler32($hdr) ; # Header CRC
98              
99             # Extra
100             $hdr .= $xtr;
101              
102             return SIGNATURE . $hdr;
103              
104             }
105              
106             sub ckParams
107             {
108             my $self = shift ;
109             my $got = shift;
110            
111             if (! $got->parsed('time') ) {
112             # Modification time defaults to now.
113             $got->setValue('time' => time) ;
114             }
115              
116             #*$self->{LZOP}{Adler32} = ($got->getValue('??') ? 0 : 1) ;
117            
118             return 1 ;
119             }
120              
121              
122             sub mkComp
123             {
124             my $self = shift ;
125             my $got = shift ;
126              
127             my ($obj, $errstr, $errno) = IO::Compress::Adapter::LZO::mkCompObject(
128             $got->getValue('blocksize'),
129             $got->getValue('optimize'),
130             $got->getValue('minimal'),
131             );
132              
133             return $self->saveErrorString(undef, $errstr, $errno)
134             if ! defined $obj;
135              
136             return $obj;
137            
138             }
139              
140              
141             sub mkTrailer
142             {
143             my $self = shift ;
144             return pack "N", 0 ;
145             }
146              
147             sub mkFinalTrailer
148             {
149             return '';
150             }
151              
152             #sub newHeader
153             #{
154             # my $self = shift ;
155             # return '';
156             #}
157              
158             our %PARAMS = (
159             'name' => [IO::Compress::Base::Common::Parse_any, undef],
160             'time' => [IO::Compress::Base::Common::Parse_any, undef],
161             'mode' => [IO::Compress::Base::Common::Parse_any, 0],
162             'extra' => [IO::Compress::Base::Common::Parse_any, undef],
163             'minimal' => [IO::Compress::Base::Common::Parse_boolean, 0],
164             'blocksize' => [IO::Compress::Base::Common::Parse_unsigned, BLOCK_SIZE],
165             'optimize' => [IO::Compress::Base::Common::Parse_boolean, 1],
166              
167             # TODO
168             # none
169             # crc32
170             # adler32
171             );
172              
173             sub getExtraParams
174             {
175             return %PARAMS ;
176             }
177              
178             sub getInverseClass
179             {
180             return ('IO::Uncompress::UnLzop');
181             }
182              
183             sub getFileInfo
184             {
185             my $self = shift ;
186             my $params = shift;
187             my $filename = shift ;
188            
189             return
190             if isaScalar($filename) ;
191              
192             my ($defaultMode, $defaultTime) = (stat($filename))[2, 9] ;
193              
194             $params->setValue('name' => $filename)
195             if ! $params->parsed('name') ;
196              
197             $params->setValue('time' => $defaultTime)
198             if ! $params->parsed('time') ;
199              
200             $params->setValue('mode' => $defaultMode)
201             if ! $params->parsed('mode') ;
202             }
203              
204             1;
205              
206             __END__