IO::Compress::* 2.011
[p5sagit/p5-mst-13.2.git] / ext / Compress / Zlib / lib / Compress / Zlib.pm
CommitLineData
25f0751f 1
2package Compress::Zlib;
3
4require 5.004 ;
5require Exporter;
6use AutoLoader;
7use Carp ;
8use IO::Handle ;
9use Scalar::Util qw(dualvar);
10
a1787f24 11use IO::Compress::Base::Common 2.011 ;
12use Compress::Raw::Zlib 2.011 ;
13use IO::Compress::Gzip 2.011 ;
14use IO::Uncompress::Gunzip 2.011 ;
25f0751f 15
16use strict ;
17use warnings ;
18use bytes ;
19our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
20
a1787f24 21$VERSION = '2.011';
25f0751f 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
37push @EXPORT, @Compress::Raw::Zlib::EXPORT ;
38
39BEGIN
40{
41 *zlib_version = \&Compress::Raw::Zlib::zlib_version;
42}
43
44sub 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
54use constant FLAG_APPEND => 1 ;
55use constant FLAG_CRC => 2 ;
56use constant FLAG_ADLER => 4 ;
57use constant FLAG_CONSUME_INPUT => 8 ;
58
59our (@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
74sub _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
91sub _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
107sub 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;
f6fd7794 123 $defOpts{Append} = 1 if $mode =~ /a/i;
25f0751f 124
125 my $infDef = $writing ? 'deflate' : 'inflate';
126 my @params = () ;
127
128 croak "gzopen: file parameter is not a filehandle or filename"
f6fd7794 129 unless isaFilehandle $file || isaFilename $file ||
130 (ref $file && ref $file eq 'SCALAR');
25f0751f 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,
f6fd7794 146 MultiStream => 1,
25f0751f 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
157sub Compress::Zlib::gzFile::gzread
158{
159 my $self = shift ;
160
161 return _set_gzerr(Z_STREAM_ERROR())
162 if $self->[1] ne 'inflate';
163
98719077 164 my $len = defined $_[1] ? $_[1] : 4096 ;
165
166 if ($self->gzeof() || $len == 0) {
cb7abd7f 167 # Zap the output buffer to match ver 1 behaviour.
168 $_[0] = "" ;
169 return 0 ;
170 }
25f0751f 171
172 my $gz = $self->[0] ;
98719077 173 my $status = $gz->read($_[0], $len) ;
25f0751f 174 _save_gzerr($gz, 1);
175 return $status ;
176}
177
178sub Compress::Zlib::gzFile::gzreadline
179{
180 my $self = shift ;
181
182 my $gz = $self->[0] ;
d56f7e4c 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 }
25f0751f 189 _save_gzerr($gz, 1);
190 return defined $_[0] ? length $_[0] : 0 ;
191}
192
193sub 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
93d092e2 201 $] >= 5.008 and (utf8::downgrade($_[0], 1)
202 or croak "Wide character in gzwrite");
203
25f0751f 204 my $status = $gz->write($_[0]) ;
205 _save_gzerr($gz);
206 return $status ;
207}
208
209sub 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
218sub 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
238sub 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) ;
aa976d0c 245 my $err = _save_gzerr($gz);
246 return $status ? 0 : $err;
25f0751f 247}
248
249sub Compress::Zlib::gzFile::gzclose
250{
251 my $self = shift ;
252 my $gz = $self->[0] ;
253
254 my $status = $gz->close() ;
aa976d0c 255 my $err = _save_gzerr($gz);
256 return $status ? 0 : $err;
25f0751f 257}
258
259sub 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
272sub 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
291sub Compress::Zlib::gzFile::gzerror
292{
293 my $self = shift ;
294 my $gz = $self->[0] ;
295
296 return $Compress::Zlib::gzerrno ;
297}
298
299
300sub 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
93d092e2 312 $] >= 5.008 and (utf8::downgrade($$in, 1)
313 or croak "Wide character in compress");
314
25f0751f 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
330sub 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
93d092e2 342 $] >= 5.008 and (utf8::downgrade($$in, 1)
343 or croak "Wide character in uncompress");
344
25f0751f 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
355sub 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
389sub 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
415package Zlib::OldDeflate ;
416
417our (@ISA);
418@ISA = qw(Compress::Raw::Zlib::deflateStream);
419
420
421sub 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
430sub 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
440package Zlib::OldInflate ;
441
442our (@ISA);
443@ISA = qw(Compress::Raw::Zlib::inflateStream);
444
445sub inflate
446{
447 my $self = shift ;
448 my $output ;
449 my $status = $self->SUPER::inflate($_[0], $output) ;
450 wantarray ? ($output, $status) : $output ;
451}
452
453package Compress::Zlib ;
454
a1787f24 455use IO::Compress::Gzip::Constants 2.011 ;
25f0751f 456
457sub memGzip($)
458{
4e7676c7 459 my $out;
460
25f0751f 461 # if the deflation buffer isn't a reference, make it one
462 my $string = (ref $_[0] ? $_[0] : \$_[0]) ;
463
93d092e2 464 $] >= 5.008 and (utf8::downgrade($$string, 1)
465 or croak "Wide character in memGzip");
466
4e7676c7 467 IO::Compress::Gzip::gzip($string, \$out, Minimal => 1)
25f0751f 468 or return undef ;
4e7676c7 469
470 return $out;
25f0751f 471}
472
473
474sub _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
533sub memGunzip($)
534{
535 # if the buffer isn't a reference, make it one
536 my $string = (ref $_[0] ? $_[0] : \$_[0]);
537
93d092e2 538 $] >= 5.008 and (utf8::downgrade($$string, 1)
539 or croak "Wide character in memGunzip");
540
25f0751f 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
5721;
573__END__
574
575
576=head1 NAME
577
578Compress::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) ;
d54256af 586 $status = $d->flush([$flush_type]) ;
25f0751f 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
25f0751f 638=head1 DESCRIPTION
639
640The I<Compress::Zlib> module provides a Perl interface to the I<zlib>
641compression library (see L</AUTHOR> for details about where to get
642I<zlib>).
643
644The C<Compress::Zlib> module can be split into two general areas of
645functionality, namely a simple read/write interface to I<gzip> files
646and a low-level in-memory compression/decompression interface.
647
f6fd7794 648Each of these areas will be discussed in the following sections.
25f0751f 649
650=head2 Notes for users of Compress::Zlib version 1
651
f6fd7794 652The main change in C<Compress::Zlib> version 2.x is that it does not now
653interface directly to the zlib library. Instead it uses the
654C<IO::Compress::Gzip> and C<IO::Uncompress::Gunzip> modules for
655reading/writing gzip files, and the C<Compress::Raw::Zlib> module for some
656low-level zlib access.
25f0751f 657
d56f7e4c 658The interface provided by version 2 of this module should be 100% backward
659compatible with version 1. If you find a difference in the expected
660behaviour please contact the author (See L</AUTHOR>). See L<GZIP INTERFACE>
25f0751f 661
d56f7e4c 662With the creation of the C<IO::Compress> and C<IO::Uncompress> modules no
663new features are planned for C<Compress::Zlib> - the new modules do
664everything that C<Compress::Zlib> does and then some. Development on
665C<Compress::Zlib> will be limited to bug fixes only.
666
667If you are writing new code, your first port of call should be one of the
668new C<IO::Compress> or C<IO::Uncompress> modules.
25f0751f 669
670=head1 GZIP INTERFACE
671
672A number of functions are supplied in I<zlib> for reading and writing
673I<gzip> files that conform to RFC 1952. This module provides an interface
674to most of them.
675
f6fd7794 676If you have previously used C<Compress::Zlib> 1.x, the following
25f0751f 677enhancements/changes have been made to the C<gzopen> interface:
678
679=over 5
680
681=item 1
682
683If you want to to open either STDIN or STDOUT with C<gzopen>, you can now
684optionally use the special filename "C<->" as a synonym for C<\*STDIN> and
685C<\*STDOUT>.
686
687=item 2
688
689In C<Compress::Zlib> version 1.x, C<gzopen> used the zlib library to open
690the underlying file. This made things especially tricky when a Perl
691filehandle was passed to C<gzopen>. Behind the scenes the numeric C file
692descriptor had to be extracted from the Perl filehandle and this passed to
693the zlib library.
694
695Apart from being non-portable to some operating systems, this made it
696difficult to use C<gzopen> in situations where you wanted to extract/create
697a gzip data stream that is embedded in a larger file, without having to
698resort to opening and closing the file multiple times.
699
700It also made it impossible to pass a perl filehandle that wasn't associated
701with a real filesystem file, like, say, an C<IO::String>.
702
703In C<Compress::Zlib> version 2.x, the C<gzopen> interface has been
704completely rewritten to use the L<IO::Compress::Gzip|IO::Compress::Gzip>
705for writing gzip files and L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>
706for reading gzip files. None of the limitations mentioned above apply.
707
708=item 3
709
710Addition of C<gzseek> to provide a restricted C<seek> interface.
711
712=item 4.
713
714Added C<gztell>.
715
716=back
717
718A more complete and flexible interface for reading/writing gzip
e7d45986 719files/buffers is included with the module C<IO-Compress-Zlib>. See
25f0751f 720L<IO::Compress::Gzip|IO::Compress::Gzip> and
721L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for more details.
722
723=over 5
724
725=item B<$gz = gzopen($filename, $mode)>
726
727=item B<$gz = gzopen($filehandle, $mode)>
728
729This function opens either the I<gzip> file C<$filename> for reading or
730writing or attaches to the opened filehandle, C<$filehandle>.
731It returns an object on success and C<undef> on failure.
732
f6fd7794 733When writing a gzip file this interface will I<always> create the smallest
25f0751f 734possible gzip header (exactly 10 bytes). If you want greater control over
f6fd7794 735what gets stored in the gzip header (like the original filename or a
736comment) use L<IO::Compress::Gzip|IO::Compress::Gzip> instead. Similarly if
737you want to read the contents of the gzip header use
738L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
25f0751f 739
740The second parameter, C<$mode>, is used to specify whether the file is
741opened for reading or writing and to optionally specify a compression
742level and compression strategy when writing. The format of the C<$mode>
743parameter is similar to the mode parameter to the 'C' function C<fopen>,
f6fd7794 744so "rb" is used to open for reading, "wb" for writing and "ab" for
745appending (writing at the end of the file).
25f0751f 746
747To specify a compression level when writing, append a digit between 0
748and 9 to the mode string -- 0 means no compression and 9 means maximum
749compression.
750If no compression level is specified Z_DEFAULT_COMPRESSION is used.
751
752To specify the compression strategy when writing, append 'f' for filtered
753data, 'h' for Huffman only compression, or 'R' for run-length encoding.
754If no strategy is specified Z_DEFAULT_STRATEGY is used.
755
756So, for example, "wb9" means open for writing with the maximum compression
757using the default strategy and "wb4R" means open for writing with compression
758level 4 and run-length encoding.
759
760Refer to the I<zlib> documentation for the exact format of the C<$mode>
761parameter.
762
25f0751f 763=item B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>
764
765Reads C<$size> bytes from the compressed file into C<$buffer>. If
766C<$size> is not specified, it will default to 4096. If the scalar
767C<$buffer> is not large enough, it will be extended automatically.
768
769Returns the number of bytes actually read. On EOF it returns 0 and in
770the case of an error, -1.
771
772=item B<$bytesread = $gz-E<gt>gzreadline($line) ;>
773
774Reads the next line from the compressed file into C<$line>.
775
776Returns the number of bytes actually read. On EOF it returns 0 and in
777the case of an error, -1.
778
779It is legal to intermix calls to C<gzread> and C<gzreadline>.
780
d56f7e4c 781To maintain backward compatibility with version 1.x of this module
782C<gzreadline> ignores the C<$/> variable - it I<always> uses the string
783C<"\n"> as the line delimiter.
25f0751f 784
d56f7e4c 785If you want to read a gzip file a line at a time and have it respect the
786C<$/> variable (or C<$INPUT_RECORD_SEPARATOR>, or C<$RS> when C<English> is
787in use) see L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
25f0751f 788
789=item B<$byteswritten = $gz-E<gt>gzwrite($buffer) ;>
790
791Writes the contents of C<$buffer> to the compressed file. Returns the
792number of bytes actually written, or 0 on error.
793
794=item B<$status = $gz-E<gt>gzflush($flush_type) ;>
795
796Flushes all pending output into the compressed file.
797
798This method takes an optional parameter, C<$flush_type>, that controls
799how the flushing will be carried out. By default the C<$flush_type>
800used is C<Z_FINISH>. Other valid values for C<$flush_type> are
801C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
802strongly recommended that you only set the C<flush_type> parameter if
803you fully understand the implications of what it does - overuse of C<flush>
804can seriously degrade the level of compression achieved. See the C<zlib>
805documentation for details.
806
aa976d0c 807Returns 0 on success.
25f0751f 808
25f0751f 809=item B<$offset = $gz-E<gt>gztell() ;>
810
811Returns the uncompressed file offset.
812
813=item B<$status = $gz-E<gt>gzseek($offset, $whence) ;>
814
815Provides a sub-set of the C<seek> functionality, with the restriction
816that it is only legal to seek forward in the compressed file.
817It is a fatal error to attempt to seek backward.
818
819When opened for writing, empty parts of the file will have NULL (0x00)
820bytes written to them.
821
822The C<$whence> parameter should be one of SEEK_SET, SEEK_CUR or SEEK_END.
823
824Returns 1 on success, 0 on failure.
825
826=item B<$gz-E<gt>gzclose>
827
828Closes the compressed file. Any pending data is flushed to the file
829before it is closed.
830
aa976d0c 831Returns 0 on success.
25f0751f 832
833=item B<$gz-E<gt>gzsetparams($level, $strategy>
834
835Change settings for the deflate stream C<$gz>.
836
837The list of the valid options is shown below. Options not specified
838will remain unchanged.
839
840Note: This method is only available if you are running zlib 1.0.6 or better.
841
842=over 5
843
844=item B<$level>
845
846Defines the compression level. Valid values are 0 through 9,
847C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
848C<Z_DEFAULT_COMPRESSION>.
849
850=item B<$strategy>
851
852Defines the strategy used to tune the compression. The valid values are
853C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
854
855=back
856
857=item B<$gz-E<gt>gzerror>
858
859Returns the I<zlib> error message or number for the last operation
860associated with C<$gz>. The return value will be the I<zlib> error
861number when used in a numeric context and the I<zlib> error message
862when used in a string context. The I<zlib> error number constants,
863shown below, are available for use.
864
865 Z_OK
866 Z_STREAM_END
867 Z_ERRNO
868 Z_STREAM_ERROR
869 Z_DATA_ERROR
870 Z_MEM_ERROR
871 Z_BUF_ERROR
872
873=item B<$gzerrno>
874
875The C<$gzerrno> scalar holds the error code associated with the most
876recent I<gzip> routine. Note that unlike C<gzerror()>, the error is
877I<not> associated with a particular file.
878
879As with C<gzerror()> it returns an error number in numeric context and
880an error message in string context. Unlike C<gzerror()> though, the
881error message will correspond to the I<zlib> message when the error is
882associated with I<zlib> itself, or the UNIX error message when it is
883not (i.e. I<zlib> returned C<Z_ERRORNO>).
884
885As there is an overlap between the error numbers used by I<zlib> and
886UNIX, C<$gzerrno> should only be used to check for the presence of
887I<an> error in numeric context. Use C<gzerror()> to check for specific
888I<zlib> errors. The I<gzcat> example below shows how the variable can
889be used safely.
890
891=back
892
25f0751f 893=head2 Examples
894
895Here is an example script which uses the interface. It implements a
896I<gzcat> function.
897
898 use strict ;
899 use warnings ;
900
901 use Compress::Zlib ;
902
903 # use stdin if no files supplied
904 @ARGV = '-' unless @ARGV ;
905
906 foreach my $file (@ARGV) {
907 my $buffer ;
908
909 my $gz = gzopen($file, "rb")
910 or die "Cannot open $file: $gzerrno\n" ;
911
912 print $buffer while $gz->gzread($buffer) > 0 ;
913
914 die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\n"
915 if $gzerrno != Z_STREAM_END ;
916
917 $gz->gzclose() ;
918 }
919
920Below is a script which makes use of C<gzreadline>. It implements a
921very simple I<grep> like script.
922
923 use strict ;
924 use warnings ;
925
926 use Compress::Zlib ;
927
928 die "Usage: gzgrep pattern [file...]\n"
929 unless @ARGV >= 1;
930
931 my $pattern = shift ;
932
933 # use stdin if no files supplied
934 @ARGV = '-' unless @ARGV ;
935
936 foreach my $file (@ARGV) {
937 my $gz = gzopen($file, "rb")
938 or die "Cannot open $file: $gzerrno\n" ;
939
940 while ($gz->gzreadline($_) > 0) {
941 print if /$pattern/ ;
942 }
943
944 die "Error reading from $file: $gzerrno\n"
945 if $gzerrno != Z_STREAM_END ;
946
947 $gz->gzclose() ;
948 }
949
950This script, I<gzstream>, does the opposite of the I<gzcat> script
951above. It reads from standard input and writes a gzip data stream to
952standard output.
953
954 use strict ;
955 use warnings ;
956
957 use Compress::Zlib ;
958
959 binmode STDOUT; # gzopen only sets it on the fd
960
961 my $gz = gzopen(\*STDOUT, "wb")
962 or die "Cannot open stdout: $gzerrno\n" ;
963
964 while (<>) {
965 $gz->gzwrite($_)
966 or die "error writing: $gzerrno\n" ;
967 }
968
969 $gz->gzclose ;
970
971=head2 Compress::Zlib::memGzip
972
973This function is used to create an in-memory gzip file with the minimum
974possible gzip header (exactly 10 bytes).
975
976 $dest = Compress::Zlib::memGzip($buffer) ;
977
978If successful, it returns the in-memory gzip file, otherwise it returns
979undef.
980
981The C<$buffer> parameter can either be a scalar or a scalar reference.
982
983See L<IO::Compress::Gzip|IO::Compress::Gzip> for an alternative way to
984carry out in-memory gzip compression.
985
986=head2 Compress::Zlib::memGunzip
987
988This function is used to uncompress an in-memory gzip file.
989
990 $dest = Compress::Zlib::memGunzip($buffer) ;
991
992If successful, it returns the uncompressed gzip file, otherwise it
993returns undef.
994
995The C<$buffer> parameter can either be a scalar or a scalar reference. The
996contents of the C<$buffer> parameter are destroyed after calling this function.
997
998See L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for an alternative way
999to carry out in-memory gzip uncompression.
1000
1001=head1 COMPRESS/UNCOMPRESS
1002
1003Two functions are provided to perform in-memory compression/uncompression of
1004RFC 1950 data streams. They are called C<compress> and C<uncompress>.
1005
1006=over 5
1007
1008=item B<$dest = compress($source [, $level] ) ;>
1009
1010Compresses C<$source>. If successful it returns the compressed
1011data. Otherwise it returns I<undef>.
1012
1013The source buffer, C<$source>, can either be a scalar or a scalar
1014reference.
1015
1016The C<$level> parameter defines the compression level. Valid values are
10170 through 9, C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>,
1018C<Z_BEST_COMPRESSION>, and C<Z_DEFAULT_COMPRESSION>.
1019If C<$level> is not specified C<Z_DEFAULT_COMPRESSION> will be used.
1020
25f0751f 1021=item B<$dest = uncompress($source) ;>
1022
1023Uncompresses C<$source>. If successful it returns the uncompressed
1024data. Otherwise it returns I<undef>.
1025
1026The source buffer can either be a scalar or a scalar reference.
1027
1028=back
1029
1030Please note: the two functions defined above are I<not> compatible with
1031the Unix commands of the same name.
1032
1033See L<IO::Deflate|IO::Deflate> and L<IO::Inflate|IO::Inflate> included with
1034this distribution for an alternative interface for reading/writing RFC 1950
1035files/buffers.
1036
25f0751f 1037=head1 Deflate Interface
1038
1039This section defines an interface that allows in-memory compression using
1040the I<deflate> interface provided by zlib.
1041
1042Here is a definition of the interface available:
1043
25f0751f 1044=head2 B<($d, $status) = deflateInit( [OPT] )>
1045
1046Initialises a deflation stream.
1047
1048It combines the features of the I<zlib> functions C<deflateInit>,
1049C<deflateInit2> and C<deflateSetDictionary>.
1050
1051If successful, it will return the initialised deflation stream, C<$d>
1052and C<$status> of C<Z_OK> in a list context. In scalar context it
1053returns the deflation stream, C<$d>, only.
1054
1055If not successful, the returned deflation stream (C<$d>) will be
1056I<undef> and C<$status> will hold the exact I<zlib> error code.
1057
1058The function optionally takes a number of named options specified as
e7d45986 1059C<< -Name=>value >> pairs. This allows individual options to be
25f0751f 1060tailored without having to specify them all in the parameter list.
1061
1062For backward compatibility, it is also possible to pass the parameters
1063as a reference to a hash containing the name=>value pairs.
1064
1065The function takes one optional parameter, a reference to a hash. The
1066contents of the hash allow the deflation interface to be tailored.
1067
1068Here is a list of the valid options:
1069
1070=over 5
1071
1072=item B<-Level>
1073
1074Defines the compression level. Valid values are 0 through 9,
1075C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1076C<Z_DEFAULT_COMPRESSION>.
1077
e7d45986 1078The default is Z_DEFAULT_COMPRESSION.
25f0751f 1079
1080=item B<-Method>
1081
1082Defines the compression method. The only valid value at present (and
e7d45986 1083the default) is Z_DEFLATED.
25f0751f 1084
1085=item B<-WindowBits>
1086
1087To create an RFC 1950 data stream, set C<WindowBits> to a positive number.
1088
1089To create an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1090
1091For a full definition of the meaning and valid values for C<WindowBits> refer
1092to the I<zlib> documentation for I<deflateInit2>.
1093
e7d45986 1094Defaults to MAX_WBITS.
25f0751f 1095
1096=item B<-MemLevel>
1097
1098For a definition of the meaning and valid values for C<MemLevel>
1099refer to the I<zlib> documentation for I<deflateInit2>.
1100
e7d45986 1101Defaults to MAX_MEM_LEVEL.
25f0751f 1102
1103=item B<-Strategy>
1104
1105Defines the strategy used to tune the compression. The valid values are
1106C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
1107
e7d45986 1108The default is Z_DEFAULT_STRATEGY.
25f0751f 1109
1110=item B<-Dictionary>
1111
1112When a dictionary is specified I<Compress::Zlib> will automatically
1113call C<deflateSetDictionary> directly after calling C<deflateInit>. The
1114Adler32 value for the dictionary can be obtained by calling the method
1115C<$d->dict_adler()>.
1116
1117The default is no dictionary.
1118
1119=item B<-Bufsize>
1120
1121Sets the initial size for the deflation buffer. If the buffer has to be
1122reallocated to increase the size, it will grow in increments of
1123C<Bufsize>.
1124
1125The default is 4096.
1126
1127=back
1128
1129Here is an example of using the C<deflateInit> optional parameter list
1130to override the default buffer size and compression level. All other
1131options will take their default values.
1132
1133 deflateInit( -Bufsize => 300,
1134 -Level => Z_BEST_SPEED ) ;
1135
25f0751f 1136=head2 B<($out, $status) = $d-E<gt>deflate($buffer)>
1137
25f0751f 1138Deflates the contents of C<$buffer>. The buffer can either be a scalar
1139or a scalar reference. When finished, C<$buffer> will be
1140completely processed (assuming there were no errors). If the deflation
1141was successful it returns the deflated output, C<$out>, and a status
1142value, C<$status>, of C<Z_OK>.
1143
1144On error, C<$out> will be I<undef> and C<$status> will contain the
1145I<zlib> error code.
1146
1147In a scalar context C<deflate> will return C<$out> only.
1148
1149As with the I<deflate> function in I<zlib>, it is not necessarily the
1150case that any output will be produced by this method. So don't rely on
1151the fact that C<$out> is empty for an error test.
1152
d54256af 1153=head2 B<($out, $status) = $d-E<gt>flush()>
1154=head2 B<($out, $status) = $d-E<gt>flush($flush_type)>
25f0751f 1155
1156Typically used to finish the deflation. Any pending output will be
1157returned via C<$out>.
1158C<$status> will have a value C<Z_OK> if successful.
1159
1160In a scalar context C<flush> will return C<$out> only.
1161
1162Note that flushing can seriously degrade the compression ratio, so it
1163should only be used to terminate a decompression (using C<Z_FINISH>) or
1164when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>).
1165
1166By default the C<flush_type> used is C<Z_FINISH>. Other valid values
1167for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH>
1168and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the
1169C<flush_type> parameter if you fully understand the implications of
1170what it does. See the C<zlib> documentation for details.
1171
1172=head2 B<$status = $d-E<gt>deflateParams([OPT])>
1173
1174Change settings for the deflate stream C<$d>.
1175
1176The list of the valid options is shown below. Options not specified
1177will remain unchanged.
1178
1179=over 5
1180
1181=item B<-Level>
1182
1183Defines the compression level. Valid values are 0 through 9,
1184C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1185C<Z_DEFAULT_COMPRESSION>.
1186
1187=item B<-Strategy>
1188
1189Defines the strategy used to tune the compression. The valid values are
1190C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
1191
1192=back
1193
1194=head2 B<$d-E<gt>dict_adler()>
1195
1196Returns the adler32 value for the dictionary.
1197
1198=head2 B<$d-E<gt>msg()>
1199
1200Returns the last error message generated by zlib.
1201
1202=head2 B<$d-E<gt>total_in()>
1203
1204Returns the total number of bytes uncompressed bytes input to deflate.
1205
1206=head2 B<$d-E<gt>total_out()>
1207
1208Returns the total number of compressed bytes output from deflate.
1209
1210=head2 Example
1211
25f0751f 1212Here is a trivial example of using C<deflate>. It simply reads standard
1213input, deflates it and writes it to standard output.
1214
1215 use strict ;
1216 use warnings ;
1217
1218 use Compress::Zlib ;
1219
1220 binmode STDIN;
1221 binmode STDOUT;
1222 my $x = deflateInit()
1223 or die "Cannot create a deflation stream\n" ;
1224
1225 my ($output, $status) ;
1226 while (<>)
1227 {
1228 ($output, $status) = $x->deflate($_) ;
1229
1230 $status == Z_OK
1231 or die "deflation failed\n" ;
1232
1233 print $output ;
1234 }
1235
1236 ($output, $status) = $x->flush() ;
1237
1238 $status == Z_OK
1239 or die "deflation failed\n" ;
1240
1241 print $output ;
1242
1243=head1 Inflate Interface
1244
1245This section defines the interface available that allows in-memory
1246uncompression using the I<deflate> interface provided by zlib.
1247
1248Here is a definition of the interface:
1249
25f0751f 1250=head2 B<($i, $status) = inflateInit()>
1251
1252Initialises an inflation stream.
1253
1254In a list context it returns the inflation stream, C<$i>, and the
1255I<zlib> status code in C<$status>. In a scalar context it returns the
1256inflation stream only.
1257
1258If successful, C<$i> will hold the inflation stream and C<$status> will
1259be C<Z_OK>.
1260
1261If not successful, C<$i> will be I<undef> and C<$status> will hold the
1262I<zlib> error code.
1263
1264The function optionally takes a number of named options specified as
e7d45986 1265C<< -Name=>value >> pairs. This allows individual options to be
25f0751f 1266tailored without having to specify them all in the parameter list.
1267
1268For backward compatibility, it is also possible to pass the parameters
1269as a reference to a hash containing the name=>value pairs.
1270
1271The function takes one optional parameter, a reference to a hash. The
1272contents of the hash allow the deflation interface to be tailored.
1273
1274Here is a list of the valid options:
1275
1276=over 5
1277
1278=item B<-WindowBits>
1279
1280To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive number.
1281
1282To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1283
1284For a full definition of the meaning and valid values for C<WindowBits> refer
1285to the I<zlib> documentation for I<inflateInit2>.
1286
e7d45986 1287Defaults to MAX_WBITS.
25f0751f 1288
1289=item B<-Bufsize>
1290
1291Sets the initial size for the inflation buffer. If the buffer has to be
1292reallocated to increase the size, it will grow in increments of
1293C<Bufsize>.
1294
1295Default is 4096.
1296
1297=item B<-Dictionary>
1298
1299The default is no dictionary.
1300
1301=back
1302
1303Here is an example of using the C<inflateInit> optional parameter to
1304override the default buffer size.
1305
1306 inflateInit( -Bufsize => 300 ) ;
1307
1308=head2 B<($out, $status) = $i-E<gt>inflate($buffer)>
1309
1310Inflates the complete contents of C<$buffer>. The buffer can either be
1311a scalar or a scalar reference.
1312
1313Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
1314compressed data has been successfully reached.
1315If not successful, C<$out> will be I<undef> and C<$status> will hold
1316the I<zlib> error code.
1317
1318The C<$buffer> parameter is modified by C<inflate>. On completion it
1319will contain what remains of the input buffer after inflation. This
1320means that C<$buffer> will be an empty string when the return status is
1321C<Z_OK>. When the return status is C<Z_STREAM_END> the C<$buffer>
1322parameter will contains what (if anything) was stored in the input
1323buffer after the deflated data stream.
1324
1325This feature is useful when processing a file format that encapsulates
1326a compressed data stream (e.g. gzip, zip).
1327
1328=head2 B<$status = $i-E<gt>inflateSync($buffer)>
1329
1330Scans C<$buffer> until it reaches either a I<full flush point> or the
1331end of the buffer.
1332
1333If a I<full flush point> is found, C<Z_OK> is returned and C<$buffer>
1334will be have all data up to the flush point removed. This can then be
1335passed to the C<deflate> method.
1336
1337Any other return code means that a flush point was not found. If more
1338data is available, C<inflateSync> can be called repeatedly with more
1339compressed data until the flush point is found.
1340
25f0751f 1341=head2 B<$i-E<gt>dict_adler()>
1342
1343Returns the adler32 value for the dictionary.
1344
1345=head2 B<$i-E<gt>msg()>
1346
1347Returns the last error message generated by zlib.
1348
1349=head2 B<$i-E<gt>total_in()>
1350
1351Returns the total number of bytes compressed bytes input to inflate.
1352
1353=head2 B<$i-E<gt>total_out()>
1354
1355Returns the total number of uncompressed bytes output from inflate.
1356
1357=head2 Example
1358
1359Here is an example of using C<inflate>.
1360
1361 use strict ;
1362 use warnings ;
1363
1364 use Compress::Zlib ;
1365
1366 my $x = inflateInit()
1367 or die "Cannot create a inflation stream\n" ;
1368
1369 my $input = '' ;
1370 binmode STDIN;
1371 binmode STDOUT;
1372
1373 my ($output, $status) ;
1374 while (read(STDIN, $input, 4096))
1375 {
1376 ($output, $status) = $x->inflate(\$input) ;
1377
1378 print $output
1379 if $status == Z_OK or $status == Z_STREAM_END ;
1380
1381 last if $status != Z_OK ;
1382 }
1383
1384 die "inflation failed\n"
1385 unless $status == Z_STREAM_END ;
1386
1387=head1 CHECKSUM FUNCTIONS
1388
1389Two functions are provided by I<zlib> to calculate checksums. For the
1390Perl interface, the order of the two parameters in both functions has
1391been reversed. This allows both running checksums and one off
1392calculations to be done.
1393
1394 $crc = adler32($buffer [,$crc]) ;
1395 $crc = crc32($buffer [,$crc]) ;
1396
1397The buffer parameters can either be a scalar or a scalar reference.
1398
1399If the $crc parameters is C<undef>, the crc value will be reset.
1400
1401If you have built this module with zlib 1.2.3 or better, two more
1402CRC-related functions are available.
1403
1404 $crc = adler32_combine($crc1, $crc2, $len2)l
1405 $crc = crc32_combine($adler1, $adler2, $len2)
1406
1407These functions allow checksums to be merged.
1408
25f0751f 1409=head1 CONSTANTS
1410
1411All the I<zlib> constants are automatically imported when you make use
1412of I<Compress::Zlib>.
1413
25f0751f 1414=head1 SEE ALSO
1415
258133d1 1416L<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>
25f0751f 1417
1418L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1419
1420L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1421L<Archive::Tar|Archive::Tar>,
1422L<IO::Zlib|IO::Zlib>
1423
25f0751f 1424For RFC 1950, 1951 and 1952 see
1425F<http://www.faqs.org/rfcs/rfc1950.html>,
1426F<http://www.faqs.org/rfcs/rfc1951.html> and
1427F<http://www.faqs.org/rfcs/rfc1952.html>
1428
1429The I<zlib> compression library was written by Jean-loup Gailly
1430F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1431
1432The primary site for the I<zlib> compression library is
1433F<http://www.zlib.org>.
1434
1435The primary site for gzip is F<http://www.gzip.org>.
1436
25f0751f 1437=head1 AUTHOR
1438
cb7abd7f 1439This module was written by Paul Marquess, F<pmqs@cpan.org>.
25f0751f 1440
25f0751f 1441=head1 MODIFICATION HISTORY
1442
1443See the Changes file.
1444
1445=head1 COPYRIGHT AND LICENSE
25f0751f 1446
d54256af 1447Copyright (c) 1995-2008 Paul Marquess. All rights reserved.
25f0751f 1448
1449This program is free software; you can redistribute it and/or
1450modify it under the same terms as Perl itself.
1451