1package IO::Uncompress::Inflate ; 2# for RFC1950 3 4use strict ; 5use warnings; 6use bytes; 7 8use IO::Compress::Base::Common 2.074 qw(:Status ); 9use IO::Compress::Zlib::Constants 2.074 ; 10 11use IO::Uncompress::RawInflate 2.074 ; 12 13require Exporter ; 14our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $InflateError); 15 16$VERSION = '2.074'; 17$InflateError = ''; 18 19@ISA = qw(IO::Uncompress::RawInflate Exporter); 20@EXPORT_OK = qw( $InflateError inflate ) ; 21%EXPORT_TAGS = %IO::Uncompress::RawInflate::DEFLATE_CONSTANTS ; 22push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; 23Exporter::export_ok_tags('all'); 24 25 26sub new 27{ 28 my $class = shift ; 29 my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$InflateError); 30 31 $obj->_create(undef, 0, @_); 32} 33 34sub inflate 35{ 36 my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$InflateError); 37 return $obj->_inf(@_); 38} 39 40sub getExtraParams 41{ 42 return (); 43} 44 45sub ckParams 46{ 47 my $self = shift ; 48 my $got = shift ; 49 50 # gunzip always needs adler32 51 $got->setValue('adler32' => 1); 52 53 return 1; 54} 55 56sub ckMagic 57{ 58 my $self = shift; 59 60 my $magic ; 61 $self->smartReadExact(\$magic, ZLIB_HEADER_SIZE); 62 63 *$self->{HeaderPending} = $magic ; 64 65 return $self->HeaderError("Header size is " . 66 ZLIB_HEADER_SIZE . " bytes") 67 if length $magic != ZLIB_HEADER_SIZE; 68 69 #return $self->HeaderError("CRC mismatch.") 70 return undef 71 if ! $self->isZlibMagic($magic) ; 72 73 *$self->{Type} = 'rfc1950'; 74 return $magic; 75} 76 77sub readHeader 78{ 79 my $self = shift; 80 my $magic = shift ; 81 82 return $self->_readDeflateHeader($magic) ; 83} 84 85sub chkTrailer 86{ 87 my $self = shift; 88 my $trailer = shift; 89 90 my $ADLER32 = unpack("N", $trailer) ; 91 *$self->{Info}{ADLER32} = $ADLER32; 92 return $self->TrailerError("CRC mismatch") 93 if *$self->{Strict} && $ADLER32 != *$self->{Uncomp}->adler32() ; 94 95 return STATUS_OK; 96} 97 98 99 100sub isZlibMagic 101{ 102 my $self = shift; 103 my $buffer = shift ; 104 105 return 0 106 if length $buffer < ZLIB_HEADER_SIZE ; 107 108 my $hdr = unpack("n", $buffer) ; 109 #return 0 if $hdr % 31 != 0 ; 110 return $self->HeaderError("CRC mismatch.") 111 if $hdr % 31 != 0 ; 112 113 my ($CMF, $FLG) = unpack "C C", $buffer; 114 my $cm = bits($CMF, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS) ; 115 116 # Only Deflate supported 117 return $self->HeaderError("Not Deflate (CM is $cm)") 118 if $cm != ZLIB_CMF_CM_DEFLATED ; 119 120 # Max window value is 7 for Deflate. 121 my $cinfo = bits($CMF, ZLIB_CMF_CINFO_OFFSET, ZLIB_CMF_CINFO_BITS) ; 122 return $self->HeaderError("CINFO > " . ZLIB_CMF_CINFO_MAX . 123 " (CINFO is $cinfo)") 124 if $cinfo > ZLIB_CMF_CINFO_MAX ; 125 126 return 1; 127} 128 129sub bits 130{ 131 my $data = shift ; 132 my $offset = shift ; 133 my $mask = shift ; 134 135 ($data >> $offset ) & $mask & 0xFF ; 136} 137 138 139sub _readDeflateHeader 140{ 141 my ($self, $buffer) = @_ ; 142 143# if (! $buffer) { 144# $self->smartReadExact(\$buffer, ZLIB_HEADER_SIZE); 145# 146# *$self->{HeaderPending} = $buffer ; 147# 148# return $self->HeaderError("Header size is " . 149# ZLIB_HEADER_SIZE . " bytes") 150# if length $buffer != ZLIB_HEADER_SIZE; 151# 152# return $self->HeaderError("CRC mismatch.") 153# if ! isZlibMagic($buffer) ; 154# } 155 156 my ($CMF, $FLG) = unpack "C C", $buffer; 157 my $FDICT = bits($FLG, ZLIB_FLG_FDICT_OFFSET, ZLIB_FLG_FDICT_BITS ), 158 159 my $cm = bits($CMF, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS) ; 160 $cm == ZLIB_CMF_CM_DEFLATED 161 or return $self->HeaderError("Not Deflate (CM is $cm)") ; 162 163 my $DICTID; 164 if ($FDICT) { 165 $self->smartReadExact(\$buffer, ZLIB_FDICT_SIZE) 166 or return $self->TruncatedHeader("FDICT"); 167 168 $DICTID = unpack("N", $buffer) ; 169 } 170 171 *$self->{Type} = 'rfc1950'; 172 173 return { 174 'Type' => 'rfc1950', 175 'FingerprintLength' => ZLIB_HEADER_SIZE, 176 'HeaderLength' => ZLIB_HEADER_SIZE, 177 'TrailerLength' => ZLIB_TRAILER_SIZE, 178 'Header' => $buffer, 179 180 CMF => $CMF , 181 CM => bits($CMF, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS ), 182 CINFO => bits($CMF, ZLIB_CMF_CINFO_OFFSET, ZLIB_CMF_CINFO_BITS ), 183 FLG => $FLG , 184 FCHECK => bits($FLG, ZLIB_FLG_FCHECK_OFFSET, ZLIB_FLG_FCHECK_BITS), 185 FDICT => bits($FLG, ZLIB_FLG_FDICT_OFFSET, ZLIB_FLG_FDICT_BITS ), 186 FLEVEL => bits($FLG, ZLIB_FLG_LEVEL_OFFSET, ZLIB_FLG_LEVEL_BITS ), 187 DICTID => $DICTID , 188 189 }; 190} 191 192 193 194 1951 ; 196 197__END__ 198 199 200=head1 NAME 201 202IO::Uncompress::Inflate - Read RFC 1950 files/buffers 203 204=head1 SYNOPSIS 205 206 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 207 208 my $status = inflate $input => $output [,OPTS] 209 or die "inflate failed: $InflateError\n"; 210 211 my $z = new IO::Uncompress::Inflate $input [OPTS] 212 or die "inflate failed: $InflateError\n"; 213 214 $status = $z->read($buffer) 215 $status = $z->read($buffer, $length) 216 $status = $z->read($buffer, $length, $offset) 217 $line = $z->getline() 218 $char = $z->getc() 219 $char = $z->ungetc() 220 $char = $z->opened() 221 222 $status = $z->inflateSync() 223 224 $data = $z->trailingData() 225 $status = $z->nextStream() 226 $data = $z->getHeaderInfo() 227 $z->tell() 228 $z->seek($position, $whence) 229 $z->binmode() 230 $z->fileno() 231 $z->eof() 232 $z->close() 233 234 $InflateError ; 235 236 # IO::File mode 237 238 <$z> 239 read($z, $buffer); 240 read($z, $buffer, $length); 241 read($z, $buffer, $length, $offset); 242 tell($z) 243 seek($z, $position, $whence) 244 binmode($z) 245 fileno($z) 246 eof($z) 247 close($z) 248 249=head1 DESCRIPTION 250 251This module provides a Perl interface that allows the reading of 252files/buffers that conform to RFC 1950. 253 254For writing RFC 1950 files/buffers, see the companion module IO::Compress::Deflate. 255 256=head1 Functional Interface 257 258A top-level function, C<inflate>, is provided to carry out 259"one-shot" uncompression between buffers and/or files. For finer 260control over the uncompression process, see the L</"OO Interface"> 261section. 262 263 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 264 265 inflate $input_filename_or_reference => $output_filename_or_reference [,OPTS] 266 or die "inflate failed: $InflateError\n"; 267 268The functional interface needs Perl5.005 or better. 269 270=head2 inflate $input_filename_or_reference => $output_filename_or_reference [, OPTS] 271 272C<inflate> expects at least two parameters, 273C<$input_filename_or_reference> and C<$output_filename_or_reference>. 274 275=head3 The C<$input_filename_or_reference> parameter 276 277The parameter, C<$input_filename_or_reference>, is used to define the 278source of the compressed data. 279 280It can take one of the following forms: 281 282=over 5 283 284=item A filename 285 286If the <$input_filename_or_reference> parameter is a simple scalar, it is 287assumed to be a filename. This file will be opened for reading and the 288input data will be read from it. 289 290=item A filehandle 291 292If the C<$input_filename_or_reference> parameter is a filehandle, the input 293data will be read from it. The string '-' can be used as an alias for 294standard input. 295 296=item A scalar reference 297 298If C<$input_filename_or_reference> is a scalar reference, the input data 299will be read from C<$$input_filename_or_reference>. 300 301=item An array reference 302 303If C<$input_filename_or_reference> is an array reference, each element in 304the array must be a filename. 305 306The input data will be read from each file in turn. 307 308The complete array will be walked to ensure that it only 309contains valid filenames before any data is uncompressed. 310 311=item An Input FileGlob string 312 313If C<$input_filename_or_reference> is a string that is delimited by the 314characters "<" and ">" C<inflate> will assume that it is an 315I<input fileglob string>. The input is the list of files that match the 316fileglob. 317 318See L<File::GlobMapper|File::GlobMapper> for more details. 319 320=back 321 322If the C<$input_filename_or_reference> parameter is any other type, 323C<undef> will be returned. 324 325=head3 The C<$output_filename_or_reference> parameter 326 327The parameter C<$output_filename_or_reference> is used to control the 328destination of the uncompressed data. This parameter can take one of 329these forms. 330 331=over 5 332 333=item A filename 334 335If the C<$output_filename_or_reference> parameter is a simple scalar, it is 336assumed to be a filename. This file will be opened for writing and the 337uncompressed data will be written to it. 338 339=item A filehandle 340 341If the C<$output_filename_or_reference> parameter is a filehandle, the 342uncompressed data will be written to it. The string '-' can be used as 343an alias for standard output. 344 345=item A scalar reference 346 347If C<$output_filename_or_reference> is a scalar reference, the 348uncompressed data will be stored in C<$$output_filename_or_reference>. 349 350=item An Array Reference 351 352If C<$output_filename_or_reference> is an array reference, 353the uncompressed data will be pushed onto the array. 354 355=item An Output FileGlob 356 357If C<$output_filename_or_reference> is a string that is delimited by the 358characters "<" and ">" C<inflate> will assume that it is an 359I<output fileglob string>. The output is the list of files that match the 360fileglob. 361 362When C<$output_filename_or_reference> is an fileglob string, 363C<$input_filename_or_reference> must also be a fileglob string. Anything 364else is an error. 365 366See L<File::GlobMapper|File::GlobMapper> for more details. 367 368=back 369 370If the C<$output_filename_or_reference> parameter is any other type, 371C<undef> will be returned. 372 373=head2 Notes 374 375When C<$input_filename_or_reference> maps to multiple compressed 376files/buffers and C<$output_filename_or_reference> is 377a single file/buffer, after uncompression C<$output_filename_or_reference> will contain a 378concatenation of all the uncompressed data from each of the input 379files/buffers. 380 381=head2 Optional Parameters 382 383Unless specified below, the optional parameters for C<inflate>, 384C<OPTS>, are the same as those used with the OO interface defined in the 385L</"Constructor Options"> section below. 386 387=over 5 388 389=item C<< AutoClose => 0|1 >> 390 391This option applies to any input or output data streams to 392C<inflate> that are filehandles. 393 394If C<AutoClose> is specified, and the value is true, it will result in all 395input and/or output filehandles being closed once C<inflate> has 396completed. 397 398This parameter defaults to 0. 399 400=item C<< BinModeOut => 0|1 >> 401 402When writing to a file or filehandle, set C<binmode> before writing to the 403file. 404 405Defaults to 0. 406 407=item C<< Append => 0|1 >> 408 409The behaviour of this option is dependent on the type of output data 410stream. 411 412=over 5 413 414=item * A Buffer 415 416If C<Append> is enabled, all uncompressed data will be append to the end of 417the output buffer. Otherwise the output buffer will be cleared before any 418uncompressed data is written to it. 419 420=item * A Filename 421 422If C<Append> is enabled, the file will be opened in append mode. Otherwise 423the contents of the file, if any, will be truncated before any uncompressed 424data is written to it. 425 426=item * A Filehandle 427 428If C<Append> is enabled, the filehandle will be positioned to the end of 429the file via a call to C<seek> before any uncompressed data is 430written to it. Otherwise the file pointer will not be moved. 431 432=back 433 434When C<Append> is specified, and set to true, it will I<append> all uncompressed 435data to the output data stream. 436 437So when the output is a filehandle it will carry out a seek to the eof 438before writing any uncompressed data. If the output is a filename, it will be opened for 439appending. If the output is a buffer, all uncompressed data will be 440appended to the existing buffer. 441 442Conversely when C<Append> is not specified, or it is present and is set to 443false, it will operate as follows. 444 445When the output is a filename, it will truncate the contents of the file 446before writing any uncompressed data. If the output is a filehandle 447its position will not be changed. If the output is a buffer, it will be 448wiped before any uncompressed data is output. 449 450Defaults to 0. 451 452=item C<< MultiStream => 0|1 >> 453 454If the input file/buffer contains multiple compressed data streams, this 455option will uncompress the whole lot as a single data stream. 456 457Defaults to 0. 458 459=item C<< TrailingData => $scalar >> 460 461Returns the data, if any, that is present immediately after the compressed 462data stream once uncompression is complete. 463 464This option can be used when there is useful information immediately 465following the compressed data stream, and you don't know the length of the 466compressed data stream. 467 468If the input is a buffer, C<trailingData> will return everything from the 469end of the compressed data stream to the end of the buffer. 470 471If the input is a filehandle, C<trailingData> will return the data that is 472left in the filehandle input buffer once the end of the compressed data 473stream has been reached. You can then use the filehandle to read the rest 474of the input file. 475 476Don't bother using C<trailingData> if the input is a filename. 477 478If you know the length of the compressed data stream before you start 479uncompressing, you can avoid having to use C<trailingData> by setting the 480C<InputLength> option. 481 482=back 483 484=head2 Examples 485 486To read the contents of the file C<file1.txt.1950> and write the 487uncompressed data to the file C<file1.txt>. 488 489 use strict ; 490 use warnings ; 491 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 492 493 my $input = "file1.txt.1950"; 494 my $output = "file1.txt"; 495 inflate $input => $output 496 or die "inflate failed: $InflateError\n"; 497 498To read from an existing Perl filehandle, C<$input>, and write the 499uncompressed data to a buffer, C<$buffer>. 500 501 use strict ; 502 use warnings ; 503 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 504 use IO::File ; 505 506 my $input = new IO::File "<file1.txt.1950" 507 or die "Cannot open 'file1.txt.1950': $!\n" ; 508 my $buffer ; 509 inflate $input => \$buffer 510 or die "inflate failed: $InflateError\n"; 511 512To uncompress all files in the directory "/my/home" that match "*.txt.1950" and store the compressed data in the same directory 513 514 use strict ; 515 use warnings ; 516 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 517 518 inflate '</my/home/*.txt.1950>' => '</my/home/#1.txt>' 519 or die "inflate failed: $InflateError\n"; 520 521and if you want to compress each file one at a time, this will do the trick 522 523 use strict ; 524 use warnings ; 525 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 526 527 for my $input ( glob "/my/home/*.txt.1950" ) 528 { 529 my $output = $input; 530 $output =~ s/.1950// ; 531 inflate $input => $output 532 or die "Error compressing '$input': $InflateError\n"; 533 } 534 535=head1 OO Interface 536 537=head2 Constructor 538 539The format of the constructor for IO::Uncompress::Inflate is shown below 540 541 my $z = new IO::Uncompress::Inflate $input [OPTS] 542 or die "IO::Uncompress::Inflate failed: $InflateError\n"; 543 544Returns an C<IO::Uncompress::Inflate> object on success and undef on failure. 545The variable C<$InflateError> will contain an error message on failure. 546 547If you are running Perl 5.005 or better the object, C<$z>, returned from 548IO::Uncompress::Inflate can be used exactly like an L<IO::File|IO::File> filehandle. 549This means that all normal input file operations can be carried out with 550C<$z>. For example, to read a line from a compressed file/buffer you can 551use either of these forms 552 553 $line = $z->getline(); 554 $line = <$z>; 555 556The mandatory parameter C<$input> is used to determine the source of the 557compressed data. This parameter can take one of three forms. 558 559=over 5 560 561=item A filename 562 563If the C<$input> parameter is a scalar, it is assumed to be a filename. This 564file will be opened for reading and the compressed data will be read from it. 565 566=item A filehandle 567 568If the C<$input> parameter is a filehandle, the compressed data will be 569read from it. 570The string '-' can be used as an alias for standard input. 571 572=item A scalar reference 573 574If C<$input> is a scalar reference, the compressed data will be read from 575C<$$input>. 576 577=back 578 579=head2 Constructor Options 580 581The option names defined below are case insensitive and can be optionally 582prefixed by a '-'. So all of the following are valid 583 584 -AutoClose 585 -autoclose 586 AUTOCLOSE 587 autoclose 588 589OPTS is a combination of the following options: 590 591=over 5 592 593=item C<< AutoClose => 0|1 >> 594 595This option is only valid when the C<$input> parameter is a filehandle. If 596specified, and the value is true, it will result in the file being closed once 597either the C<close> method is called or the IO::Uncompress::Inflate object is 598destroyed. 599 600This parameter defaults to 0. 601 602=item C<< MultiStream => 0|1 >> 603 604Allows multiple concatenated compressed streams to be treated as a single 605compressed stream. Decompression will stop once either the end of the 606file/buffer is reached, an error is encountered (premature eof, corrupt 607compressed data) or the end of a stream is not immediately followed by the 608start of another stream. 609 610This parameter defaults to 0. 611 612=item C<< Prime => $string >> 613 614This option will uncompress the contents of C<$string> before processing the 615input file/buffer. 616 617This option can be useful when the compressed data is embedded in another 618file/data structure and it is not possible to work out where the compressed 619data begins without having to read the first few bytes. If this is the 620case, the uncompression can be I<primed> with these bytes using this 621option. 622 623=item C<< Transparent => 0|1 >> 624 625If this option is set and the input file/buffer is not compressed data, 626the module will allow reading of it anyway. 627 628In addition, if the input file/buffer does contain compressed data and 629there is non-compressed data immediately following it, setting this option 630will make this module treat the whole file/buffer as a single data stream. 631 632This option defaults to 1. 633 634=item C<< BlockSize => $num >> 635 636When reading the compressed input data, IO::Uncompress::Inflate will read it in 637blocks of C<$num> bytes. 638 639This option defaults to 4096. 640 641=item C<< InputLength => $size >> 642 643When present this option will limit the number of compressed bytes read 644from the input file/buffer to C<$size>. This option can be used in the 645situation where there is useful data directly after the compressed data 646stream and you know beforehand the exact length of the compressed data 647stream. 648 649This option is mostly used when reading from a filehandle, in which case 650the file pointer will be left pointing to the first byte directly after the 651compressed data stream. 652 653This option defaults to off. 654 655=item C<< Append => 0|1 >> 656 657This option controls what the C<read> method does with uncompressed data. 658 659If set to 1, all uncompressed data will be appended to the output parameter 660of the C<read> method. 661 662If set to 0, the contents of the output parameter of the C<read> method 663will be overwritten by the uncompressed data. 664 665Defaults to 0. 666 667=item C<< Strict => 0|1 >> 668 669This option controls whether the extra checks defined below are used when 670carrying out the decompression. When Strict is on, the extra tests are 671carried out, when Strict is off they are not. 672 673The default for this option is off. 674 675=over 5 676 677=item 1 678 679The ADLER32 checksum field must be present. 680 681=item 2 682 683The value of the ADLER32 field read must match the adler32 value of the 684uncompressed data actually contained in the file. 685 686=back 687 688=back 689 690=head2 Examples 691 692TODO 693 694=head1 Methods 695 696=head2 read 697 698Usage is 699 700 $status = $z->read($buffer) 701 702Reads a block of compressed data (the size of the compressed block is 703determined by the C<Buffer> option in the constructor), uncompresses it and 704writes any uncompressed data into C<$buffer>. If the C<Append> parameter is 705set in the constructor, the uncompressed data will be appended to the 706C<$buffer> parameter. Otherwise C<$buffer> will be overwritten. 707 708Returns the number of uncompressed bytes written to C<$buffer>, zero if eof 709or a negative number on error. 710 711=head2 read 712 713Usage is 714 715 $status = $z->read($buffer, $length) 716 $status = $z->read($buffer, $length, $offset) 717 718 $status = read($z, $buffer, $length) 719 $status = read($z, $buffer, $length, $offset) 720 721Attempt to read C<$length> bytes of uncompressed data into C<$buffer>. 722 723The main difference between this form of the C<read> method and the 724previous one, is that this one will attempt to return I<exactly> C<$length> 725bytes. The only circumstances that this function will not is if end-of-file 726or an IO error is encountered. 727 728Returns the number of uncompressed bytes written to C<$buffer>, zero if eof 729or a negative number on error. 730 731=head2 getline 732 733Usage is 734 735 $line = $z->getline() 736 $line = <$z> 737 738Reads a single line. 739 740This method fully supports the use of the variable C<$/> (or 741C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to 742determine what constitutes an end of line. Paragraph mode, record mode and 743file slurp mode are all supported. 744 745=head2 getc 746 747Usage is 748 749 $char = $z->getc() 750 751Read a single character. 752 753=head2 ungetc 754 755Usage is 756 757 $char = $z->ungetc($string) 758 759=head2 inflateSync 760 761Usage is 762 763 $status = $z->inflateSync() 764 765TODO 766 767=head2 getHeaderInfo 768 769Usage is 770 771 $hdr = $z->getHeaderInfo(); 772 @hdrs = $z->getHeaderInfo(); 773 774This method returns either a hash reference (in scalar context) or a list 775or hash references (in array context) that contains information about each 776of the header fields in the compressed data stream(s). 777 778=head2 tell 779 780Usage is 781 782 $z->tell() 783 tell $z 784 785Returns the uncompressed file offset. 786 787=head2 eof 788 789Usage is 790 791 $z->eof(); 792 eof($z); 793 794Returns true if the end of the compressed input stream has been reached. 795 796=head2 seek 797 798 $z->seek($position, $whence); 799 seek($z, $position, $whence); 800 801Provides a sub-set of the C<seek> functionality, with the restriction 802that it is only legal to seek forward in the input file/buffer. 803It is a fatal error to attempt to seek backward. 804 805Note that the implementation of C<seek> in this module does not provide 806true random access to a compressed file/buffer. It works by uncompressing 807data from the current offset in the file/buffer until it reaches the 808uncompressed offset specified in the parameters to C<seek>. For very small 809files this may be acceptable behaviour. For large files it may cause an 810unacceptable delay. 811 812The C<$whence> parameter takes one the usual values, namely SEEK_SET, 813SEEK_CUR or SEEK_END. 814 815Returns 1 on success, 0 on failure. 816 817=head2 binmode 818 819Usage is 820 821 $z->binmode 822 binmode $z ; 823 824This is a noop provided for completeness. 825 826=head2 opened 827 828 $z->opened() 829 830Returns true if the object currently refers to a opened file/buffer. 831 832=head2 autoflush 833 834 my $prev = $z->autoflush() 835 my $prev = $z->autoflush(EXPR) 836 837If the C<$z> object is associated with a file or a filehandle, this method 838returns the current autoflush setting for the underlying filehandle. If 839C<EXPR> is present, and is non-zero, it will enable flushing after every 840write/print operation. 841 842If C<$z> is associated with a buffer, this method has no effect and always 843returns C<undef>. 844 845B<Note> that the special variable C<$|> B<cannot> be used to set or 846retrieve the autoflush setting. 847 848=head2 input_line_number 849 850 $z->input_line_number() 851 $z->input_line_number(EXPR) 852 853Returns the current uncompressed line number. If C<EXPR> is present it has 854the effect of setting the line number. Note that setting the line number 855does not change the current position within the file/buffer being read. 856 857The contents of C<$/> are used to determine what constitutes a line 858terminator. 859 860=head2 fileno 861 862 $z->fileno() 863 fileno($z) 864 865If the C<$z> object is associated with a file or a filehandle, C<fileno> 866will return the underlying file descriptor. Once the C<close> method is 867called C<fileno> will return C<undef>. 868 869If the C<$z> object is associated with a buffer, this method will return 870C<undef>. 871 872=head2 close 873 874 $z->close() ; 875 close $z ; 876 877Closes the output file/buffer. 878 879For most versions of Perl this method will be automatically invoked if 880the IO::Uncompress::Inflate object is destroyed (either explicitly or by the 881variable with the reference to the object going out of scope). The 882exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In 883these cases, the C<close> method will be called automatically, but 884not until global destruction of all live objects when the program is 885terminating. 886 887Therefore, if you want your scripts to be able to run on all versions 888of Perl, you should call C<close> explicitly and not rely on automatic 889closing. 890 891Returns true on success, otherwise 0. 892 893If the C<AutoClose> option has been enabled when the IO::Uncompress::Inflate 894object was created, and the object is associated with a file, the 895underlying file will also be closed. 896 897=head2 nextStream 898 899Usage is 900 901 my $status = $z->nextStream(); 902 903Skips to the next compressed data stream in the input file/buffer. If a new 904compressed data stream is found, the eof marker will be cleared and C<$.> 905will be reset to 0. 906 907Returns 1 if a new stream was found, 0 if none was found, and -1 if an 908error was encountered. 909 910=head2 trailingData 911 912Usage is 913 914 my $data = $z->trailingData(); 915 916Returns the data, if any, that is present immediately after the compressed 917data stream once uncompression is complete. It only makes sense to call 918this method once the end of the compressed data stream has been 919encountered. 920 921This option can be used when there is useful information immediately 922following the compressed data stream, and you don't know the length of the 923compressed data stream. 924 925If the input is a buffer, C<trailingData> will return everything from the 926end of the compressed data stream to the end of the buffer. 927 928If the input is a filehandle, C<trailingData> will return the data that is 929left in the filehandle input buffer once the end of the compressed data 930stream has been reached. You can then use the filehandle to read the rest 931of the input file. 932 933Don't bother using C<trailingData> if the input is a filename. 934 935If you know the length of the compressed data stream before you start 936uncompressing, you can avoid having to use C<trailingData> by setting the 937C<InputLength> option in the constructor. 938 939=head1 Importing 940 941No symbolic constants are required by this IO::Uncompress::Inflate at present. 942 943=over 5 944 945=item :all 946 947Imports C<inflate> and C<$InflateError>. 948Same as doing this 949 950 use IO::Uncompress::Inflate qw(inflate $InflateError) ; 951 952=back 953 954=head1 EXAMPLES 955 956=head2 Working with Net::FTP 957 958See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP"> 959 960=head1 SEE ALSO 961 962L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress> 963 964L<IO::Compress::FAQ|IO::Compress::FAQ> 965 966L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>, 967L<Archive::Tar|Archive::Tar>, 968L<IO::Zlib|IO::Zlib> 969 970For RFC 1950, 1951 and 1952 see 971L<http://www.faqs.org/rfcs/rfc1950.html>, 972L<http://www.faqs.org/rfcs/rfc1951.html> and 973L<http://www.faqs.org/rfcs/rfc1952.html> 974 975The I<zlib> compression library was written by Jean-loup Gailly 976C<gzip@prep.ai.mit.edu> and Mark Adler C<madler@alumni.caltech.edu>. 977 978The primary site for the I<zlib> compression library is 979L<http://www.zlib.org>. 980 981The primary site for gzip is L<http://www.gzip.org>. 982 983=head1 AUTHOR 984 985This module was written by Paul Marquess, C<pmqs@cpan.org>. 986 987=head1 MODIFICATION HISTORY 988 989See the Changes file. 990 991=head1 COPYRIGHT AND LICENSE 992 993Copyright (c) 2005-2017 Paul Marquess. All rights reserved. 994 995This program is free software; you can redistribute it and/or 996modify it under the same terms as Perl itself. 997 998