| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package IO::Uncompress::RawInflate ; | 
| 2 |  |  |  |  |  |  | # for RFC1951 | 
| 3 |  |  |  |  |  |  |  | 
| 4 | 84 |  |  | 84 |  | 7705 | use strict ; | 
|  | 84 |  |  |  |  | 166 |  | 
|  | 84 |  |  |  |  | 2398 |  | 
| 5 | 84 |  |  | 84 |  | 421 | use warnings; | 
|  | 84 |  |  |  |  | 187 |  | 
|  | 84 |  |  |  |  | 1910 |  | 
| 6 | 84 |  |  | 84 |  | 406 | use bytes; | 
|  | 84 |  |  |  |  | 237 |  | 
|  | 84 |  |  |  |  | 450 |  | 
| 7 |  |  |  |  |  |  |  | 
| 8 | 84 |  |  | 84 |  | 2550 | use Compress::Raw::Zlib  2.205 ; | 
|  | 84 |  |  |  |  | 1564 |  | 
|  | 84 |  |  |  |  | 20546 |  | 
| 9 | 84 |  |  | 84 |  | 618 | use IO::Compress::Base::Common  2.205 qw(:Status ); | 
|  | 84 |  |  |  |  | 1261 |  | 
|  | 84 |  |  |  |  | 9744 |  | 
| 10 |  |  |  |  |  |  |  | 
| 11 | 84 |  |  | 84 |  | 24392 | use IO::Uncompress::Base  2.205 ; | 
|  | 84 |  |  |  |  | 1559 |  | 
|  | 84 |  |  |  |  | 4667 |  | 
| 12 | 84 |  |  | 84 |  | 20339 | use IO::Uncompress::Adapter::Inflate  2.205 ; | 
|  | 84 |  |  |  |  | 1486 |  | 
|  | 84 |  |  |  |  | 124079 |  | 
| 13 |  |  |  |  |  |  |  | 
| 14 |  |  |  |  |  |  | require Exporter ; | 
| 15 |  |  |  |  |  |  | our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError); | 
| 16 |  |  |  |  |  |  |  | 
| 17 |  |  |  |  |  |  | $VERSION = '2.205'; | 
| 18 |  |  |  |  |  |  | $RawInflateError = ''; | 
| 19 |  |  |  |  |  |  |  | 
| 20 |  |  |  |  |  |  | @ISA    = qw(IO::Uncompress::Base Exporter); | 
| 21 |  |  |  |  |  |  | @EXPORT_OK = qw( $RawInflateError rawinflate ) ; | 
| 22 |  |  |  |  |  |  | %DEFLATE_CONSTANTS = (); | 
| 23 |  |  |  |  |  |  | %EXPORT_TAGS = %IO::Uncompress::Base::EXPORT_TAGS ; | 
| 24 |  |  |  |  |  |  | push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; | 
| 25 |  |  |  |  |  |  | Exporter::export_ok_tags('all'); | 
| 26 |  |  |  |  |  |  |  | 
| 27 |  |  |  |  |  |  | #{ | 
| 28 |  |  |  |  |  |  | #    # Execute at runtime | 
| 29 |  |  |  |  |  |  | #    my %bad; | 
| 30 |  |  |  |  |  |  | #    for my $module (qw(Compress::Raw::Zlib IO::Compress::Base::Common IO::Uncompress::Base IO::Uncompress::Adapter::Inflate)) | 
| 31 |  |  |  |  |  |  | #    { | 
| 32 |  |  |  |  |  |  | #        my $ver = ${ $module . "::VERSION"} ; | 
| 33 |  |  |  |  |  |  | # | 
| 34 |  |  |  |  |  |  | #        $bad{$module} = $ver | 
| 35 |  |  |  |  |  |  | #            if $ver ne $VERSION; | 
| 36 |  |  |  |  |  |  | #    } | 
| 37 |  |  |  |  |  |  | # | 
| 38 |  |  |  |  |  |  | #    if (keys %bad) | 
| 39 |  |  |  |  |  |  | #    { | 
| 40 |  |  |  |  |  |  | #        my $string = join "\n", map { "$_ $bad{$_}" } keys %bad; | 
| 41 |  |  |  |  |  |  | #        die caller(0)[0] . "needs version $VERSION mismatch\n$string\n"; | 
| 42 |  |  |  |  |  |  | #    } | 
| 43 |  |  |  |  |  |  | #} | 
| 44 |  |  |  |  |  |  |  | 
| 45 |  |  |  |  |  |  | sub new | 
| 46 |  |  |  |  |  |  | { | 
| 47 | 273 |  |  | 273 | 1 | 48215 | my $class = shift ; | 
| 48 | 273 |  |  |  |  | 982 | my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$RawInflateError); | 
| 49 | 273 |  |  |  |  | 1047 | $obj->_create(undef, 0, @_); | 
| 50 |  |  |  |  |  |  | } | 
| 51 |  |  |  |  |  |  |  | 
| 52 |  |  |  |  |  |  | sub rawinflate | 
| 53 |  |  |  |  |  |  | { | 
| 54 | 66 |  |  | 66 | 1 | 45441 | my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$RawInflateError); | 
| 55 | 66 |  |  |  |  | 229 | return $obj->_inf(@_); | 
| 56 |  |  |  |  |  |  | } | 
| 57 |  |  |  |  |  |  |  | 
| 58 |  |  |  |  |  |  | sub getExtraParams | 
| 59 |  |  |  |  |  |  | { | 
| 60 | 322 |  |  | 322 | 0 | 2241 | return (); | 
| 61 |  |  |  |  |  |  | } | 
| 62 |  |  |  |  |  |  |  | 
| 63 |  |  |  |  |  |  | sub ckParams | 
| 64 |  |  |  |  |  |  | { | 
| 65 | 330 |  |  | 330 | 0 | 593 | my $self = shift ; | 
| 66 | 330 |  |  |  |  | 502 | my $got = shift ; | 
| 67 |  |  |  |  |  |  |  | 
| 68 | 330 |  |  |  |  | 798 | return 1; | 
| 69 |  |  |  |  |  |  | } | 
| 70 |  |  |  |  |  |  |  | 
| 71 |  |  |  |  |  |  | sub mkUncomp | 
| 72 |  |  |  |  |  |  | { | 
| 73 | 1143 |  |  | 1143 | 0 | 1994 | my $self = shift ; | 
| 74 | 1143 |  |  |  |  | 1689 | my $got = shift ; | 
| 75 |  |  |  |  |  |  |  | 
| 76 | 1143 |  |  |  |  | 2681 | my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Inflate::mkUncompObject( | 
| 77 |  |  |  |  |  |  | $got->getValue('crc32'), | 
| 78 |  |  |  |  |  |  | $got->getValue('adler32'), | 
| 79 |  |  |  |  |  |  | $got->getValue('scan'), | 
| 80 |  |  |  |  |  |  | ); | 
| 81 |  |  |  |  |  |  |  | 
| 82 | 1143 | 50 |  |  |  | 3202 | return $self->saveErrorString(undef, $errstr, $errno) | 
| 83 |  |  |  |  |  |  | if ! defined $obj; | 
| 84 |  |  |  |  |  |  |  | 
| 85 | 1143 |  |  |  |  | 2755 | *$self->{Uncomp} = $obj; | 
| 86 |  |  |  |  |  |  |  | 
| 87 | 1143 | 100 |  |  |  | 3961 | my $magic = $self->ckMagic() | 
| 88 |  |  |  |  |  |  | or return 0; | 
| 89 |  |  |  |  |  |  |  | 
| 90 | 967 | 100 |  |  |  | 2767 | *$self->{Info} = $self->readHeader($magic) | 
| 91 |  |  |  |  |  |  | or return undef ; | 
| 92 |  |  |  |  |  |  |  | 
| 93 | 942 |  |  |  |  | 3075 | return 1; | 
| 94 |  |  |  |  |  |  |  | 
| 95 |  |  |  |  |  |  | } | 
| 96 |  |  |  |  |  |  |  | 
| 97 |  |  |  |  |  |  |  | 
| 98 |  |  |  |  |  |  | sub ckMagic | 
| 99 |  |  |  |  |  |  | { | 
| 100 | 2096 |  |  | 2096 | 0 | 3482 | my $self = shift; | 
| 101 |  |  |  |  |  |  |  | 
| 102 | 2096 |  |  |  |  | 4467 | return $self->_isRaw() ; | 
| 103 |  |  |  |  |  |  | } | 
| 104 |  |  |  |  |  |  |  | 
| 105 |  |  |  |  |  |  | sub readHeader | 
| 106 |  |  |  |  |  |  | { | 
| 107 | 883 |  |  | 883 | 0 | 1353 | my $self = shift; | 
| 108 | 883 |  |  |  |  | 1277 | my $magic = shift ; | 
| 109 |  |  |  |  |  |  |  | 
| 110 |  |  |  |  |  |  | return { | 
| 111 | 883 |  |  |  |  | 4097 | 'Type'          => 'rfc1951', | 
| 112 |  |  |  |  |  |  | 'FingerprintLength'  => 0, | 
| 113 |  |  |  |  |  |  | 'HeaderLength'  => 0, | 
| 114 |  |  |  |  |  |  | 'TrailerLength' => 0, | 
| 115 |  |  |  |  |  |  | 'Header'        => '' | 
| 116 |  |  |  |  |  |  | }; | 
| 117 |  |  |  |  |  |  | } | 
| 118 |  |  |  |  |  |  |  | 
| 119 |  |  |  |  |  |  | sub chkTrailer | 
| 120 |  |  |  |  |  |  | { | 
| 121 | 4 |  |  | 4 | 0 | 18 | return STATUS_OK ; | 
| 122 |  |  |  |  |  |  | } | 
| 123 |  |  |  |  |  |  |  | 
| 124 |  |  |  |  |  |  | sub _isRaw | 
| 125 |  |  |  |  |  |  | { | 
| 126 | 2096 |  |  | 2096 |  | 3065 | my $self   = shift ; | 
| 127 |  |  |  |  |  |  |  | 
| 128 | 2096 |  |  |  |  | 4795 | my $got = $self->_isRawx(@_); | 
| 129 |  |  |  |  |  |  |  | 
| 130 | 2096 | 100 |  |  |  | 4478 | if ($got) { | 
| 131 | 883 |  |  |  |  | 1813 | *$self->{Pending} = *$self->{HeaderPending} ; | 
| 132 |  |  |  |  |  |  | } | 
| 133 |  |  |  |  |  |  | else { | 
| 134 | 1213 |  |  |  |  | 3906 | $self->pushBack(*$self->{HeaderPending}); | 
| 135 | 1213 |  |  |  |  | 3431 | *$self->{Uncomp}->reset(); | 
| 136 |  |  |  |  |  |  | } | 
| 137 | 2096 |  |  |  |  | 3867 | *$self->{HeaderPending} = ''; | 
| 138 |  |  |  |  |  |  |  | 
| 139 | 2096 |  |  |  |  | 5369 | return $got ; | 
| 140 |  |  |  |  |  |  | } | 
| 141 |  |  |  |  |  |  |  | 
| 142 |  |  |  |  |  |  | sub _isRawx | 
| 143 |  |  |  |  |  |  | { | 
| 144 | 2096 |  |  | 2096 |  | 3059 | my $self   = shift ; | 
| 145 | 2096 |  |  |  |  | 3091 | my $magic = shift ; | 
| 146 |  |  |  |  |  |  |  | 
| 147 | 2096 | 50 |  |  |  | 5109 | $magic = '' unless defined $magic ; | 
| 148 |  |  |  |  |  |  |  | 
| 149 | 2096 |  |  |  |  | 3381 | my $buffer = ''; | 
| 150 |  |  |  |  |  |  |  | 
| 151 | 2096 | 50 |  |  |  | 7202 | $self->smartRead(\$buffer, *$self->{BlockSize}) >= 0 | 
| 152 |  |  |  |  |  |  | or return $self->saveErrorString(undef, "No data to read"); | 
| 153 |  |  |  |  |  |  |  | 
| 154 | 2096 |  |  |  |  | 5162 | my $temp_buf = $magic . $buffer ; | 
| 155 | 2096 |  |  |  |  | 4689 | *$self->{HeaderPending} = $temp_buf ; | 
| 156 | 2096 |  |  |  |  | 3342 | $buffer = ''; | 
| 157 | 2096 |  |  |  |  | 6233 | my $status = *$self->{Uncomp}->uncompr(\$temp_buf, \$buffer, $self->smartEof()) ; | 
| 158 |  |  |  |  |  |  |  | 
| 159 | 2096 | 100 |  |  |  | 10531 | return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, STATUS_ERROR) | 
| 160 |  |  |  |  |  |  | if $status == STATUS_ERROR; | 
| 161 |  |  |  |  |  |  |  | 
| 162 | 920 |  |  |  |  | 2838 | $self->pushBack($temp_buf)  ; | 
| 163 |  |  |  |  |  |  |  | 
| 164 | 920 | 100 | 100 |  |  | 2197 | return $self->saveErrorString(undef, "unexpected end of file", STATUS_ERROR) | 
| 165 |  |  |  |  |  |  | if $self->smartEof() && $status != STATUS_ENDSTREAM; | 
| 166 |  |  |  |  |  |  |  | 
| 167 |  |  |  |  |  |  | #my $buf_len = *$self->{Uncomp}->uncompressedBytes(); | 
| 168 | 883 |  |  |  |  | 1680 | my $buf_len = length $buffer; | 
| 169 |  |  |  |  |  |  |  | 
| 170 | 883 | 100 |  |  |  | 1823 | if ($status == STATUS_ENDSTREAM) { | 
| 171 | 876 | 100 | 66 |  |  | 2879 | if (*$self->{MultiStream} | 
|  |  |  | 100 |  |  |  |  | 
| 172 |  |  |  |  |  |  | && (length $temp_buf || ! $self->smartEof())){ | 
| 173 | 234 |  |  |  |  | 457 | *$self->{NewStream} = 1 ; | 
| 174 | 234 |  |  |  |  | 407 | *$self->{EndStream} = 0 ; | 
| 175 |  |  |  |  |  |  | } | 
| 176 |  |  |  |  |  |  | else { | 
| 177 | 642 |  |  |  |  | 1215 | *$self->{EndStream} = 1 ; | 
| 178 |  |  |  |  |  |  | } | 
| 179 |  |  |  |  |  |  | } | 
| 180 | 883 |  |  |  |  | 1867 | *$self->{HeaderPending} = $buffer ; | 
| 181 | 883 |  |  |  |  | 1429 | *$self->{InflatedBytesRead} = $buf_len ; | 
| 182 | 883 |  |  |  |  | 1426 | *$self->{TotalInflatedBytesRead} += $buf_len ; | 
| 183 | 883 |  |  |  |  | 1514 | *$self->{Type} = 'rfc1951'; | 
| 184 |  |  |  |  |  |  |  | 
| 185 | 883 |  |  |  |  | 2556 | $self->saveStatus(STATUS_OK); | 
| 186 |  |  |  |  |  |  |  | 
| 187 |  |  |  |  |  |  | return { | 
| 188 | 883 |  |  |  |  | 3661 | 'Type'          => 'rfc1951', | 
| 189 |  |  |  |  |  |  | 'HeaderLength'  => 0, | 
| 190 |  |  |  |  |  |  | 'TrailerLength' => 0, | 
| 191 |  |  |  |  |  |  | 'Header'        => '' | 
| 192 |  |  |  |  |  |  | }; | 
| 193 |  |  |  |  |  |  | } | 
| 194 |  |  |  |  |  |  |  | 
| 195 |  |  |  |  |  |  |  | 
| 196 |  |  |  |  |  |  | sub inflateSync | 
| 197 |  |  |  |  |  |  | { | 
| 198 | 16 |  |  | 16 | 1 | 830 | my $self = shift ; | 
| 199 |  |  |  |  |  |  |  | 
| 200 |  |  |  |  |  |  | # inflateSync is a no-op in Plain mode | 
| 201 |  |  |  |  |  |  | return 1 | 
| 202 | 16 | 100 |  |  |  | 79 | if *$self->{Plain} ; | 
| 203 |  |  |  |  |  |  |  | 
| 204 | 12 | 100 |  |  |  | 50 | return 0 if *$self->{Closed} ; | 
| 205 |  |  |  |  |  |  | #return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; | 
| 206 | 8 | 0 | 33 |  |  | 32 | return 0 if ! length *$self->{Pending} && *$self->{EndStream} ; | 
| 207 |  |  |  |  |  |  |  | 
| 208 |  |  |  |  |  |  | # Disable CRC check | 
| 209 | 8 |  |  |  |  | 19 | *$self->{Strict} = 0 ; | 
| 210 |  |  |  |  |  |  |  | 
| 211 | 8 |  |  |  |  | 14 | my $status ; | 
| 212 | 8 |  |  |  |  | 15 | while (1) | 
| 213 |  |  |  |  |  |  | { | 
| 214 | 1188 |  |  |  |  | 1531 | my $temp_buf ; | 
| 215 |  |  |  |  |  |  |  | 
| 216 | 1188 | 100 |  |  |  | 2011 | if (length *$self->{Pending} ) | 
| 217 |  |  |  |  |  |  | { | 
| 218 | 8 |  |  |  |  | 32 | $temp_buf = *$self->{Pending} ; | 
| 219 | 8 |  |  |  |  | 23 | *$self->{Pending} = ''; | 
| 220 |  |  |  |  |  |  | } | 
| 221 |  |  |  |  |  |  | else | 
| 222 |  |  |  |  |  |  | { | 
| 223 | 1180 |  |  |  |  | 2407 | $status = $self->smartRead(\$temp_buf, *$self->{BlockSize}) ; | 
| 224 | 1180 | 50 |  |  |  | 2286 | return $self->saveErrorString(0, "Error Reading Data") | 
| 225 |  |  |  |  |  |  | if $status < 0  ; | 
| 226 |  |  |  |  |  |  |  | 
| 227 | 1180 | 100 |  |  |  | 2052 | if ($status == 0 ) { | 
| 228 | 4 |  |  |  |  | 25 | *$self->{EndStream} = 1 ; | 
| 229 | 4 |  |  |  |  | 19 | return $self->saveErrorString(0, "unexpected end of file", STATUS_ERROR); | 
| 230 |  |  |  |  |  |  | } | 
| 231 |  |  |  |  |  |  | } | 
| 232 |  |  |  |  |  |  |  | 
| 233 | 1184 |  |  |  |  | 2299 | $status = *$self->{Uncomp}->sync($temp_buf) ; | 
| 234 |  |  |  |  |  |  |  | 
| 235 | 1184 | 100 |  |  |  | 5039 | if ($status == STATUS_OK) | 
| 236 |  |  |  |  |  |  | { | 
| 237 | 4 |  |  |  |  | 19 | *$self->{Pending} .= $temp_buf ; | 
| 238 | 4 |  |  |  |  | 25 | return 1 ; | 
| 239 |  |  |  |  |  |  | } | 
| 240 |  |  |  |  |  |  |  | 
| 241 | 1180 | 50 |  |  |  | 2085 | last unless $status == STATUS_ERROR ; | 
| 242 |  |  |  |  |  |  | } | 
| 243 |  |  |  |  |  |  |  | 
| 244 | 0 |  |  |  |  | 0 | return 0; | 
| 245 |  |  |  |  |  |  | } | 
| 246 |  |  |  |  |  |  |  | 
| 247 |  |  |  |  |  |  | #sub performScan | 
| 248 |  |  |  |  |  |  | #{ | 
| 249 |  |  |  |  |  |  | #    my $self = shift ; | 
| 250 |  |  |  |  |  |  | # | 
| 251 |  |  |  |  |  |  | #    my $status ; | 
| 252 |  |  |  |  |  |  | #    my $end_offset = 0; | 
| 253 |  |  |  |  |  |  | # | 
| 254 |  |  |  |  |  |  | #    $status = $self->scan() | 
| 255 |  |  |  |  |  |  | #    #or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $self->errorNo) ; | 
| 256 |  |  |  |  |  |  | #        or return $self->saveErrorString(G_ERR, "Error Scanning: $status") | 
| 257 |  |  |  |  |  |  | # | 
| 258 |  |  |  |  |  |  | #    $status = $self->zap($end_offset) | 
| 259 |  |  |  |  |  |  | #        or return $self->saveErrorString(G_ERR, "Error Zapping: $status"); | 
| 260 |  |  |  |  |  |  | #    #or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $self->errorNo) ; | 
| 261 |  |  |  |  |  |  | # | 
| 262 |  |  |  |  |  |  | #    #(*$obj->{Deflate}, $status) = $inf->createDeflate(); | 
| 263 |  |  |  |  |  |  | # | 
| 264 |  |  |  |  |  |  | ##    *$obj->{Header} = *$inf->{Info}{Header}; | 
| 265 |  |  |  |  |  |  | ##    *$obj->{UnCompSize_32bit} = | 
| 266 |  |  |  |  |  |  | ##        *$obj->{BytesWritten} = *$inf->{UnCompSize_32bit} ; | 
| 267 |  |  |  |  |  |  | ##    *$obj->{CompSize_32bit} = *$inf->{CompSize_32bit} ; | 
| 268 |  |  |  |  |  |  | # | 
| 269 |  |  |  |  |  |  | # | 
| 270 |  |  |  |  |  |  | ##    if ( $outType eq 'buffer') | 
| 271 |  |  |  |  |  |  | ##      { substr( ${ *$self->{Buffer} }, $end_offset) = '' } | 
| 272 |  |  |  |  |  |  | ##    elsif ($outType eq 'handle' || $outType eq 'filename') { | 
| 273 |  |  |  |  |  |  | ##        *$self->{FH} = *$inf->{FH} ; | 
| 274 |  |  |  |  |  |  | ##        delete *$inf->{FH}; | 
| 275 |  |  |  |  |  |  | ##        *$obj->{FH}->flush() ; | 
| 276 |  |  |  |  |  |  | ##        *$obj->{Handle} = 1 if $outType eq 'handle'; | 
| 277 |  |  |  |  |  |  | ## | 
| 278 |  |  |  |  |  |  | ##        #seek(*$obj->{FH}, $end_offset, SEEK_SET) | 
| 279 |  |  |  |  |  |  | ##        *$obj->{FH}->seek($end_offset, SEEK_SET) | 
| 280 |  |  |  |  |  |  | ##            or return $obj->saveErrorString(undef, $!, $!) ; | 
| 281 |  |  |  |  |  |  | ##    } | 
| 282 |  |  |  |  |  |  | # | 
| 283 |  |  |  |  |  |  | #} | 
| 284 |  |  |  |  |  |  |  | 
| 285 |  |  |  |  |  |  | sub scan | 
| 286 |  |  |  |  |  |  | { | 
| 287 | 60 |  |  | 60 | 0 | 94 | my $self = shift ; | 
| 288 |  |  |  |  |  |  |  | 
| 289 | 60 | 50 |  |  |  | 152 | return 1 if *$self->{Closed} ; | 
| 290 | 60 | 50 | 33 |  |  | 333 | return 1 if !length *$self->{Pending} && *$self->{EndStream} ; | 
| 291 |  |  |  |  |  |  |  | 
| 292 | 0 |  |  |  |  | 0 | my $buffer = '' ; | 
| 293 | 0 |  |  |  |  | 0 | my $len = 0; | 
| 294 |  |  |  |  |  |  |  | 
| 295 |  |  |  |  |  |  | $len = $self->_raw_read(\$buffer, 1) | 
| 296 | 0 |  | 0 |  |  | 0 | while ! *$self->{EndStream} && $len >= 0 ; | 
| 297 |  |  |  |  |  |  |  | 
| 298 |  |  |  |  |  |  | #return $len if $len < 0 ? $len : 0 ; | 
| 299 | 0 | 0 |  |  |  | 0 | return $len < 0 ? 0 : 1 ; | 
| 300 |  |  |  |  |  |  | } | 
| 301 |  |  |  |  |  |  |  | 
| 302 |  |  |  |  |  |  | sub zap | 
| 303 |  |  |  |  |  |  | { | 
| 304 | 60 |  |  | 60 | 0 | 81 | my $self  = shift ; | 
| 305 |  |  |  |  |  |  |  | 
| 306 | 60 |  |  |  |  | 137 | my $headerLength = *$self->{Info}{HeaderLength}; | 
| 307 | 60 |  |  |  |  | 207 | my $block_offset =  $headerLength + *$self->{Uncomp}->getLastBlockOffset(); | 
| 308 | 60 |  |  |  |  | 170 | $_[0] = $headerLength + *$self->{Uncomp}->getEndOffset(); | 
| 309 |  |  |  |  |  |  | #printf "# End $_[0], headerlen $headerLength \n";; | 
| 310 |  |  |  |  |  |  | #printf "# block_offset $block_offset %x\n", $block_offset; | 
| 311 | 60 |  |  |  |  | 102 | my $byte ; | 
| 312 | 60 | 50 | 33 |  |  | 174 | ( $self->smartSeek($block_offset) && | 
| 313 |  |  |  |  |  |  | $self->smartRead(\$byte, 1) ) | 
| 314 |  |  |  |  |  |  | or return $self->saveErrorString(0, $!, $!); | 
| 315 |  |  |  |  |  |  |  | 
| 316 |  |  |  |  |  |  | #printf "#byte is %x\n", unpack('C*',$byte); | 
| 317 | 60 |  |  |  |  | 253 | *$self->{Uncomp}->resetLastBlockByte($byte); | 
| 318 |  |  |  |  |  |  | #printf "#to byte is %x\n", unpack('C*',$byte); | 
| 319 |  |  |  |  |  |  |  | 
| 320 | 60 | 50 | 33 |  |  | 185 | ( $self->smartSeek($block_offset) && | 
| 321 |  |  |  |  |  |  | $self->smartWrite($byte) ) | 
| 322 |  |  |  |  |  |  | or return $self->saveErrorString(0, $!, $!); | 
| 323 |  |  |  |  |  |  |  | 
| 324 |  |  |  |  |  |  | #$self->smartSeek($end_offset, 1); | 
| 325 |  |  |  |  |  |  |  | 
| 326 | 60 |  |  |  |  | 1754 | return 1 ; | 
| 327 |  |  |  |  |  |  | } | 
| 328 |  |  |  |  |  |  |  | 
| 329 |  |  |  |  |  |  | sub createDeflate | 
| 330 |  |  |  |  |  |  | { | 
| 331 | 60 |  |  | 60 | 0 | 102 | my $self  = shift ; | 
| 332 |  |  |  |  |  |  | my ($def, $status) = *$self->{Uncomp}->createDeflateStream( | 
| 333 |  |  |  |  |  |  | -AppendOutput   => 1, | 
| 334 |  |  |  |  |  |  | -WindowBits => - MAX_WBITS, | 
| 335 |  |  |  |  |  |  | -CRC32      => *$self->{Params}->getValue('crc32'), | 
| 336 | 60 |  |  |  |  | 208 | -ADLER32    => *$self->{Params}->getValue('adler32'), | 
| 337 |  |  |  |  |  |  | ); | 
| 338 |  |  |  |  |  |  |  | 
| 339 | 60 | 50 |  |  |  | 411 | return wantarray ? ($status, $def) : $def ; | 
| 340 |  |  |  |  |  |  | } | 
| 341 |  |  |  |  |  |  |  | 
| 342 |  |  |  |  |  |  |  | 
| 343 |  |  |  |  |  |  | 1; | 
| 344 |  |  |  |  |  |  |  | 
| 345 |  |  |  |  |  |  | __END__ |