File Coverage

blib/lib/IO/Compress/RawDeflate.pm
Criterion Covered Total %
statement 80 80 100.0
branch 13 20 65.0
condition 2 3 66.6
subroutine 22 22 100.0
pod 3 13 23.0
total 120 138 86.9


line stmt bran cond sub pod time code
1             package IO::Compress::RawDeflate ;
2              
3             # create RFC1951
4             #
5 103     103   70586 use strict ;
  103         176  
  103         3170  
6 103     103   368 use warnings;
  103         162  
  103         3721  
7 103     103   4507 use bytes;
  103         4472  
  103         425  
8              
9 103     103   48705 use IO::Compress::Base 2.221 ;
  103         1733  
  103         5578  
10 103     103   538 use IO::Compress::Base::Common 2.221 qw(:Status :Parse);
  103         1036  
  103         15785  
11 103     103   44814 use IO::Compress::Adapter::Deflate 2.221 ;
  103         1851  
  103         17273  
12 103     103   888 use Compress::Raw::Zlib 2.218 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
  103         1165  
  103         58716  
13              
14             require Exporter ;
15              
16             our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError);
17              
18             $VERSION = '2.221';
19             $RawDeflateError = '';
20              
21             @ISA = qw(IO::Compress::Base Exporter);
22             @EXPORT_OK = qw( $RawDeflateError rawdeflate ) ;
23             push @EXPORT_OK, @IO::Compress::Adapter::Deflate::EXPORT_OK ;
24              
25             %EXPORT_TAGS = %IO::Compress::Adapter::Deflate::DEFLATE_CONSTANTS;
26              
27              
28             {
29             my %seen;
30             foreach (keys %EXPORT_TAGS )
31             {
32             push @{$EXPORT_TAGS{constants}},
33             grep { !$seen{$_}++ }
34             @{ $EXPORT_TAGS{$_} }
35             }
36             $EXPORT_TAGS{all} = $EXPORT_TAGS{constants} ;
37             }
38              
39              
40             %DEFLATE_CONSTANTS = %EXPORT_TAGS;
41              
42             #push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
43              
44             Exporter::export_ok_tags('all');
45              
46              
47              
48             sub new
49             {
50 168     168 1 260281 my $class = shift ;
51              
52 168         618 my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$RawDeflateError);
53              
54 168         567 return $obj->_create(undef, @_);
55             }
56              
57             sub rawdeflate
58             {
59 152     152 1 136892 my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$RawDeflateError);
60 152         542 return $obj->_def(@_);
61             }
62              
63             sub ckParams
64             {
65 642     642 0 798 my $self = shift ;
66 642         663 my $got = shift;
67              
68 642         1216 return 1 ;
69             }
70              
71             sub mkComp
72             {
73 716     716 0 916 my $self = shift ;
74 716         809 my $got = shift ;
75              
76 716         1206 my ($obj, $errstr, $errno) = IO::Compress::Adapter::Deflate::mkCompObject(
77             $got->getValue('crc32'),
78             $got->getValue('adler32'),
79             $got->getValue('level'),
80             $got->getValue('strategy')
81             );
82              
83 716 50       1635 return $self->saveErrorString(undef, $errstr, $errno)
84             if ! defined $obj;
85              
86 716         4069 return $obj;
87             }
88              
89              
90             sub mkHeader
91             {
92 294     294 0 362 my $self = shift ;
93 294         835 return '';
94             }
95              
96             sub mkTrailer
97             {
98 314     314 0 386 my $self = shift ;
99 314         616 return '';
100             }
101              
102             sub mkFinalTrailer
103             {
104 287     287 0 528 return '';
105             }
106              
107              
108             #sub newHeader
109             #{
110             # my $self = shift ;
111             # return '';
112             #}
113              
114             sub getExtraParams
115             {
116 319     319 0 481 my $self = shift ;
117 319         512 return getZlibParams();
118             }
119              
120             our %PARAMS = (
121             #'method' => [IO::Compress::Base::Common::Parse_unsigned, Z_DEFLATED],
122             'level' => [IO::Compress::Base::Common::Parse_signed, Z_DEFAULT_COMPRESSION],
123             'strategy' => [IO::Compress::Base::Common::Parse_signed, Z_DEFAULT_STRATEGY],
124              
125             'crc32' => [IO::Compress::Base::Common::Parse_boolean, 0],
126             'adler32' => [IO::Compress::Base::Common::Parse_boolean, 0],
127             'merge' => [IO::Compress::Base::Common::Parse_boolean, 0],
128             );
129              
130             sub getZlibParams
131             {
132 1165     1165 0 12808 return %PARAMS;
133             }
134              
135             sub getInverseClass
136             {
137 103     103   690 no warnings 'once';
  103         161  
  103         10207  
138 23     23 0 49 return ('IO::Uncompress::RawInflate',
139             \$IO::Uncompress::RawInflate::RawInflateError);
140             }
141              
142             sub getFileInfo
143             {
144 102     102 0 111 my $self = shift ;
145 102         109 my $params = shift;
146 102         173 my $file = shift ;
147              
148             }
149              
150 103     103   510 use Fcntl qw(SEEK_SET);
  103         196  
  103         45289  
