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   64817 use strict ;
  103         157  
  103         2938  
6 103     103   352 use warnings;
  103         166  
  103         3455  
7 103     103   4190 use bytes;
  103         4013  
  103         427  
8              
9 103     103   47406 use IO::Compress::Base 2.223 ;
  103         1759  
  103         5618  
10 103     103   551 use IO::Compress::Base::Common 2.223 qw(:Status :Parse);
  103         1060  
  103         15288  
11 103     103   42963 use IO::Compress::Adapter::Deflate 2.223 ;
  103         1848  
  103         17090  
12 103     103   941 use Compress::Raw::Zlib 2.222 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
  103         1135  
  103         53251  
13              
14             require Exporter ;
15              
16             our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError);
17              
18             $VERSION = '2.223';
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 266461 my $class = shift ;
51              
52 168         577 my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$RawDeflateError);
53              
54 168         586 return $obj->_create(undef, @_);
55             }
56              
57             sub rawdeflate
58             {
59 152     152 1 118342 my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$RawDeflateError);
60 152         434 return $obj->_def(@_);
61             }
62              
63             sub ckParams
64             {
65 642     642 0 884 my $self = shift ;
66 642         709 my $got = shift;
67              
68 642         1262 return 1 ;
69             }
70              
71             sub mkComp
72             {
73 716     716 0 842 my $self = shift ;
74 716         802 my $got = shift ;
75              
76 716         1258 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       1765 return $self->saveErrorString(undef, $errstr, $errno)
84             if ! defined $obj;
85              
86 716         4029 return $obj;
87             }
88              
89              
90             sub mkHeader
91             {
92 294     294 0 356 my $self = shift ;
93 294         762 return '';
94             }
95              
96             sub mkTrailer
97             {
98 314     314 0 343 my $self = shift ;
99 314         545 return '';
100             }
101              
102             sub mkFinalTrailer
103             {
104 287     287 0 545 return '';
105             }
106              
107              
108             #sub newHeader
109             #{
110             # my $self = shift ;
111             # return '';
112             #}
113              
114             sub getExtraParams
115             {
116 319     319 0 389 my $self = shift ;
117 319         453 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 12724 return %PARAMS;
133             }
134              
135             sub getInverseClass
136             {
137 103     103   665 no warnings 'once';
  103         163  
  103         10175  
138 23     23 0 48 return ('IO::Uncompress::RawInflate',
139             \$IO::Uncompress::RawInflate::RawInflateError);
140             }
141              
142             sub getFileInfo
143             {
144 102     102 0 109 my $self = shift ;
145 102         101 my $params = shift;
146 102         155 my $file = shift ;
147              
148             }
149              
150 103     103   539 use Fcntl qw(SEEK_SET);
  103         163  
  103         46170  
151              
152             sub createMerge
153             {
154 69     69 0 99 my $self = shift ;
155 69         86 my $outValue = shift ;
156 69         77 my $outType = shift ;
157              
158 69         124 my ($invClass, $error_ref) = $self->getInverseClass();
159 69 50       4113 eval "require $invClass"
160             or die "aaaahhhh" ;
161              
162 69 100       364 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         75 my $end_offset = 0;
170 60 50       169 $inf->scan()
171             or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $inf->errorNo) ;
172 60 50       156 $inf->zap($end_offset)
173             or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $inf->errorNo) ;
174              
175 60         126 my $def = *$self->{Compress} = $inf->createDeflate();
176              
177 60         151 *$self->{Header} = *$inf->{Info}{Header};
178 60         201 *$self->{UnCompSize} = *$inf->{UnCompSize}->clone();
179 60         114 *$self->{CompSize} = *$inf->{CompSize}->clone();
180             # TODO -- fix this
181             #*$self->{CompSize} = U64->new(0, *$self->{UnCompSize_32bit});
182              
183              
184 60 100 66     206 if ( $outType eq 'buffer')
    50          
185 24         29 { substr( ${ *$self->{Buffer} }, $end_offset) = '' }
  24         57  
186             elsif ($outType eq 'handle' || $outType eq 'filename') {
187 36         69 *$self->{FH} = *$inf->{FH} ;
188 36         58 delete *$inf->{FH};
189 36         143 *$self->{FH}->flush() ;
190 36 100       79 *$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         578 return $def ;
198             }
199              
200             #### zlib specific methods
201              
202             sub deflateParams
203             {
204 3     3 1 26 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         12 return 1;
214             }
215              
216              
217              
218              
219             1;
220              
221             __END__