Upgrade to Math::BigInt v1.89
[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
80e5fcd6 11use IO::Compress::Base::Common 2.008 ;
12use Compress::Raw::Zlib 2.008 ;
13use IO::Compress::Gzip 2.008 ;
14use IO::Uncompress::Gunzip 2.008 ;
25f0751f 15
16use strict ;
17use warnings ;
18use bytes ;
19our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
20
80e5fcd6 21$VERSION = '2.008';
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
80e5fcd6 455use IO::Compress::Gzip::Constants 2.008 ;
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) ;
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
642The I<Compress::Zlib> module provides a Perl interface to the I<zlib>
643compression library (see L</AUTHOR> for details about where to get
644I<zlib>).
645
646The C<Compress::Zlib> module can be split into two general areas of
647functionality, namely a simple read/write interface to I<gzip> files
648and a low-level in-memory compression/decompression interface.
649
f6fd7794 650Each of these areas will be discussed in the following sections.
25f0751f 651
652=head2 Notes for users of Compress::Zlib version 1
653
f6fd7794 654The main change in C<Compress::Zlib> version 2.x is that it does not now
655interface directly to the zlib library. Instead it uses the
656C<IO::Compress::Gzip> and C<IO::Uncompress::Gunzip> modules for
657reading/writing gzip files, and the C<Compress::Raw::Zlib> module for some
658low-level zlib access.
25f0751f 659
d56f7e4c 660The interface provided by version 2 of this module should be 100% backward
661compatible with version 1. If you find a difference in the expected
662behaviour please contact the author (See L</AUTHOR>). See L<GZIP INTERFACE>
25f0751f 663
d56f7e4c 664With the creation of the C<IO::Compress> and C<IO::Uncompress> modules no
665new features are planned for C<Compress::Zlib> - the new modules do
666everything that C<Compress::Zlib> does and then some. Development on
667C<Compress::Zlib> will be limited to bug fixes only.
668
669If you are writing new code, your first port of call should be one of the
670new C<IO::Compress> or C<IO::Uncompress> modules.
25f0751f 671
672=head1 GZIP INTERFACE
673
674A number of functions are supplied in I<zlib> for reading and writing
675I<gzip> files that conform to RFC 1952. This module provides an interface
676to most of them.
677
f6fd7794 678If you have previously used C<Compress::Zlib> 1.x, the following
25f0751f 679enhancements/changes have been made to the C<gzopen> interface:
680
681=over 5
682
683=item 1
684
685If you want to to open either STDIN or STDOUT with C<gzopen>, you can now
686optionally use the special filename "C<->" as a synonym for C<\*STDIN> and
687C<\*STDOUT>.
688
689=item 2
690
691In C<Compress::Zlib> version 1.x, C<gzopen> used the zlib library to open
692the underlying file. This made things especially tricky when a Perl
693filehandle was passed to C<gzopen>. Behind the scenes the numeric C file
694descriptor had to be extracted from the Perl filehandle and this passed to
695the zlib library.
696
697Apart from being non-portable to some operating systems, this made it
698difficult to use C<gzopen> in situations where you wanted to extract/create
699a gzip data stream that is embedded in a larger file, without having to
700resort to opening and closing the file multiple times.
701
702It also made it impossible to pass a perl filehandle that wasn't associated
703with a real filesystem file, like, say, an C<IO::String>.
704
705In C<Compress::Zlib> version 2.x, the C<gzopen> interface has been
706completely rewritten to use the L<IO::Compress::Gzip|IO::Compress::Gzip>
707for writing gzip files and L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>
708for reading gzip files. None of the limitations mentioned above apply.
709
710=item 3
711
712Addition of C<gzseek> to provide a restricted C<seek> interface.
713
714=item 4.
715
716Added C<gztell>.
717
718=back
719
720A more complete and flexible interface for reading/writing gzip
e7d45986 721files/buffers is included with the module C<IO-Compress-Zlib>. See
25f0751f 722L<IO::Compress::Gzip|IO::Compress::Gzip> and
723L<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
731This function opens either the I<gzip> file C<$filename> for reading or
732writing or attaches to the opened filehandle, C<$filehandle>.
733It returns an object on success and C<undef> on failure.
734
f6fd7794 735When writing a gzip file this interface will I<always> create the smallest
25f0751f 736possible gzip header (exactly 10 bytes). If you want greater control over
f6fd7794 737what gets stored in the gzip header (like the original filename or a
738comment) use L<IO::Compress::Gzip|IO::Compress::Gzip> instead. Similarly if
739you want to read the contents of the gzip header use
740L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
25f0751f 741
742The second parameter, C<$mode>, is used to specify whether the file is
743opened for reading or writing and to optionally specify a compression
744level and compression strategy when writing. The format of the C<$mode>
745parameter is similar to the mode parameter to the 'C' function C<fopen>,
f6fd7794 746so "rb" is used to open for reading, "wb" for writing and "ab" for
747appending (writing at the end of the file).
25f0751f 748
749To specify a compression level when writing, append a digit between 0
750and 9 to the mode string -- 0 means no compression and 9 means maximum
751compression.
752If no compression level is specified Z_DEFAULT_COMPRESSION is used.
753
754To specify the compression strategy when writing, append 'f' for filtered
755data, 'h' for Huffman only compression, or 'R' for run-length encoding.
756If no strategy is specified Z_DEFAULT_STRATEGY is used.
757
758So, for example, "wb9" means open for writing with the maximum compression
759using the default strategy and "wb4R" means open for writing with compression
760level 4 and run-length encoding.
761
762Refer to the I<zlib> documentation for the exact format of the C<$mode>
763parameter.
764
25f0751f 765=item B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>
766
767Reads C<$size> bytes from the compressed file into C<$buffer>. If
768C<$size> is not specified, it will default to 4096. If the scalar
769C<$buffer> is not large enough, it will be extended automatically.
770
771Returns the number of bytes actually read. On EOF it returns 0 and in
772the case of an error, -1.
773
774=item B<$bytesread = $gz-E<gt>gzreadline($line) ;>
775
776Reads the next line from the compressed file into C<$line>.
777
778Returns the number of bytes actually read. On EOF it returns 0 and in
779the case of an error, -1.
780
781It is legal to intermix calls to C<gzread> and C<gzreadline>.
782
d56f7e4c 783To maintain backward compatibility with version 1.x of this module
784C<gzreadline> ignores the C<$/> variable - it I<always> uses the string
785C<"\n"> as the line delimiter.
25f0751f 786
d56f7e4c 787If you want to read a gzip file a line at a time and have it respect the
788C<$/> variable (or C<$INPUT_RECORD_SEPARATOR>, or C<$RS> when C<English> is
789in use) see L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
25f0751f 790
791=item B<$byteswritten = $gz-E<gt>gzwrite($buffer) ;>
792
793Writes the contents of C<$buffer> to the compressed file. Returns the
794number of bytes actually written, or 0 on error.
795
796=item B<$status = $gz-E<gt>gzflush($flush_type) ;>
797
798Flushes all pending output into the compressed file.
799
800This method takes an optional parameter, C<$flush_type>, that controls
801how the flushing will be carried out. By default the C<$flush_type>
802used is C<Z_FINISH>. Other valid values for C<$flush_type> are
803C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
804strongly recommended that you only set the C<flush_type> parameter if
805you fully understand the implications of what it does - overuse of C<flush>
806can seriously degrade the level of compression achieved. See the C<zlib>
807documentation for details.
808
aa976d0c 809Returns 0 on success.
25f0751f 810
811
812=item B<$offset = $gz-E<gt>gztell() ;>
813
814Returns the uncompressed file offset.
815
816=item B<$status = $gz-E<gt>gzseek($offset, $whence) ;>
817
818Provides a sub-set of the C<seek> functionality, with the restriction
819that it is only legal to seek forward in the compressed file.
820It is a fatal error to attempt to seek backward.
821
822When opened for writing, empty parts of the file will have NULL (0x00)
823bytes written to them.
824
825The C<$whence> parameter should be one of SEEK_SET, SEEK_CUR or SEEK_END.
826
827Returns 1 on success, 0 on failure.
828
829=item B<$gz-E<gt>gzclose>
830
831Closes the compressed file. Any pending data is flushed to the file
832before it is closed.
833
aa976d0c 834Returns 0 on success.
25f0751f 835
836=item B<$gz-E<gt>gzsetparams($level, $strategy>
837
838Change settings for the deflate stream C<$gz>.
839
840The list of the valid options is shown below. Options not specified
841will remain unchanged.
842
843Note: 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
849Defines the compression level. Valid values are 0 through 9,
850C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
851C<Z_DEFAULT_COMPRESSION>.
852
853=item B<$strategy>
854
855Defines the strategy used to tune the compression. The valid values are
856C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
857
858=back
859
860=item B<$gz-E<gt>gzerror>
861
862Returns the I<zlib> error message or number for the last operation
863associated with C<$gz>. The return value will be the I<zlib> error
864number when used in a numeric context and the I<zlib> error message
865when used in a string context. The I<zlib> error number constants,
866shown 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
878The C<$gzerrno> scalar holds the error code associated with the most
879recent I<gzip> routine. Note that unlike C<gzerror()>, the error is
880I<not> associated with a particular file.
881
882As with C<gzerror()> it returns an error number in numeric context and
883an error message in string context. Unlike C<gzerror()> though, the
884error message will correspond to the I<zlib> message when the error is
885associated with I<zlib> itself, or the UNIX error message when it is
886not (i.e. I<zlib> returned C<Z_ERRORNO>).
887
888As there is an overlap between the error numbers used by I<zlib> and
889UNIX, C<$gzerrno> should only be used to check for the presence of
890I<an> error in numeric context. Use C<gzerror()> to check for specific
891I<zlib> errors. The I<gzcat> example below shows how the variable can
892be used safely.
893
894=back
895
896
897=head2 Examples
898
899Here is an example script which uses the interface. It implements a
900I<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
924Below is a script which makes use of C<gzreadline>. It implements a
925very 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
954This script, I<gzstream>, does the opposite of the I<gzcat> script
955above. It reads from standard input and writes a gzip data stream to
956standard 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
977This function is used to create an in-memory gzip file with the minimum
978possible gzip header (exactly 10 bytes).
979
980 $dest = Compress::Zlib::memGzip($buffer) ;
981
982If successful, it returns the in-memory gzip file, otherwise it returns
983undef.
984
985The C<$buffer> parameter can either be a scalar or a scalar reference.
986
987See L<IO::Compress::Gzip|IO::Compress::Gzip> for an alternative way to
988carry out in-memory gzip compression.
989
990=head2 Compress::Zlib::memGunzip
991
992This function is used to uncompress an in-memory gzip file.
993
994 $dest = Compress::Zlib::memGunzip($buffer) ;
995
996If successful, it returns the uncompressed gzip file, otherwise it
997returns undef.
998
999The C<$buffer> parameter can either be a scalar or a scalar reference. The
1000contents of the C<$buffer> parameter are destroyed after calling this function.
1001
1002See L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for an alternative way
1003to carry out in-memory gzip uncompression.
1004
1005=head1 COMPRESS/UNCOMPRESS
1006
1007Two functions are provided to perform in-memory compression/uncompression of
1008RFC 1950 data streams. They are called C<compress> and C<uncompress>.
1009
1010=over 5
1011
1012=item B<$dest = compress($source [, $level] ) ;>
1013
1014Compresses C<$source>. If successful it returns the compressed
1015data. Otherwise it returns I<undef>.
1016
1017The source buffer, C<$source>, can either be a scalar or a scalar
1018reference.
1019
1020The C<$level> parameter defines the compression level. Valid values are
10210 through 9, C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>,
1022C<Z_BEST_COMPRESSION>, and C<Z_DEFAULT_COMPRESSION>.
1023If C<$level> is not specified C<Z_DEFAULT_COMPRESSION> will be used.
1024
1025
1026=item B<$dest = uncompress($source) ;>
1027
1028Uncompresses C<$source>. If successful it returns the uncompressed
1029data. Otherwise it returns I<undef>.
1030
1031The source buffer can either be a scalar or a scalar reference.
1032
1033=back
1034
1035Please note: the two functions defined above are I<not> compatible with
1036the Unix commands of the same name.
1037
1038See L<IO::Deflate|IO::Deflate> and L<IO::Inflate|IO::Inflate> included with
1039this distribution for an alternative interface for reading/writing RFC 1950
1040files/buffers.
1041
1042
1043=head1 Deflate Interface
1044
1045This section defines an interface that allows in-memory compression using
1046the I<deflate> interface provided by zlib.
1047
1048Here is a definition of the interface available:
1049
1050
1051=head2 B<($d, $status) = deflateInit( [OPT] )>
1052
1053Initialises a deflation stream.
1054
1055It combines the features of the I<zlib> functions C<deflateInit>,
1056C<deflateInit2> and C<deflateSetDictionary>.
1057
1058If successful, it will return the initialised deflation stream, C<$d>
1059and C<$status> of C<Z_OK> in a list context. In scalar context it
1060returns the deflation stream, C<$d>, only.
1061
1062If not successful, the returned deflation stream (C<$d>) will be
1063I<undef> and C<$status> will hold the exact I<zlib> error code.
1064
1065The function optionally takes a number of named options specified as
e7d45986 1066C<< -Name=>value >> pairs. This allows individual options to be
25f0751f 1067tailored without having to specify them all in the parameter list.
1068
1069For backward compatibility, it is also possible to pass the parameters
1070as a reference to a hash containing the name=>value pairs.
1071
1072The function takes one optional parameter, a reference to a hash. The
1073contents of the hash allow the deflation interface to be tailored.
1074
1075Here is a list of the valid options:
1076
1077=over 5
1078
1079=item B<-Level>
1080
1081Defines the compression level. Valid values are 0 through 9,
1082C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1083C<Z_DEFAULT_COMPRESSION>.
1084
e7d45986 1085The default is Z_DEFAULT_COMPRESSION.
25f0751f 1086
1087=item B<-Method>
1088
1089Defines the compression method. The only valid value at present (and
e7d45986 1090the default) is Z_DEFLATED.
25f0751f 1091
1092=item B<-WindowBits>
1093
1094To create an RFC 1950 data stream, set C<WindowBits> to a positive number.
1095
1096To create an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1097
1098For a full definition of the meaning and valid values for C<WindowBits> refer
1099to the I<zlib> documentation for I<deflateInit2>.
1100
e7d45986 1101Defaults to MAX_WBITS.
25f0751f 1102
1103=item B<-MemLevel>
1104
1105For a definition of the meaning and valid values for C<MemLevel>
1106refer to the I<zlib> documentation for I<deflateInit2>.
1107
e7d45986 1108Defaults to MAX_MEM_LEVEL.
25f0751f 1109
1110=item B<-Strategy>
1111
1112Defines the strategy used to tune the compression. The valid values are
1113C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
1114
e7d45986 1115The default is Z_DEFAULT_STRATEGY.
25f0751f 1116
1117=item B<-Dictionary>
1118
1119When a dictionary is specified I<Compress::Zlib> will automatically
1120call C<deflateSetDictionary> directly after calling C<deflateInit>. The
1121Adler32 value for the dictionary can be obtained by calling the method
1122C<$d->dict_adler()>.
1123
1124The default is no dictionary.
1125
1126=item B<-Bufsize>
1127
1128Sets the initial size for the deflation buffer. If the buffer has to be
1129reallocated to increase the size, it will grow in increments of
1130C<Bufsize>.
1131
1132The default is 4096.
1133
1134=back
1135
1136Here is an example of using the C<deflateInit> optional parameter list
1137to override the default buffer size and compression level. All other
1138options 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
1147Deflates the contents of C<$buffer>. The buffer can either be a scalar
1148or a scalar reference. When finished, C<$buffer> will be
1149completely processed (assuming there were no errors). If the deflation
1150was successful it returns the deflated output, C<$out>, and a status
1151value, C<$status>, of C<Z_OK>.
1152
1153On error, C<$out> will be I<undef> and C<$status> will contain the
1154I<zlib> error code.
1155
1156In a scalar context C<deflate> will return C<$out> only.
1157
1158As with the I<deflate> function in I<zlib>, it is not necessarily the
1159case that any output will be produced by this method. So don't rely on
1160the fact that C<$out> is empty for an error test.
1161
1162
1163=head2 B<($out, $status) = $d-E<gt>flush([flush_type])>
1164
1165Typically used to finish the deflation. Any pending output will be
1166returned via C<$out>.
1167C<$status> will have a value C<Z_OK> if successful.
1168
1169In a scalar context C<flush> will return C<$out> only.
1170
1171Note that flushing can seriously degrade the compression ratio, so it
1172should only be used to terminate a decompression (using C<Z_FINISH>) or
1173when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>).
1174
1175By default the C<flush_type> used is C<Z_FINISH>. Other valid values
1176for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH>
1177and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the
1178C<flush_type> parameter if you fully understand the implications of
1179what it does. See the C<zlib> documentation for details.
1180
1181=head2 B<$status = $d-E<gt>deflateParams([OPT])>
1182
1183Change settings for the deflate stream C<$d>.
1184
1185The list of the valid options is shown below. Options not specified
1186will remain unchanged.
1187
1188=over 5
1189
1190=item B<-Level>
1191
1192Defines the compression level. Valid values are 0 through 9,
1193C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1194C<Z_DEFAULT_COMPRESSION>.
1195
1196=item B<-Strategy>
1197
1198Defines the strategy used to tune the compression. The valid values are
1199C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
1200
1201=back
1202
1203=head2 B<$d-E<gt>dict_adler()>
1204
1205Returns the adler32 value for the dictionary.
1206
1207=head2 B<$d-E<gt>msg()>
1208
1209Returns the last error message generated by zlib.
1210
1211=head2 B<$d-E<gt>total_in()>
1212
1213Returns the total number of bytes uncompressed bytes input to deflate.
1214
1215=head2 B<$d-E<gt>total_out()>
1216
1217Returns the total number of compressed bytes output from deflate.
1218
1219=head2 Example
1220
1221
1222Here is a trivial example of using C<deflate>. It simply reads standard
1223input, 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
1255This section defines the interface available that allows in-memory
1256uncompression using the I<deflate> interface provided by zlib.
1257
1258Here is a definition of the interface:
1259
1260
1261=head2 B<($i, $status) = inflateInit()>
1262
1263Initialises an inflation stream.
1264
1265In a list context it returns the inflation stream, C<$i>, and the
1266I<zlib> status code in C<$status>. In a scalar context it returns the
1267inflation stream only.
1268
1269If successful, C<$i> will hold the inflation stream and C<$status> will
1270be C<Z_OK>.
1271
1272If not successful, C<$i> will be I<undef> and C<$status> will hold the
1273I<zlib> error code.
1274
1275The function optionally takes a number of named options specified as
e7d45986 1276C<< -Name=>value >> pairs. This allows individual options to be
25f0751f 1277tailored without having to specify them all in the parameter list.
1278
1279For backward compatibility, it is also possible to pass the parameters
1280as a reference to a hash containing the name=>value pairs.
1281
1282The function takes one optional parameter, a reference to a hash. The
1283contents of the hash allow the deflation interface to be tailored.
1284
1285Here is a list of the valid options:
1286
1287=over 5
1288
1289=item B<-WindowBits>
1290
1291To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive number.
1292
1293To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1294
1295For a full definition of the meaning and valid values for C<WindowBits> refer
1296to the I<zlib> documentation for I<inflateInit2>.
1297
e7d45986 1298Defaults to MAX_WBITS.
25f0751f 1299
1300=item B<-Bufsize>
1301
1302Sets the initial size for the inflation buffer. If the buffer has to be
1303reallocated to increase the size, it will grow in increments of
1304C<Bufsize>.
1305
1306Default is 4096.
1307
1308=item B<-Dictionary>
1309
1310The default is no dictionary.
1311
1312=back
1313
1314Here is an example of using the C<inflateInit> optional parameter to
1315override the default buffer size.
1316
1317 inflateInit( -Bufsize => 300 ) ;
1318
1319=head2 B<($out, $status) = $i-E<gt>inflate($buffer)>
1320
1321Inflates the complete contents of C<$buffer>. The buffer can either be
1322a scalar or a scalar reference.
1323
1324Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
1325compressed data has been successfully reached.
1326If not successful, C<$out> will be I<undef> and C<$status> will hold
1327the I<zlib> error code.
1328
1329The C<$buffer> parameter is modified by C<inflate>. On completion it
1330will contain what remains of the input buffer after inflation. This
1331means that C<$buffer> will be an empty string when the return status is
1332C<Z_OK>. When the return status is C<Z_STREAM_END> the C<$buffer>
1333parameter will contains what (if anything) was stored in the input
1334buffer after the deflated data stream.
1335
1336This feature is useful when processing a file format that encapsulates
1337a compressed data stream (e.g. gzip, zip).
1338
1339=head2 B<$status = $i-E<gt>inflateSync($buffer)>
1340
1341Scans C<$buffer> until it reaches either a I<full flush point> or the
1342end of the buffer.
1343
1344If a I<full flush point> is found, C<Z_OK> is returned and C<$buffer>
1345will be have all data up to the flush point removed. This can then be
1346passed to the C<deflate> method.
1347
1348Any other return code means that a flush point was not found. If more
1349data is available, C<inflateSync> can be called repeatedly with more
1350compressed data until the flush point is found.
1351
1352
1353=head2 B<$i-E<gt>dict_adler()>
1354
1355Returns the adler32 value for the dictionary.
1356
1357=head2 B<$i-E<gt>msg()>
1358
1359Returns the last error message generated by zlib.
1360
1361=head2 B<$i-E<gt>total_in()>
1362
1363Returns the total number of bytes compressed bytes input to inflate.
1364
1365=head2 B<$i-E<gt>total_out()>
1366
1367Returns the total number of uncompressed bytes output from inflate.
1368
1369=head2 Example
1370
1371Here 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
1401Two functions are provided by I<zlib> to calculate checksums. For the
1402Perl interface, the order of the two parameters in both functions has
1403been reversed. This allows both running checksums and one off
1404calculations to be done.
1405
1406 $crc = adler32($buffer [,$crc]) ;
1407 $crc = crc32($buffer [,$crc]) ;
1408
1409The buffer parameters can either be a scalar or a scalar reference.
1410
1411If the $crc parameters is C<undef>, the crc value will be reset.
1412
1413If you have built this module with zlib 1.2.3 or better, two more
1414CRC-related functions are available.
1415
1416 $crc = adler32_combine($crc1, $crc2, $len2)l
1417 $crc = crc32_combine($adler1, $adler2, $len2)
1418
1419These functions allow checksums to be merged.
1420
25f0751f 1421=head1 CONSTANTS
1422
1423All the I<zlib> constants are automatically imported when you make use
1424of I<Compress::Zlib>.
1425
1426
1427=head1 SEE ALSO
1428
258133d1 1429L<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 1430
1431L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1432
1433L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1434L<Archive::Tar|Archive::Tar>,
1435L<IO::Zlib|IO::Zlib>
1436
1437
1438For RFC 1950, 1951 and 1952 see
1439F<http://www.faqs.org/rfcs/rfc1950.html>,
1440F<http://www.faqs.org/rfcs/rfc1951.html> and
1441F<http://www.faqs.org/rfcs/rfc1952.html>
1442
1443The I<zlib> compression library was written by Jean-loup Gailly
1444F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1445
1446The primary site for the I<zlib> compression library is
1447F<http://www.zlib.org>.
1448
1449The primary site for gzip is F<http://www.gzip.org>.
1450
1451
1452
1453
25f0751f 1454=head1 AUTHOR
1455
cb7abd7f 1456This module was written by Paul Marquess, F<pmqs@cpan.org>.
25f0751f 1457
1458
1459
1460=head1 MODIFICATION HISTORY
1461
1462See the Changes file.
1463
1464=head1 COPYRIGHT AND LICENSE
25f0751f 1465
b0cda13f 1466Copyright (c) 1995-2007 Paul Marquess. All rights reserved.
25f0751f 1467
1468This program is free software; you can redistribute it and/or
1469modify it under the same terms as Perl itself.
1470
1471
1472