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