151              
152             sub createMerge
153             {
154 69     69 0 85 my $self = shift ;
155 69         101 my $outValue = shift ;
156 69         83 my $outType = shift ;
157              
158 69         174 my ($invClass, $error_ref) = $self->getInverseClass();
159 69 50       4172 eval "require $invClass"
160             or die "aaaahhhh" ;
161              
162 69 100       368 my $inf = $invClass->new( $outValue,
163             Transparent => 0,
164             #Strict => 1,
165             AutoClose => 0,
166             Scan => 1)
167             or return $self->saveErrorString(undef, "Cannot create InflateScan object: $$error_ref" ) ;
168              
169 60         79 my $end_offset = 0;
170 60 50       174 $inf->scan()
171             or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $inf->errorNo) ;
172 60 50       161 $inf->zap($end_offset)
173             or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $inf->errorNo) ;
174              
175 60         140 my $def = *$self->{Compress} = $inf->createDeflate();
176              
177 60         149 *$self->{Header} = *$inf->{Info}{Header};
178 60         224 *$self->{UnCompSize} = *$inf->{UnCompSize}->clone();
179 60         117 *$self->{CompSize} = *$inf->{CompSize}->clone();
180             # TODO -- fix this
181             #*$self->{CompSize} = U64->new(0, *$self->{UnCompSize_32bit});
182              
183              
184 60 100 66     216 if ( $outType eq 'buffer')
    50          
185 24         30 { substr( ${ *$self->{Buffer} }, $end_offset) = '' }
  24         59  
186             elsif ($outType eq 'handle' || $outType eq 'filename') {
187 36         75 *$self->{FH} = *$inf->{FH} ;
188 36         67 delete *$inf->{FH};
189 36         154 *$self->{FH}->flush() ;
190 36 100       82 *$self->{Handle} = 1 if $outType eq 'handle';
191              
192             #seek(*$self->{FH}, $end_offset, SEEK_SET)
193 36 50       112 *$self->{FH}->seek($end_offset, SEEK_SET)
194             or return $self->saveErrorString(undef, $!, $!) ;
195             }
196              
197 60         653 return $def ;
198             }
199              
200             #### zlib specific methods
201              
202             sub deflateParams
203             {
204 3     3 1 27 my $self = shift ;
205              
206 3         4 my $level = shift ;
207 3         3 my $strategy = shift ;
208              
209 3         11 my $status = *$self->{Compress}->deflateParams(Level => $level, Strategy => $strategy) ;
210             return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo})
211 3 50       8 if $status == STATUS_ERROR;
212              
213 3         9 return 1;
214             }
215              
216              
217              
218              
219             1;
220              
221             __END__