Compression Modules Update for EBCDIC
[p5sagit/p5-mst-13.2.git] / ext / Compress / Zlib / lib / Compress / Zlib.pm
1
2 package Compress::Zlib;
3
4 require 5.004 ;
5 require Exporter;
6 use AutoLoader;
7 use Carp ;
8 use IO::Handle ;
9 use Scalar::Util qw(dualvar);
10
11 use IO::Compress::Base::Common 2.008 ;
12 use Compress::Raw::Zlib 2.008 ;
13 use IO::Compress::Gzip 2.008 ;
14 use IO::Uncompress::Gunzip 2.008 ;
15
16 use strict ;
17 use warnings ;
18 use bytes ;
19 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
20
21 $VERSION = '2.008';
22 $XS_VERSION = $VERSION; 
23 $VERSION = eval $VERSION;
24
25 @ISA = qw(Exporter);
26 # Items to export into callers namespace by default. Note: do not export
27 # names by default without a very good reason. Use EXPORT_OK instead.
28 # Do not simply export all your public functions/methods/constants.
29 @EXPORT = qw(
30         deflateInit inflateInit
31
32         compress uncompress
33
34         gzopen $gzerrno
35     );
36
37 push @EXPORT, @Compress::Raw::Zlib::EXPORT ;
38
39 BEGIN
40 {
41     *zlib_version = \&Compress::Raw::Zlib::zlib_version;
42 }
43
44 sub AUTOLOAD {
45     my($constname);
46     ($constname = $AUTOLOAD) =~ s/.*:://;
47     my ($error, $val) = Compress::Raw::Zlib::constant($constname);
48     Carp::croak $error if $error;
49     no strict 'refs';
50     *{$AUTOLOAD} = sub { $val };
51     goto &{$AUTOLOAD};
52 }
53
54 use constant FLAG_APPEND             => 1 ;
55 use constant FLAG_CRC                => 2 ;
56 use constant FLAG_ADLER              => 4 ;
57 use constant FLAG_CONSUME_INPUT      => 8 ;
58
59 our (@my_z_errmsg);
60
61 @my_z_errmsg = (
62     "need dictionary",     # Z_NEED_DICT     2
63     "stream end",          # Z_STREAM_END    1
64     "",                    # Z_OK            0
65     "file error",          # Z_ERRNO        (-1)
66     "stream error",        # Z_STREAM_ERROR (-2)
67     "data error",          # Z_DATA_ERROR   (-3)
68     "insufficient memory", # Z_MEM_ERROR    (-4)
69     "buffer error",        # Z_BUF_ERROR    (-5)
70     "incompatible version",# Z_VERSION_ERROR(-6)
71     );
72
73
74 sub _set_gzerr
75 {
76     my $value = shift ;
77
78     if ($value == 0) {
79         $Compress::Zlib::gzerrno = 0 ;
80     }
81     elsif ($value == Z_ERRNO() || $value > 2) {
82         $Compress::Zlib::gzerrno = $! ;
83     }
84     else {
85         $Compress::Zlib::gzerrno = dualvar($value+0, $my_z_errmsg[2 - $value]);
86     }
87
88     return $value ;
89 }
90
91 sub _save_gzerr
92 {
93     my $gz = shift ;
94     my $test_eof = shift ;
95
96     my $value = $gz->errorNo() || 0 ;
97
98     if ($test_eof) {
99         #my $gz = $self->[0] ;
100         # gzread uses Z_STREAM_END to denote a successful end
101         $value = Z_STREAM_END() if $gz->eof() && $value == 0 ;
102     }
103
104     _set_gzerr($value) ;
105 }
106
107 sub gzopen($$)
108 {
109     my ($file, $mode) = @_ ;
110
111     my $gz ;
112     my %defOpts = (Level    => Z_DEFAULT_COMPRESSION(),
113                    Strategy => Z_DEFAULT_STRATEGY(),
114                   );
115
116     my $writing ;
117     $writing = ! ($mode =~ /r/i) ;
118     $writing = ($mode =~ /[wa]/i) ;
119
120     $defOpts{Level}    = $1               if $mode =~ /(\d)/;
121     $defOpts{Strategy} = Z_FILTERED()     if $mode =~ /f/i;
122     $defOpts{Strategy} = Z_HUFFMAN_ONLY() if $mode =~ /h/i;
123     $defOpts{Append}   = 1                if $mode =~ /a/i;
124
125     my $infDef = $writing ? 'deflate' : 'inflate';
126     my @params = () ;
127
128     croak "gzopen: file parameter is not a filehandle or filename"
129         unless isaFilehandle $file || isaFilename $file  || 
130                (ref $file && ref $file eq 'SCALAR');
131
132     return undef unless $mode =~ /[rwa]/i ;
133
134     _set_gzerr(0) ;
135
136     if ($writing) {
137         $gz = new IO::Compress::Gzip($file, Minimal => 1, AutoClose => 1, 
138                                      %defOpts) 
139             or $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError;
140     }
141     else {
142         $gz = new IO::Uncompress::Gunzip($file, 
143                                          Transparent => 1,
144                                          Append => 0, 
145                                          AutoClose => 1, 
146                                          MultiStream => 1,
147                                          Strict => 0) 
148             or $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError;
149     }
150
151     return undef
152         if ! defined $gz ;
153
154     bless [$gz, $infDef], 'Compress::Zlib::gzFile';
155 }
156
157 sub Compress::Zlib::gzFile::gzread
158 {
159     my $self = shift ;
160
161     return _set_gzerr(Z_STREAM_ERROR())
162         if $self->[1] ne 'inflate';
163
164     my $len = defined $_[1] ? $_[1] : 4096 ; 
165
166     if ($self->gzeof() || $len == 0) {
167         # Zap the output buffer to match ver 1 behaviour.
168         $_[0] = "" ;
169         return 0 ;
170     }
171
172     my $gz = $self->[0] ;
173     my $status = $gz->read($_[0], $len) ; 
174     _save_gzerr($gz, 1);
175     return $status ;
176 }
177
178 sub Compress::Zlib::gzFile::gzreadline
179 {
180     my $self = shift ;
181
182     my $gz = $self->[0] ;
183     {
184         # Maintain backward compatibility with 1.x behaviour
185         # It didn't support $/, so this can't either.
186         local $/ = "\n" ;
187         $_[0] = $gz->getline() ; 
188     }
189     _save_gzerr($gz, 1);
190     return defined $_[0] ? length $_[0] : 0 ;
191 }
192
193 sub Compress::Zlib::gzFile::gzwrite
194 {
195     my $self = shift ;
196     my $gz = $self->[0] ;
197
198     return _set_gzerr(Z_STREAM_ERROR())
199         if $self->[1] ne 'deflate';
200
201     $] >= 5.008 and (utf8::downgrade($_[0], 1) 
202         or croak "Wide character in gzwrite");
203
204     my $status = $gz->write($_[0]) ;
205     _save_gzerr($gz);
206     return $status ;
207 }
208
209 sub Compress::Zlib::gzFile::gztell
210 {
211     my $self = shift ;
212     my $gz = $self->[0] ;
213     my $status = $gz->tell() ;
214     _save_gzerr($gz);
215     return $status ;
216 }
217
218 sub Compress::Zlib::gzFile::gzseek
219 {
220     my $self   = shift ;
221     my $offset = shift ;
222     my $whence = shift ;
223
224     my $gz = $self->[0] ;
225     my $status ;
226     eval { $status = $gz->seek($offset, $whence) ; };
227     if ($@)
228     {
229         my $error = $@;
230         $error =~ s/^.*: /gzseek: /;
231         $error =~ s/ at .* line \d+\s*$//;
232         croak $error;
233     }
234     _save_gzerr($gz);
235     return $status ;
236 }
237
238 sub Compress::Zlib::gzFile::gzflush
239 {
240     my $self = shift ;
241     my $f    = shift ;
242
243     my $gz = $self->[0] ;
244     my $status = $gz->flush($f) ;
245     my $err = _save_gzerr($gz);
246     return $status ? 0 : $err;
247 }
248
249 sub Compress::Zlib::gzFile::gzclose
250 {
251     my $self = shift ;
252     my $gz = $self->[0] ;
253
254     my $status = $gz->close() ;
255     my $err = _save_gzerr($gz);
256     return $status ? 0 : $err;
257 }
258
259 sub Compress::Zlib::gzFile::gzeof
260 {
261     my $self = shift ;
262     my $gz = $self->[0] ;
263
264     return 0
265         if $self->[1] ne 'inflate';
266
267     my $status = $gz->eof() ;
268     _save_gzerr($gz);
269     return $status ;
270 }
271
272 sub Compress::Zlib::gzFile::gzsetparams
273 {
274     my $self = shift ;
275     croak "Usage: Compress::Zlib::gzFile::gzsetparams(file, level, strategy)"
276         unless @_ eq 2 ;
277
278     my $gz = $self->[0] ;
279     my $level = shift ;
280     my $strategy = shift;
281
282     return _set_gzerr(Z_STREAM_ERROR())
283         if $self->[1] ne 'deflate';
284  
285     my $status = *$gz->{Compress}->deflateParams(-Level   => $level, 
286                                                 -Strategy => $strategy);
287     _save_gzerr($gz);
288     return $status ;
289 }
290
291 sub Compress::Zlib::gzFile::gzerror
292 {
293     my $self = shift ;
294     my $gz = $self->[0] ;
295     
296     return $Compress::Zlib::gzerrno ;
297 }
298
299
300 sub compress($;$)
301 {
302     my ($x, $output, $err, $in) =('', '', '', '') ;
303
304     if (ref $_[0] ) {
305         $in = $_[0] ;
306         croak "not a scalar reference" unless ref $in eq 'SCALAR' ;
307     }
308     else {
309         $in = \$_[0] ;
310     }
311
312     $] >= 5.008 and (utf8::downgrade($$in, 1) 
313         or croak "Wide character in compress");
314
315     my $level = (@_ == 2 ? $_[1] : Z_DEFAULT_COMPRESSION() );
316
317     $x = new Compress::Raw::Zlib::Deflate -AppendOutput => 1, -Level => $level
318             or return undef ;
319
320     $err = $x->deflate($in, $output) ;
321     return undef unless $err == Z_OK() ;
322
323     $err = $x->flush($output) ;
324     return undef unless $err == Z_OK() ;
325     
326     return $output ;
327
328 }
329
330 sub uncompress($)
331 {
332     my ($x, $output, $err, $in) =('', '', '', '') ;
333
334     if (ref $_[0] ) {
335         $in = $_[0] ;
336         croak "not a scalar reference" unless ref $in eq 'SCALAR' ;
337     }
338     else {
339         $in = \$_[0] ;
340     }
341
342     $] >= 5.008 and (utf8::downgrade($$in, 1) 
343         or croak "Wide character in uncompress");
344
345     $x = new Compress::Raw::Zlib::Inflate -ConsumeInput => 0 or return undef ;
346  
347     $err = $x->inflate($in, $output) ;
348     return undef unless $err == Z_STREAM_END() ;
349  
350     return $output ;
351 }
352
353
354  
355 sub deflateInit(@)
356 {
357     my ($got) = ParseParameters(0,
358                 {
359                 'Bufsize'       => [1, 1, Parse_unsigned, 4096],
360                 'Level'         => [1, 1, Parse_signed,   Z_DEFAULT_COMPRESSION()],
361                 'Method'        => [1, 1, Parse_unsigned, Z_DEFLATED()],
362                 'WindowBits'    => [1, 1, Parse_signed,   MAX_WBITS()],
363                 'MemLevel'      => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
364                 'Strategy'      => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
365                 'Dictionary'    => [1, 1, Parse_any,      ""],
366                 }, @_ ) ;
367
368     croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " . 
369             $got->value('Bufsize')
370         unless $got->value('Bufsize') >= 1;
371
372     my $obj ;
373  
374     my $status = 0 ;
375     ($obj, $status) = 
376       Compress::Raw::Zlib::_deflateInit(0,
377                 $got->value('Level'), 
378                 $got->value('Method'), 
379                 $got->value('WindowBits'), 
380                 $got->value('MemLevel'), 
381                 $got->value('Strategy'), 
382                 $got->value('Bufsize'),
383                 $got->value('Dictionary')) ;
384
385     my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldDeflate"  : undef) ;
386     return wantarray ? ($x, $status) : $x ;
387 }
388  
389 sub inflateInit(@)
390 {
391     my ($got) = ParseParameters(0,
392                 {
393                 'Bufsize'       => [1, 1, Parse_unsigned, 4096],
394                 'WindowBits'    => [1, 1, Parse_signed,   MAX_WBITS()],
395                 'Dictionary'    => [1, 1, Parse_any,      ""],
396                 }, @_) ;
397
398
399     croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " . 
400             $got->value('Bufsize')
401         unless $got->value('Bufsize') >= 1;
402
403     my $status = 0 ;
404     my $obj ;
405     ($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT,
406                                 $got->value('WindowBits'), 
407                                 $got->value('Bufsize'), 
408                                 $got->value('Dictionary')) ;
409
410     my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate"  : undef) ;
411
412     wantarray ? ($x, $status) : $x ;
413 }
414
415 package Zlib::OldDeflate ;
416
417 our (@ISA);
418 @ISA = qw(Compress::Raw::Zlib::deflateStream);
419
420
421 sub deflate
422 {
423     my $self = shift ;
424     my $output ;
425
426     my $status = $self->SUPER::deflate($_[0], $output) ;
427     wantarray ? ($output, $status) : $output ;
428 }
429
430 sub flush
431 {
432     my $self = shift ;
433     my $output ;
434     my $flag = shift || Compress::Zlib::Z_FINISH();
435     my $status = $self->SUPER::flush($output, $flag) ;
436     
437     wantarray ? ($output, $status) : $output ;
438 }
439
440 package Zlib::OldInflate ;
441
442 our (@ISA);
443 @ISA = qw(Compress::Raw::Zlib::inflateStream);
444
445 sub inflate
446 {
447     my $self = shift ;
448     my $output ;
449     my $status = $self->SUPER::inflate($_[0], $output) ;
450     wantarray ? ($output, $status) : $output ;
451 }
452
453 package Compress::Zlib ;
454
455 use IO::Compress::Gzip::Constants 2.008 ;
456
457 sub memGzip($)
458 {
459   my $out;
460
461   # if the deflation buffer isn't a reference, make it one
462   my $string = (ref $_[0] ? $_[0] : \$_[0]) ;
463
464   $] >= 5.008 and (utf8::downgrade($$string, 1) 
465       or croak "Wide character in memGzip");
466
467   IO::Compress::Gzip::gzip($string, \$out, Minimal => 1)
468       or return undef ;
469
470   return $out;
471 }
472
473
474 sub _removeGzipHeader($)
475 {
476     my $string = shift ;
477
478     return Z_DATA_ERROR() 
479         if length($$string) < GZIP_MIN_HEADER_SIZE ;
480
481     my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) = 
482         unpack ('CCCCVCC', $$string);
483
484     return Z_DATA_ERROR()
485         unless $magic1 == GZIP_ID1 and $magic2 == GZIP_ID2 and
486            $method == Z_DEFLATED() and !($flags & GZIP_FLG_RESERVED) ;
487     substr($$string, 0, GZIP_MIN_HEADER_SIZE) = '' ;
488
489     # skip extra field
490     if ($flags & GZIP_FLG_FEXTRA)
491     {
492         return Z_DATA_ERROR()
493             if length($$string) < GZIP_FEXTRA_HEADER_SIZE ;
494
495         my ($extra_len) = unpack ('v', $$string);
496         $extra_len += GZIP_FEXTRA_HEADER_SIZE;
497         return Z_DATA_ERROR()
498             if length($$string) < $extra_len ;
499
500         substr($$string, 0, $extra_len) = '';
501     }
502
503     # skip orig name
504     if ($flags & GZIP_FLG_FNAME)
505     {
506         my $name_end = index ($$string, GZIP_NULL_BYTE);
507         return Z_DATA_ERROR()
508            if $name_end == -1 ;
509         substr($$string, 0, $name_end + 1) =  '';
510     }
511
512     # skip comment
513     if ($flags & GZIP_FLG_FCOMMENT)
514     {
515         my $comment_end = index ($$string, GZIP_NULL_BYTE);
516         return Z_DATA_ERROR()
517             if $comment_end == -1 ;
518         substr($$string, 0, $comment_end + 1) = '';
519     }
520
521     # skip header crc
522     if ($flags & GZIP_FLG_FHCRC)
523     {
524         return Z_DATA_ERROR()
525             if length ($$string) < GZIP_FHCRC_SIZE ;
526         substr($$string, 0, GZIP_FHCRC_SIZE) = '';
527     }
528     
529     return Z_OK();
530 }
531
532
533 sub memGunzip($)
534 {
535     # if the buffer isn't a reference, make it one
536     my $string = (ref $_[0] ? $_[0] : \$_[0]);
537  
538     $] >= 5.008 and (utf8::downgrade($$string, 1) 
539         or croak "Wide character in memGunzip");
540
541     _removeGzipHeader($string) == Z_OK() 
542         or return undef;
543      
544     my $bufsize = length $$string > 4096 ? length $$string : 4096 ;
545     my $x = new Compress::Raw::Zlib::Inflate({-WindowBits => - MAX_WBITS(),
546                          -Bufsize => $bufsize}) 
547
548               or return undef;
549
550     my $output = "" ;
551     my $status = $x->inflate($string, $output);
552     return undef 
553         unless $status == Z_STREAM_END();
554
555     if (length $$string >= 8)
556     {
557         my ($crc, $len) = unpack ("VV", substr($$string, 0, 8));
558         substr($$string, 0, 8) = '';
559         return undef 
560             unless $len == length($output) and
561                    $crc == crc32($output);
562     }
563     else
564     {
565         $$string = '';
566     }
567     return $output;   
568 }
569
570 # Autoload methods go after __END__, and are processed by the autosplit program.
571
572 1;
573 __END__
574
575
576 =head1 NAME
577
578 Compress::Zlib - Interface to zlib compression library
579
580 =head1 SYNOPSIS
581
582     use Compress::Zlib ;
583
584     ($d, $status) = deflateInit( [OPT] ) ;
585     $status = $d->deflate($input, $output) ;
586     $status = $d->flush($output [, $flush_type]) ;
587     $d->deflateParams(OPTS) ;
588     $d->deflateTune(OPTS) ;
589     $d->dict_adler() ;
590     $d->crc32() ;
591     $d->adler32() ;
592     $d->total_in() ;
593     $d->total_out() ;
594     $d->msg() ;
595     $d->get_Strategy();
596     $d->get_Level();
597     $d->get_BufSize();
598
599     ($i, $status) = inflateInit( [OPT] ) ;
600     $status = $i->inflate($input, $output [, $eof]) ;
601     $status = $i->inflateSync($input) ;
602     $i->dict_adler() ;
603     $d->crc32() ;
604     $d->adler32() ;
605     $i->total_in() ;
606     $i->total_out() ;
607     $i->msg() ;
608     $d->get_BufSize();
609
610     $dest = compress($source) ;
611     $dest = uncompress($source) ;
612
613     $gz = gzopen($filename or filehandle, $mode) ;
614     $bytesread = $gz->gzread($buffer [,$size]) ;
615     $bytesread = $gz->gzreadline($line) ;
616     $byteswritten = $gz->gzwrite($buffer) ;
617     $status = $gz->gzflush($flush) ;
618     $offset = $gz->gztell() ;
619     $status = $gz->gzseek($offset, $whence) ;
620     $status = $gz->gzclose() ;
621     $status = $gz->gzeof() ;
622     $status = $gz->gzsetparams($level, $strategy) ;
623     $errstring = $gz->gzerror() ; 
624     $gzerrno
625
626     $dest = Compress::Zlib::memGzip($buffer) ;
627     $dest = Compress::Zlib::memGunzip($buffer) ;
628
629     $crc = adler32($buffer [,$crc]) ;
630     $crc = crc32($buffer [,$crc]) ;
631
632     $crc = adler32_combine($crc1, $crc2, $len2)l
633     $crc = crc32_combine($adler1, $adler2, $len2)
634
635     ZLIB_VERSION
636     ZLIB_VERNUM
637
638
639
640 =head1 DESCRIPTION
641
642 The I<Compress::Zlib> module provides a Perl interface to the I<zlib>
643 compression library (see L</AUTHOR> for details about where to get
644 I<zlib>). 
645
646 The C<Compress::Zlib> module can be split into two general areas of
647 functionality, namely a simple read/write interface to I<gzip> files
648 and a low-level in-memory compression/decompression interface.
649
650 Each of these areas will be discussed in the following sections.
651
652 =head2 Notes for users of Compress::Zlib version 1
653
654 The main change in C<Compress::Zlib> version 2.x is that it does not now
655 interface directly to the zlib library. Instead it uses the
656 C<IO::Compress::Gzip> and C<IO::Uncompress::Gunzip> modules for
657 reading/writing gzip files, and the C<Compress::Raw::Zlib> module for some
658 low-level zlib access. 
659
660 The interface provided by version 2 of this module should be 100% backward
661 compatible with version 1. If you find a difference in the expected
662 behaviour please contact the author (See L</AUTHOR>). See L<GZIP INTERFACE> 
663
664 With the creation of the C<IO::Compress> and C<IO::Uncompress> modules no
665 new features are planned for C<Compress::Zlib> - the new modules do
666 everything that C<Compress::Zlib> does and then some. Development on
667 C<Compress::Zlib> will be limited to bug fixes only.
668
669 If you are writing new code, your first port of call should be one of the
670 new C<IO::Compress> or C<IO::Uncompress> modules.
671
672 =head1 GZIP INTERFACE
673
674 A number of functions are supplied in I<zlib> for reading and writing
675 I<gzip> files that conform to RFC 1952. This module provides an interface
676 to most of them. 
677
678 If you have previously used C<Compress::Zlib> 1.x, the following
679 enhancements/changes have been made to the C<gzopen> interface:
680
681 =over 5
682
683 =item 1
684
685 If you want to to open either STDIN or STDOUT with C<gzopen>, you can now
686 optionally use the special filename "C<->" as a synonym for C<\*STDIN> and
687 C<\*STDOUT>.
688
689 =item 2 
690
691 In C<Compress::Zlib> version 1.x, C<gzopen> used the zlib library to open
692 the underlying file. This made things especially tricky when a Perl
693 filehandle was passed to C<gzopen>. Behind the scenes the numeric C file
694 descriptor had to be extracted from the Perl filehandle and this passed to
695 the zlib library.
696
697 Apart from being non-portable to some operating systems, this made it
698 difficult to use C<gzopen> in situations where you wanted to extract/create
699 a gzip data stream that is embedded in a larger file, without having to
700 resort to opening and closing the file multiple times. 
701
702 It also made it impossible to pass a perl filehandle that wasn't associated
703 with a real filesystem file, like, say, an C<IO::String>.
704
705 In C<Compress::Zlib> version 2.x, the C<gzopen> interface has been
706 completely rewritten to use the L<IO::Compress::Gzip|IO::Compress::Gzip>
707 for writing gzip files and L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>
708 for reading gzip files. None of the limitations mentioned above apply.
709
710 =item 3
711
712 Addition of C<gzseek> to provide a restricted C<seek> interface.
713
714 =item 4.
715
716 Added C<gztell>.
717
718 =back
719
720 A more complete and flexible interface for reading/writing gzip
721 files/buffers is included with the module C<IO-Compress-Zlib>. See
722 L<IO::Compress::Gzip|IO::Compress::Gzip> and
723 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for more details.
724
725 =over 5
726
727 =item B<$gz = gzopen($filename, $mode)>
728
729 =item B<$gz = gzopen($filehandle, $mode)>
730
731 This function opens either the I<gzip> file C<$filename> for reading or
732 writing or attaches to the opened filehandle, C<$filehandle>. 
733 It returns an object on success and C<undef> on failure.
734
735 When writing a gzip file this interface will I<always> create the smallest
736 possible gzip header (exactly 10 bytes). If you want greater control over
737 what gets stored in the gzip header (like the original filename or a
738 comment) use L<IO::Compress::Gzip|IO::Compress::Gzip> instead. Similarly if
739 you want to read the contents of the gzip header use
740 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
741
742 The second parameter, C<$mode>, is used to specify whether the file is
743 opened for reading or writing and to optionally specify a compression
744 level and compression strategy when writing. The format of the C<$mode>
745 parameter is similar to the mode parameter to the 'C' function C<fopen>,
746 so "rb" is used to open for reading, "wb" for writing and "ab" for
747 appending (writing at the end of the file).
748
749 To specify a compression level when writing, append a digit between 0
750 and 9 to the mode string -- 0 means no compression and 9 means maximum
751 compression.
752 If no compression level is specified Z_DEFAULT_COMPRESSION is used.
753
754 To specify the compression strategy when writing, append 'f' for filtered
755 data, 'h' for Huffman only compression, or 'R' for run-length encoding.
756 If no strategy is specified Z_DEFAULT_STRATEGY is used.
757
758 So, for example, "wb9" means open for writing with the maximum compression
759 using the default strategy and "wb4R" means open for writing with compression
760 level 4 and run-length encoding.
761
762 Refer to the I<zlib> documentation for the exact format of the C<$mode>
763 parameter.
764
765 =item B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>
766
767 Reads C<$size> bytes from the compressed file into C<$buffer>. If
768 C<$size> is not specified, it will default to 4096. If the scalar
769 C<$buffer> is not large enough, it will be extended automatically.
770
771 Returns the number of bytes actually read. On EOF it returns 0 and in
772 the case of an error, -1.
773
774 =item B<$bytesread = $gz-E<gt>gzreadline($line) ;>
775
776 Reads the next line from the compressed file into C<$line>. 
777
778 Returns the number of bytes actually read. On EOF it returns 0 and in
779 the case of an error, -1.
780
781 It is legal to intermix calls to C<gzread> and C<gzreadline>.
782
783 To maintain backward compatibility with version 1.x of this module
784 C<gzreadline> ignores the C<$/> variable - it I<always> uses the string
785 C<"\n"> as the line delimiter.  
786
787 If you want to read a gzip file a line at a time and have it respect the
788 C<$/> variable (or C<$INPUT_RECORD_SEPARATOR>, or C<$RS> when C<English> is
789 in use) see L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
790
791 =item B<$byteswritten = $gz-E<gt>gzwrite($buffer) ;>
792
793 Writes the contents of C<$buffer> to the compressed file. Returns the
794 number of bytes actually written, or 0 on error.
795
796 =item B<$status = $gz-E<gt>gzflush($flush_type) ;>
797
798 Flushes all pending output into the compressed file.
799
800 This method takes an optional parameter, C<$flush_type>, that controls
801 how the flushing will be carried out. By default the C<$flush_type>
802 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
803 C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
804 strongly recommended that you only set the C<flush_type> parameter if
805 you fully understand the implications of what it does - overuse of C<flush>
806 can seriously degrade the level of compression achieved. See the C<zlib>
807 documentation for details.
808
809 Returns 0 on success.
810
811
812 =item B<$offset = $gz-E<gt>gztell() ;>
813
814 Returns the uncompressed file offset.
815
816 =item B<$status = $gz-E<gt>gzseek($offset, $whence) ;>
817
818 Provides a sub-set of the C<seek> functionality, with the restriction
819 that it is only legal to seek forward in the compressed file.
820 It is a fatal error to attempt to seek backward.
821
822 When opened for writing, empty parts of the file will have NULL (0x00)
823 bytes written to them.
824
825 The C<$whence> parameter should be one of SEEK_SET, SEEK_CUR or SEEK_END.
826
827 Returns 1 on success, 0 on failure.
828
829 =item B<$gz-E<gt>gzclose>
830
831 Closes the compressed file. Any pending data is flushed to the file
832 before it is closed.
833
834 Returns 0 on success.
835
836 =item B<$gz-E<gt>gzsetparams($level, $strategy>
837
838 Change settings for the deflate stream C<$gz>.
839
840 The list of the valid options is shown below. Options not specified
841 will remain unchanged.
842
843 Note: This method is only available if you are running zlib 1.0.6 or better.
844
845 =over 5
846
847 =item B<$level>
848
849 Defines the compression level. Valid values are 0 through 9,
850 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
851 C<Z_DEFAULT_COMPRESSION>.
852
853 =item B<$strategy>
854
855 Defines the strategy used to tune the compression. The valid values are
856 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 
857
858 =back
859
860 =item B<$gz-E<gt>gzerror>
861
862 Returns the I<zlib> error message or number for the last operation
863 associated with C<$gz>. The return value will be the I<zlib> error
864 number when used in a numeric context and the I<zlib> error message
865 when used in a string context. The I<zlib> error number constants,
866 shown below, are available for use.
867
868     Z_OK
869     Z_STREAM_END
870     Z_ERRNO
871     Z_STREAM_ERROR
872     Z_DATA_ERROR
873     Z_MEM_ERROR
874     Z_BUF_ERROR
875
876 =item B<$gzerrno>
877
878 The C<$gzerrno> scalar holds the error code associated with the most
879 recent I<gzip> routine. Note that unlike C<gzerror()>, the error is
880 I<not> associated with a particular file.
881
882 As with C<gzerror()> it returns an error number in numeric context and
883 an error message in string context. Unlike C<gzerror()> though, the
884 error message will correspond to the I<zlib> message when the error is
885 associated with I<zlib> itself, or the UNIX error message when it is
886 not (i.e. I<zlib> returned C<Z_ERRORNO>).
887
888 As there is an overlap between the error numbers used by I<zlib> and
889 UNIX, C<$gzerrno> should only be used to check for the presence of
890 I<an> error in numeric context. Use C<gzerror()> to check for specific
891 I<zlib> errors. The I<gzcat> example below shows how the variable can
892 be used safely.
893
894 =back
895
896
897 =head2 Examples
898
899 Here is an example script which uses the interface. It implements a
900 I<gzcat> function.
901
902     use strict ;
903     use warnings ;
904     
905     use Compress::Zlib ;
906     
907     # use stdin if no files supplied
908     @ARGV = '-' unless @ARGV ;
909     
910     foreach my $file (@ARGV) {
911         my $buffer ;
912     
913         my $gz = gzopen($file, "rb") 
914              or die "Cannot open $file: $gzerrno\n" ;
915     
916         print $buffer while $gz->gzread($buffer) > 0 ;
917     
918         die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\n" 
919             if $gzerrno != Z_STREAM_END ;
920         
921         $gz->gzclose() ;
922     }
923
924 Below is a script which makes use of C<gzreadline>. It implements a
925 very simple I<grep> like script.
926
927     use strict ;
928     use warnings ;
929     
930     use Compress::Zlib ;
931     
932     die "Usage: gzgrep pattern [file...]\n"
933         unless @ARGV >= 1;
934     
935     my $pattern = shift ;
936     
937     # use stdin if no files supplied
938     @ARGV = '-' unless @ARGV ;
939     
940     foreach my $file (@ARGV) {
941         my $gz = gzopen($file, "rb") 
942              or die "Cannot open $file: $gzerrno\n" ;
943     
944         while ($gz->gzreadline($_) > 0) {
945             print if /$pattern/ ;
946         }
947     
948         die "Error reading from $file: $gzerrno\n" 
949             if $gzerrno != Z_STREAM_END ;
950         
951         $gz->gzclose() ;
952     }
953
954 This script, I<gzstream>, does the opposite of the I<gzcat> script
955 above. It reads from standard input and writes a gzip data stream to
956 standard output.
957
958     use strict ;
959     use warnings ;
960     
961     use Compress::Zlib ;
962     
963     binmode STDOUT;  # gzopen only sets it on the fd
964     
965     my $gz = gzopen(\*STDOUT, "wb")
966           or die "Cannot open stdout: $gzerrno\n" ;
967     
968     while (<>) {
969         $gz->gzwrite($_) 
970           or die "error writing: $gzerrno\n" ;
971     }
972
973     $gz->gzclose ;
974
975 =head2 Compress::Zlib::memGzip
976
977 This function is used to create an in-memory gzip file with the minimum
978 possible gzip header (exactly 10 bytes).
979
980     $dest = Compress::Zlib::memGzip($buffer) ;
981
982 If successful, it returns the in-memory gzip file, otherwise it returns
983 undef.
984
985 The C<$buffer> parameter can either be a scalar or a scalar reference.
986
987 See L<IO::Compress::Gzip|IO::Compress::Gzip> for an alternative way to
988 carry out in-memory gzip compression.
989
990 =head2 Compress::Zlib::memGunzip
991
992 This function is used to uncompress an in-memory gzip file.
993
994     $dest = Compress::Zlib::memGunzip($buffer) ;
995
996 If successful, it returns the uncompressed gzip file, otherwise it
997 returns undef.
998
999 The C<$buffer> parameter can either be a scalar or a scalar reference. The
1000 contents of the C<$buffer> parameter are destroyed after calling this function.
1001
1002 See L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for an alternative way
1003 to carry out in-memory gzip uncompression.
1004
1005 =head1 COMPRESS/UNCOMPRESS
1006
1007 Two functions are provided to perform in-memory compression/uncompression of
1008 RFC 1950 data streams. They are called C<compress> and C<uncompress>.
1009
1010 =over 5
1011
1012 =item B<$dest = compress($source [, $level] ) ;>
1013
1014 Compresses C<$source>. If successful it returns the compressed
1015 data. Otherwise it returns I<undef>.
1016
1017 The source buffer, C<$source>, can either be a scalar or a scalar
1018 reference.
1019
1020 The C<$level> parameter defines the compression level. Valid values are
1021 0 through 9, C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>,
1022 C<Z_BEST_COMPRESSION>, and C<Z_DEFAULT_COMPRESSION>.
1023 If C<$level> is not specified C<Z_DEFAULT_COMPRESSION> will be used.
1024
1025
1026 =item B<$dest = uncompress($source) ;>
1027
1028 Uncompresses C<$source>. If successful it returns the uncompressed
1029 data. Otherwise it returns I<undef>.
1030
1031 The source buffer can either be a scalar or a scalar reference.
1032
1033 =back
1034
1035 Please note: the two functions defined above are I<not> compatible with
1036 the Unix commands of the same name.
1037
1038 See L<IO::Deflate|IO::Deflate> and L<IO::Inflate|IO::Inflate> included with
1039 this distribution for an alternative interface for reading/writing RFC 1950
1040 files/buffers.
1041
1042
1043 =head1 Deflate Interface
1044
1045 This section defines an interface that allows in-memory compression using
1046 the I<deflate> interface provided by zlib.
1047
1048 Here is a definition of the interface available:
1049
1050
1051 =head2 B<($d, $status) = deflateInit( [OPT] )>
1052
1053 Initialises a deflation stream. 
1054
1055 It combines the features of the I<zlib> functions C<deflateInit>,
1056 C<deflateInit2> and C<deflateSetDictionary>.
1057
1058 If successful, it will return the initialised deflation stream, C<$d>
1059 and C<$status> of C<Z_OK> in a list context. In scalar context it
1060 returns the deflation stream, C<$d>, only.
1061
1062 If not successful, the returned deflation stream (C<$d>) will be
1063 I<undef> and C<$status> will hold the exact I<zlib> error code.
1064
1065 The function optionally takes a number of named options specified as
1066 C<< -Name=>value >> pairs. This allows individual options to be
1067 tailored without having to specify them all in the parameter list.
1068
1069 For backward compatibility, it is also possible to pass the parameters
1070 as a reference to a hash containing the name=>value pairs.
1071
1072 The function takes one optional parameter, a reference to a hash.  The
1073 contents of the hash allow the deflation interface to be tailored.
1074
1075 Here is a list of the valid options:
1076
1077 =over 5
1078
1079 =item B<-Level>
1080
1081 Defines the compression level. Valid values are 0 through 9,
1082 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1083 C<Z_DEFAULT_COMPRESSION>.
1084
1085 The default is Z_DEFAULT_COMPRESSION.
1086
1087 =item B<-Method>
1088
1089 Defines the compression method. The only valid value at present (and
1090 the default) is Z_DEFLATED.
1091
1092 =item B<-WindowBits>
1093
1094 To create an RFC 1950 data stream, set C<WindowBits> to a positive number.
1095
1096 To create an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1097
1098 For a full definition of the meaning and valid values for C<WindowBits> refer
1099 to the I<zlib> documentation for I<deflateInit2>.
1100
1101 Defaults to MAX_WBITS.
1102
1103 =item B<-MemLevel>
1104
1105 For a definition of the meaning and valid values for C<MemLevel>
1106 refer to the I<zlib> documentation for I<deflateInit2>.
1107
1108 Defaults to MAX_MEM_LEVEL.
1109
1110 =item B<-Strategy>
1111
1112 Defines the strategy used to tune the compression. The valid values are
1113 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 
1114
1115 The default is Z_DEFAULT_STRATEGY.
1116
1117 =item B<-Dictionary>
1118
1119 When a dictionary is specified I<Compress::Zlib> will automatically
1120 call C<deflateSetDictionary> directly after calling C<deflateInit>. The
1121 Adler32 value for the dictionary can be obtained by calling the method 
1122 C<$d->dict_adler()>.
1123
1124 The default is no dictionary.
1125
1126 =item B<-Bufsize>
1127
1128 Sets the initial size for the deflation buffer. If the buffer has to be
1129 reallocated to increase the size, it will grow in increments of
1130 C<Bufsize>.
1131
1132 The default is 4096.
1133
1134 =back
1135
1136 Here is an example of using the C<deflateInit> optional parameter list
1137 to override the default buffer size and compression level. All other
1138 options will take their default values.
1139
1140     deflateInit( -Bufsize => 300, 
1141                  -Level => Z_BEST_SPEED  ) ;
1142
1143
1144 =head2 B<($out, $status) = $d-E<gt>deflate($buffer)>
1145
1146
1147 Deflates the contents of C<$buffer>. The buffer can either be a scalar
1148 or a scalar reference.  When finished, C<$buffer> will be
1149 completely processed (assuming there were no errors). If the deflation
1150 was successful it returns the deflated output, C<$out>, and a status
1151 value, C<$status>, of C<Z_OK>.
1152
1153 On error, C<$out> will be I<undef> and C<$status> will contain the
1154 I<zlib> error code.
1155
1156 In a scalar context C<deflate> will return C<$out> only.
1157
1158 As with the I<deflate> function in I<zlib>, it is not necessarily the
1159 case that any output will be produced by this method. So don't rely on
1160 the fact that C<$out> is empty for an error test.
1161
1162
1163 =head2 B<($out, $status) = $d-E<gt>flush([flush_type])>
1164
1165 Typically used to finish the deflation. Any pending output will be
1166 returned via C<$out>.
1167 C<$status> will have a value C<Z_OK> if successful.
1168
1169 In a scalar context C<flush> will return C<$out> only.
1170
1171 Note that flushing can seriously degrade the compression ratio, so it
1172 should only be used to terminate a decompression (using C<Z_FINISH>) or
1173 when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>).
1174
1175 By default the C<flush_type> used is C<Z_FINISH>. Other valid values
1176 for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH>
1177 and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the
1178 C<flush_type> parameter if you fully understand the implications of
1179 what it does. See the C<zlib> documentation for details.
1180
1181 =head2 B<$status = $d-E<gt>deflateParams([OPT])>
1182
1183 Change settings for the deflate stream C<$d>.
1184
1185 The list of the valid options is shown below. Options not specified
1186 will remain unchanged.
1187
1188 =over 5
1189
1190 =item B<-Level>
1191
1192 Defines the compression level. Valid values are 0 through 9,
1193 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1194 C<Z_DEFAULT_COMPRESSION>.
1195
1196 =item B<-Strategy>
1197
1198 Defines the strategy used to tune the compression. The valid values are
1199 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 
1200
1201 =back
1202
1203 =head2 B<$d-E<gt>dict_adler()>
1204
1205 Returns the adler32 value for the dictionary.
1206
1207 =head2 B<$d-E<gt>msg()>
1208
1209 Returns the last error message generated by zlib.
1210
1211 =head2 B<$d-E<gt>total_in()>
1212
1213 Returns the total number of bytes uncompressed bytes input to deflate.
1214
1215 =head2 B<$d-E<gt>total_out()>
1216
1217 Returns the total number of compressed bytes output from deflate.
1218
1219 =head2 Example
1220
1221
1222 Here is a trivial example of using C<deflate>. It simply reads standard
1223 input, deflates it and writes it to standard output.
1224
1225     use strict ;
1226     use warnings ;
1227
1228     use Compress::Zlib ;
1229
1230     binmode STDIN;
1231     binmode STDOUT;
1232     my $x = deflateInit()
1233        or die "Cannot create a deflation stream\n" ;
1234
1235     my ($output, $status) ;
1236     while (<>)
1237     {
1238         ($output, $status) = $x->deflate($_) ;
1239     
1240         $status == Z_OK
1241             or die "deflation failed\n" ;
1242     
1243         print $output ;
1244     }
1245     
1246     ($output, $status) = $x->flush() ;
1247     
1248     $status == Z_OK
1249         or die "deflation failed\n" ;
1250     
1251     print $output ;
1252
1253 =head1 Inflate Interface
1254
1255 This section defines the interface available that allows in-memory
1256 uncompression using the I<deflate> interface provided by zlib.
1257
1258 Here is a definition of the interface:
1259
1260
1261 =head2 B<($i, $status) = inflateInit()>
1262
1263 Initialises an inflation stream. 
1264
1265 In a list context it returns the inflation stream, C<$i>, and the
1266 I<zlib> status code in C<$status>. In a scalar context it returns the
1267 inflation stream only.
1268
1269 If successful, C<$i> will hold the inflation stream and C<$status> will
1270 be C<Z_OK>.
1271
1272 If not successful, C<$i> will be I<undef> and C<$status> will hold the
1273 I<zlib> error code.
1274
1275 The function optionally takes a number of named options specified as
1276 C<< -Name=>value >> pairs. This allows individual options to be
1277 tailored without having to specify them all in the parameter list.
1278  
1279 For backward compatibility, it is also possible to pass the parameters
1280 as a reference to a hash containing the name=>value pairs.
1281  
1282 The function takes one optional parameter, a reference to a hash.  The
1283 contents of the hash allow the deflation interface to be tailored.
1284  
1285 Here is a list of the valid options:
1286
1287 =over 5
1288
1289 =item B<-WindowBits>
1290
1291 To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive number.
1292
1293 To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1294
1295 For a full definition of the meaning and valid values for C<WindowBits> refer
1296 to the I<zlib> documentation for I<inflateInit2>.
1297
1298 Defaults to MAX_WBITS.
1299
1300 =item B<-Bufsize>
1301
1302 Sets the initial size for the inflation buffer. If the buffer has to be
1303 reallocated to increase the size, it will grow in increments of
1304 C<Bufsize>. 
1305
1306 Default is 4096.
1307
1308 =item B<-Dictionary>
1309
1310 The default is no dictionary.
1311
1312 =back
1313
1314 Here is an example of using the C<inflateInit> optional parameter to
1315 override the default buffer size.
1316
1317     inflateInit( -Bufsize => 300 ) ;
1318
1319 =head2 B<($out, $status) = $i-E<gt>inflate($buffer)>
1320
1321 Inflates the complete contents of C<$buffer>. The buffer can either be
1322 a scalar or a scalar reference.
1323
1324 Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
1325 compressed data has been successfully reached. 
1326 If not successful, C<$out> will be I<undef> and C<$status> will hold
1327 the I<zlib> error code.
1328
1329 The C<$buffer> parameter is modified by C<inflate>. On completion it
1330 will contain what remains of the input buffer after inflation. This
1331 means that C<$buffer> will be an empty string when the return status is
1332 C<Z_OK>. When the return status is C<Z_STREAM_END> the C<$buffer>
1333 parameter will contains what (if anything) was stored in the input
1334 buffer after the deflated data stream.
1335
1336 This feature is useful when processing a file format that encapsulates
1337 a  compressed data stream (e.g. gzip, zip).
1338
1339 =head2 B<$status = $i-E<gt>inflateSync($buffer)>
1340
1341 Scans C<$buffer> until it reaches either a I<full flush point> or the
1342 end of the buffer.
1343
1344 If a I<full flush point> is found, C<Z_OK> is returned and C<$buffer>
1345 will be have all data up to the flush point removed. This can then be
1346 passed to the C<deflate> method.
1347
1348 Any other return code means that a flush point was not found. If more
1349 data is available, C<inflateSync> can be called repeatedly with more
1350 compressed data until the flush point is found.
1351
1352
1353 =head2 B<$i-E<gt>dict_adler()>
1354
1355 Returns the adler32 value for the dictionary.
1356
1357 =head2 B<$i-E<gt>msg()>
1358
1359 Returns the last error message generated by zlib.
1360
1361 =head2 B<$i-E<gt>total_in()>
1362
1363 Returns the total number of bytes compressed bytes input to inflate.
1364
1365 =head2 B<$i-E<gt>total_out()>
1366
1367 Returns the total number of uncompressed bytes output from inflate.
1368
1369 =head2 Example
1370
1371 Here is an example of using C<inflate>.
1372
1373     use strict ;
1374     use warnings ;
1375     
1376     use Compress::Zlib ;
1377     
1378     my $x = inflateInit()
1379        or die "Cannot create a inflation stream\n" ;
1380     
1381     my $input = '' ;
1382     binmode STDIN;
1383     binmode STDOUT;
1384     
1385     my ($output, $status) ;
1386     while (read(STDIN, $input, 4096))
1387     {
1388         ($output, $status) = $x->inflate(\$input) ;
1389     
1390         print $output 
1391             if $status == Z_OK or $status == Z_STREAM_END ;
1392     
1393         last if $status != Z_OK ;
1394     }
1395     
1396     die "inflation failed\n"
1397         unless $status == Z_STREAM_END ;
1398
1399 =head1 CHECKSUM FUNCTIONS
1400
1401 Two functions are provided by I<zlib> to calculate checksums. For the
1402 Perl interface, the order of the two parameters in both functions has
1403 been reversed. This allows both running checksums and one off
1404 calculations to be done.
1405
1406     $crc = adler32($buffer [,$crc]) ;
1407     $crc = crc32($buffer [,$crc]) ;
1408
1409 The buffer parameters can either be a scalar or a scalar reference.
1410
1411 If the $crc parameters is C<undef>, the crc value will be reset.
1412
1413 If you have built this module with zlib 1.2.3 or better, two more
1414 CRC-related functions are available.
1415
1416     $crc = adler32_combine($crc1, $crc2, $len2)l
1417     $crc = crc32_combine($adler1, $adler2, $len2)
1418
1419 These functions allow checksums to be merged.
1420
1421 =head1 CONSTANTS
1422
1423 All the I<zlib> constants are automatically imported when you make use
1424 of I<Compress::Zlib>.
1425
1426
1427 =head1 SEE ALSO
1428
1429 L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, 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::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
1430
1431 L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1432
1433 L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1434 L<Archive::Tar|Archive::Tar>,
1435 L<IO::Zlib|IO::Zlib>
1436
1437
1438 For RFC 1950, 1951 and 1952 see 
1439 F<http://www.faqs.org/rfcs/rfc1950.html>,
1440 F<http://www.faqs.org/rfcs/rfc1951.html> and
1441 F<http://www.faqs.org/rfcs/rfc1952.html>
1442
1443 The I<zlib> compression library was written by Jean-loup Gailly
1444 F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1445
1446 The primary site for the I<zlib> compression library is
1447 F<http://www.zlib.org>.
1448
1449 The primary site for gzip is F<http://www.gzip.org>.
1450
1451
1452
1453
1454 =head1 AUTHOR
1455
1456 This module was written by Paul Marquess, F<pmqs@cpan.org>. 
1457
1458
1459
1460 =head1 MODIFICATION HISTORY
1461
1462 See the Changes file.
1463
1464 =head1 COPYRIGHT AND LICENSE
1465
1466 Copyright (c) 1995-2007 Paul Marquess. All rights reserved.
1467
1468 This program is free software; you can redistribute it and/or
1469 modify it under the same terms as Perl itself.
1470
1471
1472