2 package Compress::Zlib;
9 use Scalar::Util qw(dualvar);
11 use IO::Compress::Base::Common 2.003 ;
12 use Compress::Raw::Zlib 2.003 ;
13 use IO::Compress::Gzip 2.003 ;
14 use IO::Uncompress::Gunzip 2.003 ;
19 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
22 $XS_VERSION = $VERSION;
23 $VERSION = eval $VERSION;
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.
30 deflateInit inflateInit
37 push @EXPORT, @Compress::Raw::Zlib::EXPORT ;
41 *zlib_version = \&Compress::Raw::Zlib::zlib_version;
46 ($constname = $AUTOLOAD) =~ s/.*:://;
47 my ($error, $val) = Compress::Raw::Zlib::constant($constname);
48 Carp::croak $error if $error;
50 *{$AUTOLOAD} = sub { $val };
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 ;
62 "need dictionary", # Z_NEED_DICT 2
63 "stream end", # Z_STREAM_END 1
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)
79 $Compress::Zlib::gzerrno = 0 ;
81 elsif ($value == Z_ERRNO() || $value > 2) {
82 $Compress::Zlib::gzerrno = $! ;
85 $Compress::Zlib::gzerrno = dualvar($value+0, $my_z_errmsg[2 - $value]);
94 my $test_eof = shift ;
96 my $value = $gz->errorNo() || 0 ;
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 ;
109 my ($file, $mode) = @_ ;
112 my %defOpts = (Level => Z_DEFAULT_COMPRESSION(),
113 Strategy => Z_DEFAULT_STRATEGY(),
117 $writing = ! ($mode =~ /r/i) ;
118 $writing = ($mode =~ /[wa]/i) ;
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;
125 my $infDef = $writing ? 'deflate' : 'inflate';
128 croak "gzopen: file parameter is not a filehandle or filename"
129 unless isaFilehandle $file || isaFilename $file ||
130 (ref $file && ref $file eq 'SCALAR');
132 return undef unless $mode =~ /[rwa]/i ;
137 $gz = new IO::Compress::Gzip($file, Minimal => 1, AutoClose => 1,
139 or $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError;
142 $gz = new IO::Uncompress::Gunzip($file,
148 or $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError;
154 bless [$gz, $infDef], 'Compress::Zlib::gzFile';
157 sub Compress::Zlib::gzFile::gzread
161 return _set_gzerr(Z_STREAM_ERROR())
162 if $self->[1] ne 'inflate';
164 my $len = defined $_[1] ? $_[1] : 4096 ;
166 if ($self->gzeof() || $len == 0) {
167 # Zap the output buffer to match ver 1 behaviour.
172 my $gz = $self->[0] ;
173 my $status = $gz->read($_[0], $len) ;
178 sub Compress::Zlib::gzFile::gzreadline
182 my $gz = $self->[0] ;
183 $_[0] = $gz->getline() ;
185 return defined $_[0] ? length $_[0] : 0 ;
188 sub Compress::Zlib::gzFile::gzwrite
191 my $gz = $self->[0] ;
193 return _set_gzerr(Z_STREAM_ERROR())
194 if $self->[1] ne 'deflate';
196 my $status = $gz->write($_[0]) ;
201 sub Compress::Zlib::gzFile::gztell
204 my $gz = $self->[0] ;
205 my $status = $gz->tell() ;
210 sub Compress::Zlib::gzFile::gzseek
216 my $gz = $self->[0] ;
218 eval { $status = $gz->seek($offset, $whence) ; };
222 $error =~ s/^.*: /gzseek: /;
223 $error =~ s/ at .* line \d+\s*$//;
230 sub Compress::Zlib::gzFile::gzflush
235 my $gz = $self->[0] ;
236 my $status = $gz->flush($f) ;
241 sub Compress::Zlib::gzFile::gzclose
244 my $gz = $self->[0] ;
246 my $status = $gz->close() ;
251 sub Compress::Zlib::gzFile::gzeof
254 my $gz = $self->[0] ;
257 if $self->[1] ne 'inflate';
259 my $status = $gz->eof() ;
264 sub Compress::Zlib::gzFile::gzsetparams
267 croak "Usage: Compress::Zlib::gzFile::gzsetparams(file, level, strategy)"
270 my $gz = $self->[0] ;
272 my $strategy = shift;
274 return _set_gzerr(Z_STREAM_ERROR())
275 if $self->[1] ne 'deflate';
277 my $status = *$gz->{Compress}->deflateParams(-Level => $level,
278 -Strategy => $strategy);
283 sub Compress::Zlib::gzFile::gzerror
286 my $gz = $self->[0] ;
288 return $Compress::Zlib::gzerrno ;
294 my ($x, $output, $err, $in) =('', '', '', '') ;
298 croak "not a scalar reference" unless ref $in eq 'SCALAR' ;
304 my $level = (@_ == 2 ? $_[1] : Z_DEFAULT_COMPRESSION() );
306 $x = new Compress::Raw::Zlib::Deflate -AppendOutput => 1, -Level => $level
309 $err = $x->deflate($in, $output) ;
310 return undef unless $err == Z_OK() ;
312 $err = $x->flush($output) ;
313 return undef unless $err == Z_OK() ;
321 my ($x, $output, $err, $in) =('', '', '', '') ;
325 croak "not a scalar reference" unless ref $in eq 'SCALAR' ;
331 $x = new Compress::Raw::Zlib::Inflate -ConsumeInput => 0 or return undef ;
333 $err = $x->inflate($in, $output) ;
334 return undef unless $err == Z_STREAM_END() ;
343 my ($got) = ParseParameters(0,
345 'Bufsize' => [1, 1, Parse_unsigned, 4096],
346 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
347 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
348 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
349 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
350 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
351 'Dictionary' => [1, 1, Parse_any, ""],
354 croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " .
355 $got->value('Bufsize')
356 unless $got->value('Bufsize') >= 1;
362 Compress::Raw::Zlib::_deflateInit(0,
363 $got->value('Level'),
364 $got->value('Method'),
365 $got->value('WindowBits'),
366 $got->value('MemLevel'),
367 $got->value('Strategy'),
368 $got->value('Bufsize'),
369 $got->value('Dictionary')) ;
371 my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldDeflate" : undef) ;
372 return wantarray ? ($x, $status) : $x ;
377 my ($got) = ParseParameters(0,
379 'Bufsize' => [1, 1, Parse_unsigned, 4096],
380 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
381 'Dictionary' => [1, 1, Parse_any, ""],
385 croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " .
386 $got->value('Bufsize')
387 unless $got->value('Bufsize') >= 1;
391 ($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT,
392 $got->value('WindowBits'),
393 $got->value('Bufsize'),
394 $got->value('Dictionary')) ;
396 my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate" : undef) ;
398 wantarray ? ($x, $status) : $x ;
401 package Zlib::OldDeflate ;
404 @ISA = qw(Compress::Raw::Zlib::deflateStream);
412 my $status = $self->SUPER::deflate($_[0], $output) ;
413 wantarray ? ($output, $status) : $output ;
420 my $flag = shift || Compress::Zlib::Z_FINISH();
421 my $status = $self->SUPER::flush($output, $flag) ;
423 wantarray ? ($output, $status) : $output ;
426 package Zlib::OldInflate ;
429 @ISA = qw(Compress::Raw::Zlib::inflateStream);
435 my $status = $self->SUPER::inflate($_[0], $output) ;
436 wantarray ? ($output, $status) : $output ;
439 package Compress::Zlib ;
441 use IO::Compress::Gzip::Constants 2.003 ;
445 my $x = new Compress::Raw::Zlib::Deflate(
449 -Level => Z_BEST_COMPRESSION(),
450 -WindowBits => - MAX_WBITS(),
454 # write a minimal gzip header
455 my $output = GZIP_MINIMUM_HEADER ;
457 # if the deflation buffer isn't a reference, make it one
458 my $string = (ref $_[0] ? $_[0] : \$_[0]) ;
460 my $status = $x->deflate($string, \$output) ;
464 $status = $x->flush(\$output) ;
468 return $output . pack("V V", $x->crc32(), $x->total_in()) ;
473 sub _removeGzipHeader($)
477 return Z_DATA_ERROR()
478 if length($$string) < GZIP_MIN_HEADER_SIZE ;
480 my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) =
481 unpack ('CCCCVCC', $$string);
483 return Z_DATA_ERROR()
484 unless $magic1 == GZIP_ID1 and $magic2 == GZIP_ID2 and
485 $method == Z_DEFLATED() and !($flags & GZIP_FLG_RESERVED) ;
486 substr($$string, 0, GZIP_MIN_HEADER_SIZE) = '' ;
489 if ($flags & GZIP_FLG_FEXTRA)
491 return Z_DATA_ERROR()
492 if length($$string) < GZIP_FEXTRA_HEADER_SIZE ;
494 my ($extra_len) = unpack ('v', $$string);
495 $extra_len += GZIP_FEXTRA_HEADER_SIZE;
496 return Z_DATA_ERROR()
497 if length($$string) < $extra_len ;
499 substr($$string, 0, $extra_len) = '';
503 if ($flags & GZIP_FLG_FNAME)
505 my $name_end = index ($$string, GZIP_NULL_BYTE);
506 return Z_DATA_ERROR()
508 substr($$string, 0, $name_end + 1) = '';
512 if ($flags & GZIP_FLG_FCOMMENT)
514 my $comment_end = index ($$string, GZIP_NULL_BYTE);
515 return Z_DATA_ERROR()
516 if $comment_end == -1 ;
517 substr($$string, 0, $comment_end + 1) = '';
521 if ($flags & GZIP_FLG_FHCRC)
523 return Z_DATA_ERROR()
524 if length ($$string) < GZIP_FHCRC_SIZE ;
525 substr($$string, 0, GZIP_FHCRC_SIZE) = '';
534 # if the buffer isn't a reference, make it one
535 my $string = (ref $_[0] ? $_[0] : \$_[0]);
537 _removeGzipHeader($string) == Z_OK()
540 my $bufsize = length $$string > 4096 ? length $$string : 4096 ;
541 my $x = new Compress::Raw::Zlib::Inflate({-WindowBits => - MAX_WBITS(),
542 -Bufsize => $bufsize})
547 my $status = $x->inflate($string, $output);
549 unless $status == Z_STREAM_END();
551 if (length $$string >= 8)
553 my ($crc, $len) = unpack ("VV", substr($$string, 0, 8));
554 substr($$string, 0, 8) = '';
556 unless $len == length($output) and
557 $crc == crc32($output);
566 # Autoload methods go after __END__, and are processed by the autosplit program.
574 Compress::Zlib - Interface to zlib compression library
580 ($d, $status) = deflateInit( [OPT] ) ;
581 $status = $d->deflate($input, $output) ;
582 $status = $d->flush($output [, $flush_type]) ;
583 $d->deflateParams(OPTS) ;
584 $d->deflateTune(OPTS) ;
595 ($i, $status) = inflateInit( [OPT] ) ;
596 $status = $i->inflate($input, $output [, $eof]) ;
597 $status = $i->inflateSync($input) ;
606 $dest = compress($source) ;
607 $dest = uncompress($source) ;
609 $gz = gzopen($filename or filehandle, $mode) ;
610 $bytesread = $gz->gzread($buffer [,$size]) ;
611 $bytesread = $gz->gzreadline($line) ;
612 $byteswritten = $gz->gzwrite($buffer) ;
613 $status = $gz->gzflush($flush) ;
614 $offset = $gz->gztell() ;
615 $status = $gz->gzseek($offset, $whence) ;
616 $status = $gz->gzclose() ;
617 $status = $gz->gzeof() ;
618 $status = $gz->gzsetparams($level, $strategy) ;
619 $errstring = $gz->gzerror() ;
622 $dest = Compress::Zlib::memGzip($buffer) ;
623 $dest = Compress::Zlib::memGunzip($buffer) ;
625 $crc = adler32($buffer [,$crc]) ;
626 $crc = crc32($buffer [,$crc]) ;
628 $crc = adler32_combine($crc1, $crc2, $len2)l
629 $crc = crc32_combine($adler1, $adler2, $len2)
638 The I<Compress::Zlib> module provides a Perl interface to the I<zlib>
639 compression library (see L</AUTHOR> for details about where to get
642 The C<Compress::Zlib> module can be split into two general areas of
643 functionality, namely a simple read/write interface to I<gzip> files
644 and a low-level in-memory compression/decompression interface.
646 Each of these areas will be discussed in the following sections.
648 =head2 Notes for users of Compress::Zlib version 1
650 The main change in C<Compress::Zlib> version 2.x is that it does not now
651 interface directly to the zlib library. Instead it uses the
652 C<IO::Compress::Gzip> and C<IO::Uncompress::Gunzip> modules for
653 reading/writing gzip files, and the C<Compress::Raw::Zlib> module for some
654 low-level zlib access.
656 The interface provided by version 2 should be 100% backward compatible with
657 version 1. If you find a difference in the expected behaviour please
658 contact the author (See L</AUTHOR>). See L<GZIP INTERFACE>
660 If you are writing new code, your first port of call should be to use one
663 =head1 GZIP INTERFACE
665 A number of functions are supplied in I<zlib> for reading and writing
666 I<gzip> files that conform to RFC 1952. This module provides an interface
669 If you have previously used C<Compress::Zlib> 1.x, the following
670 enhancements/changes have been made to the C<gzopen> interface:
676 If you want to to open either STDIN or STDOUT with C<gzopen>, you can now
677 optionally use the special filename "C<->" as a synonym for C<\*STDIN> and
682 In C<Compress::Zlib> version 1.x, C<gzopen> used the zlib library to open
683 the underlying file. This made things especially tricky when a Perl
684 filehandle was passed to C<gzopen>. Behind the scenes the numeric C file
685 descriptor had to be extracted from the Perl filehandle and this passed to
688 Apart from being non-portable to some operating systems, this made it
689 difficult to use C<gzopen> in situations where you wanted to extract/create
690 a gzip data stream that is embedded in a larger file, without having to
691 resort to opening and closing the file multiple times.
693 It also made it impossible to pass a perl filehandle that wasn't associated
694 with a real filesystem file, like, say, an C<IO::String>.
696 In C<Compress::Zlib> version 2.x, the C<gzopen> interface has been
697 completely rewritten to use the L<IO::Compress::Gzip|IO::Compress::Gzip>
698 for writing gzip files and L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>
699 for reading gzip files. None of the limitations mentioned above apply.
703 Addition of C<gzseek> to provide a restricted C<seek> interface.
711 A more complete and flexible interface for reading/writing gzip
712 files/buffers is included with the module C<IO-Compress-Zlib>. See
713 L<IO::Compress::Gzip|IO::Compress::Gzip> and
714 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for more details.
718 =item B<$gz = gzopen($filename, $mode)>
720 =item B<$gz = gzopen($filehandle, $mode)>
722 This function opens either the I<gzip> file C<$filename> for reading or
723 writing or attaches to the opened filehandle, C<$filehandle>.
724 It returns an object on success and C<undef> on failure.
726 When writing a gzip file this interface will I<always> create the smallest
727 possible gzip header (exactly 10 bytes). If you want greater control over
728 what gets stored in the gzip header (like the original filename or a
729 comment) use L<IO::Compress::Gzip|IO::Compress::Gzip> instead. Similarly if
730 you want to read the contents of the gzip header use
731 L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip>.
733 The second parameter, C<$mode>, is used to specify whether the file is
734 opened for reading or writing and to optionally specify a compression
735 level and compression strategy when writing. The format of the C<$mode>
736 parameter is similar to the mode parameter to the 'C' function C<fopen>,
737 so "rb" is used to open for reading, "wb" for writing and "ab" for
738 appending (writing at the end of the file).
740 To specify a compression level when writing, append a digit between 0
741 and 9 to the mode string -- 0 means no compression and 9 means maximum
743 If no compression level is specified Z_DEFAULT_COMPRESSION is used.
745 To specify the compression strategy when writing, append 'f' for filtered
746 data, 'h' for Huffman only compression, or 'R' for run-length encoding.
747 If no strategy is specified Z_DEFAULT_STRATEGY is used.
749 So, for example, "wb9" means open for writing with the maximum compression
750 using the default strategy and "wb4R" means open for writing with compression
751 level 4 and run-length encoding.
753 Refer to the I<zlib> documentation for the exact format of the C<$mode>
756 =item B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>
758 Reads C<$size> bytes from the compressed file into C<$buffer>. If
759 C<$size> is not specified, it will default to 4096. If the scalar
760 C<$buffer> is not large enough, it will be extended automatically.
762 Returns the number of bytes actually read. On EOF it returns 0 and in
763 the case of an error, -1.
765 =item B<$bytesread = $gz-E<gt>gzreadline($line) ;>
767 Reads the next line from the compressed file into C<$line>.
769 Returns the number of bytes actually read. On EOF it returns 0 and in
770 the case of an error, -1.
772 It is legal to intermix calls to C<gzread> and C<gzreadline>.
774 In addition, C<gzreadline> fully supports the use of of the variable C<$/>
775 (C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use) to
776 determine what constitutes an end of line. Both paragraph mode and file
777 slurp mode are supported.
780 =item B<$byteswritten = $gz-E<gt>gzwrite($buffer) ;>
782 Writes the contents of C<$buffer> to the compressed file. Returns the
783 number of bytes actually written, or 0 on error.
785 =item B<$status = $gz-E<gt>gzflush($flush_type) ;>
787 Flushes all pending output into the compressed file.
789 This method takes an optional parameter, C<$flush_type>, that controls
790 how the flushing will be carried out. By default the C<$flush_type>
791 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
792 C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
793 strongly recommended that you only set the C<flush_type> parameter if
794 you fully understand the implications of what it does - overuse of C<flush>
795 can seriously degrade the level of compression achieved. See the C<zlib>
796 documentation for details.
798 Returns 1 on success, 0 on failure.
801 =item B<$offset = $gz-E<gt>gztell() ;>
803 Returns the uncompressed file offset.
805 =item B<$status = $gz-E<gt>gzseek($offset, $whence) ;>
807 Provides a sub-set of the C<seek> functionality, with the restriction
808 that it is only legal to seek forward in the compressed file.
809 It is a fatal error to attempt to seek backward.
811 When opened for writing, empty parts of the file will have NULL (0x00)
812 bytes written to them.
814 The C<$whence> parameter should be one of SEEK_SET, SEEK_CUR or SEEK_END.
816 Returns 1 on success, 0 on failure.
818 =item B<$gz-E<gt>gzclose>
820 Closes the compressed file. Any pending data is flushed to the file
823 Returns 1 on success, 0 on failure.
825 =item B<$gz-E<gt>gzsetparams($level, $strategy>
827 Change settings for the deflate stream C<$gz>.
829 The list of the valid options is shown below. Options not specified
830 will remain unchanged.
832 Note: This method is only available if you are running zlib 1.0.6 or better.
838 Defines the compression level. Valid values are 0 through 9,
839 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
840 C<Z_DEFAULT_COMPRESSION>.
844 Defines the strategy used to tune the compression. The valid values are
845 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
849 =item B<$gz-E<gt>gzerror>
851 Returns the I<zlib> error message or number for the last operation
852 associated with C<$gz>. The return value will be the I<zlib> error
853 number when used in a numeric context and the I<zlib> error message
854 when used in a string context. The I<zlib> error number constants,
855 shown below, are available for use.
867 The C<$gzerrno> scalar holds the error code associated with the most
868 recent I<gzip> routine. Note that unlike C<gzerror()>, the error is
869 I<not> associated with a particular file.
871 As with C<gzerror()> it returns an error number in numeric context and
872 an error message in string context. Unlike C<gzerror()> though, the
873 error message will correspond to the I<zlib> message when the error is
874 associated with I<zlib> itself, or the UNIX error message when it is
875 not (i.e. I<zlib> returned C<Z_ERRORNO>).
877 As there is an overlap between the error numbers used by I<zlib> and
878 UNIX, C<$gzerrno> should only be used to check for the presence of
879 I<an> error in numeric context. Use C<gzerror()> to check for specific
880 I<zlib> errors. The I<gzcat> example below shows how the variable can
888 Here is an example script which uses the interface. It implements a
896 # use stdin if no files supplied
897 @ARGV = '-' unless @ARGV ;
899 foreach my $file (@ARGV) {
902 my $gz = gzopen($file, "rb")
903 or die "Cannot open $file: $gzerrno\n" ;
905 print $buffer while $gz->gzread($buffer) > 0 ;
907 die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\n"
908 if $gzerrno != Z_STREAM_END ;
913 Below is a script which makes use of C<gzreadline>. It implements a
914 very simple I<grep> like script.
921 die "Usage: gzgrep pattern [file...]\n"
924 my $pattern = shift ;
926 # use stdin if no files supplied
927 @ARGV = '-' unless @ARGV ;
929 foreach my $file (@ARGV) {
930 my $gz = gzopen($file, "rb")
931 or die "Cannot open $file: $gzerrno\n" ;
933 while ($gz->gzreadline($_) > 0) {
934 print if /$pattern/ ;
937 die "Error reading from $file: $gzerrno\n"
938 if $gzerrno != Z_STREAM_END ;
943 This script, I<gzstream>, does the opposite of the I<gzcat> script
944 above. It reads from standard input and writes a gzip data stream to
952 binmode STDOUT; # gzopen only sets it on the fd
954 my $gz = gzopen(\*STDOUT, "wb")
955 or die "Cannot open stdout: $gzerrno\n" ;
959 or die "error writing: $gzerrno\n" ;
964 =head2 Compress::Zlib::memGzip
966 This function is used to create an in-memory gzip file with the minimum
967 possible gzip header (exactly 10 bytes).
969 $dest = Compress::Zlib::memGzip($buffer) ;
971 If successful, it returns the in-memory gzip file, otherwise it returns
974 The C<$buffer> parameter can either be a scalar or a scalar reference.
976 See L<IO::Compress::Gzip|IO::Compress::Gzip> for an alternative way to
977 carry out in-memory gzip compression.
979 =head2 Compress::Zlib::memGunzip
981 This function is used to uncompress an in-memory gzip file.
983 $dest = Compress::Zlib::memGunzip($buffer) ;
985 If successful, it returns the uncompressed gzip file, otherwise it
988 The C<$buffer> parameter can either be a scalar or a scalar reference. The
989 contents of the C<$buffer> parameter are destroyed after calling this function.
991 See L<IO::Uncompress::Gunzip|IO::Uncompress::Gunzip> for an alternative way
992 to carry out in-memory gzip uncompression.
994 =head1 COMPRESS/UNCOMPRESS
996 Two functions are provided to perform in-memory compression/uncompression of
997 RFC 1950 data streams. They are called C<compress> and C<uncompress>.
1001 =item B<$dest = compress($source [, $level] ) ;>
1003 Compresses C<$source>. If successful it returns the compressed
1004 data. Otherwise it returns I<undef>.
1006 The source buffer, C<$source>, can either be a scalar or a scalar
1009 The C<$level> parameter defines the compression level. Valid values are
1010 0 through 9, C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>,
1011 C<Z_BEST_COMPRESSION>, and C<Z_DEFAULT_COMPRESSION>.
1012 If C<$level> is not specified C<Z_DEFAULT_COMPRESSION> will be used.
1015 =item B<$dest = uncompress($source) ;>
1017 Uncompresses C<$source>. If successful it returns the uncompressed
1018 data. Otherwise it returns I<undef>.
1020 The source buffer can either be a scalar or a scalar reference.
1024 Please note: the two functions defined above are I<not> compatible with
1025 the Unix commands of the same name.
1027 See L<IO::Deflate|IO::Deflate> and L<IO::Inflate|IO::Inflate> included with
1028 this distribution for an alternative interface for reading/writing RFC 1950
1032 =head1 Deflate Interface
1034 This section defines an interface that allows in-memory compression using
1035 the I<deflate> interface provided by zlib.
1037 Here is a definition of the interface available:
1040 =head2 B<($d, $status) = deflateInit( [OPT] )>
1042 Initialises a deflation stream.
1044 It combines the features of the I<zlib> functions C<deflateInit>,
1045 C<deflateInit2> and C<deflateSetDictionary>.
1047 If successful, it will return the initialised deflation stream, C<$d>
1048 and C<$status> of C<Z_OK> in a list context. In scalar context it
1049 returns the deflation stream, C<$d>, only.
1051 If not successful, the returned deflation stream (C<$d>) will be
1052 I<undef> and C<$status> will hold the exact I<zlib> error code.
1054 The function optionally takes a number of named options specified as
1055 C<< -Name=>value >> pairs. This allows individual options to be
1056 tailored without having to specify them all in the parameter list.
1058 For backward compatibility, it is also possible to pass the parameters
1059 as a reference to a hash containing the name=>value pairs.
1061 The function takes one optional parameter, a reference to a hash. The
1062 contents of the hash allow the deflation interface to be tailored.
1064 Here is a list of the valid options:
1070 Defines the compression level. Valid values are 0 through 9,
1071 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1072 C<Z_DEFAULT_COMPRESSION>.
1074 The default is Z_DEFAULT_COMPRESSION.
1078 Defines the compression method. The only valid value at present (and
1079 the default) is Z_DEFLATED.
1081 =item B<-WindowBits>
1083 To create an RFC 1950 data stream, set C<WindowBits> to a positive number.
1085 To create an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1087 For a full definition of the meaning and valid values for C<WindowBits> refer
1088 to the I<zlib> documentation for I<deflateInit2>.
1090 Defaults to MAX_WBITS.
1094 For a definition of the meaning and valid values for C<MemLevel>
1095 refer to the I<zlib> documentation for I<deflateInit2>.
1097 Defaults to MAX_MEM_LEVEL.
1101 Defines the strategy used to tune the compression. The valid values are
1102 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
1104 The default is Z_DEFAULT_STRATEGY.
1106 =item B<-Dictionary>
1108 When a dictionary is specified I<Compress::Zlib> will automatically
1109 call C<deflateSetDictionary> directly after calling C<deflateInit>. The
1110 Adler32 value for the dictionary can be obtained by calling the method
1111 C<$d->dict_adler()>.
1113 The default is no dictionary.
1117 Sets the initial size for the deflation buffer. If the buffer has to be
1118 reallocated to increase the size, it will grow in increments of
1121 The default is 4096.
1125 Here is an example of using the C<deflateInit> optional parameter list
1126 to override the default buffer size and compression level. All other
1127 options will take their default values.
1129 deflateInit( -Bufsize => 300,
1130 -Level => Z_BEST_SPEED ) ;
1133 =head2 B<($out, $status) = $d-E<gt>deflate($buffer)>
1136 Deflates the contents of C<$buffer>. The buffer can either be a scalar
1137 or a scalar reference. When finished, C<$buffer> will be
1138 completely processed (assuming there were no errors). If the deflation
1139 was successful it returns the deflated output, C<$out>, and a status
1140 value, C<$status>, of C<Z_OK>.
1142 On error, C<$out> will be I<undef> and C<$status> will contain the
1145 In a scalar context C<deflate> will return C<$out> only.
1147 As with the I<deflate> function in I<zlib>, it is not necessarily the
1148 case that any output will be produced by this method. So don't rely on
1149 the fact that C<$out> is empty for an error test.
1152 =head2 B<($out, $status) = $d-E<gt>flush([flush_type])>
1154 Typically used to finish the deflation. Any pending output will be
1155 returned via C<$out>.
1156 C<$status> will have a value C<Z_OK> if successful.
1158 In a scalar context C<flush> will return C<$out> only.
1160 Note that flushing can seriously degrade the compression ratio, so it
1161 should only be used to terminate a decompression (using C<Z_FINISH>) or
1162 when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>).
1164 By default the C<flush_type> used is C<Z_FINISH>. Other valid values
1165 for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH>
1166 and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the
1167 C<flush_type> parameter if you fully understand the implications of
1168 what it does. See the C<zlib> documentation for details.
1170 =head2 B<$status = $d-E<gt>deflateParams([OPT])>
1172 Change settings for the deflate stream C<$d>.
1174 The list of the valid options is shown below. Options not specified
1175 will remain unchanged.
1181 Defines the compression level. Valid values are 0 through 9,
1182 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
1183 C<Z_DEFAULT_COMPRESSION>.
1187 Defines the strategy used to tune the compression. The valid values are
1188 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
1192 =head2 B<$d-E<gt>dict_adler()>
1194 Returns the adler32 value for the dictionary.
1196 =head2 B<$d-E<gt>msg()>
1198 Returns the last error message generated by zlib.
1200 =head2 B<$d-E<gt>total_in()>
1202 Returns the total number of bytes uncompressed bytes input to deflate.
1204 =head2 B<$d-E<gt>total_out()>
1206 Returns the total number of compressed bytes output from deflate.
1211 Here is a trivial example of using C<deflate>. It simply reads standard
1212 input, deflates it and writes it to standard output.
1217 use Compress::Zlib ;
1221 my $x = deflateInit()
1222 or die "Cannot create a deflation stream\n" ;
1224 my ($output, $status) ;
1227 ($output, $status) = $x->deflate($_) ;
1230 or die "deflation failed\n" ;
1235 ($output, $status) = $x->flush() ;
1238 or die "deflation failed\n" ;
1242 =head1 Inflate Interface
1244 This section defines the interface available that allows in-memory
1245 uncompression using the I<deflate> interface provided by zlib.
1247 Here is a definition of the interface:
1250 =head2 B<($i, $status) = inflateInit()>
1252 Initialises an inflation stream.
1254 In a list context it returns the inflation stream, C<$i>, and the
1255 I<zlib> status code in C<$status>. In a scalar context it returns the
1256 inflation stream only.
1258 If successful, C<$i> will hold the inflation stream and C<$status> will
1261 If not successful, C<$i> will be I<undef> and C<$status> will hold the
1264 The function optionally takes a number of named options specified as
1265 C<< -Name=>value >> pairs. This allows individual options to be
1266 tailored without having to specify them all in the parameter list.
1268 For backward compatibility, it is also possible to pass the parameters
1269 as a reference to a hash containing the name=>value pairs.
1271 The function takes one optional parameter, a reference to a hash. The
1272 contents of the hash allow the deflation interface to be tailored.
1274 Here is a list of the valid options:
1278 =item B<-WindowBits>
1280 To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive number.
1282 To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
1284 For a full definition of the meaning and valid values for C<WindowBits> refer
1285 to the I<zlib> documentation for I<inflateInit2>.
1287 Defaults to MAX_WBITS.
1291 Sets the initial size for the inflation buffer. If the buffer has to be
1292 reallocated to increase the size, it will grow in increments of
1297 =item B<-Dictionary>
1299 The default is no dictionary.
1303 Here is an example of using the C<inflateInit> optional parameter to
1304 override the default buffer size.
1306 inflateInit( -Bufsize => 300 ) ;
1308 =head2 B<($out, $status) = $i-E<gt>inflate($buffer)>
1310 Inflates the complete contents of C<$buffer>. The buffer can either be
1311 a scalar or a scalar reference.
1313 Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
1314 compressed data has been successfully reached.
1315 If not successful, C<$out> will be I<undef> and C<$status> will hold
1316 the I<zlib> error code.
1318 The C<$buffer> parameter is modified by C<inflate>. On completion it
1319 will contain what remains of the input buffer after inflation. This
1320 means that C<$buffer> will be an empty string when the return status is
1321 C<Z_OK>. When the return status is C<Z_STREAM_END> the C<$buffer>
1322 parameter will contains what (if anything) was stored in the input
1323 buffer after the deflated data stream.
1325 This feature is useful when processing a file format that encapsulates
1326 a compressed data stream (e.g. gzip, zip).
1328 =head2 B<$status = $i-E<gt>inflateSync($buffer)>
1330 Scans C<$buffer> until it reaches either a I<full flush point> or the
1333 If a I<full flush point> is found, C<Z_OK> is returned and C<$buffer>
1334 will be have all data up to the flush point removed. This can then be
1335 passed to the C<deflate> method.
1337 Any other return code means that a flush point was not found. If more
1338 data is available, C<inflateSync> can be called repeatedly with more
1339 compressed data until the flush point is found.
1342 =head2 B<$i-E<gt>dict_adler()>
1344 Returns the adler32 value for the dictionary.
1346 =head2 B<$i-E<gt>msg()>
1348 Returns the last error message generated by zlib.
1350 =head2 B<$i-E<gt>total_in()>
1352 Returns the total number of bytes compressed bytes input to inflate.
1354 =head2 B<$i-E<gt>total_out()>
1356 Returns the total number of uncompressed bytes output from inflate.
1360 Here is an example of using C<inflate>.
1365 use Compress::Zlib ;
1367 my $x = inflateInit()
1368 or die "Cannot create a inflation stream\n" ;
1374 my ($output, $status) ;
1375 while (read(STDIN, $input, 4096))
1377 ($output, $status) = $x->inflate(\$input) ;
1380 if $status == Z_OK or $status == Z_STREAM_END ;
1382 last if $status != Z_OK ;
1385 die "inflation failed\n"
1386 unless $status == Z_STREAM_END ;
1388 =head1 CHECKSUM FUNCTIONS
1390 Two functions are provided by I<zlib> to calculate checksums. For the
1391 Perl interface, the order of the two parameters in both functions has
1392 been reversed. This allows both running checksums and one off
1393 calculations to be done.
1395 $crc = adler32($buffer [,$crc]) ;
1396 $crc = crc32($buffer [,$crc]) ;
1398 The buffer parameters can either be a scalar or a scalar reference.
1400 If the $crc parameters is C<undef>, the crc value will be reset.
1402 If you have built this module with zlib 1.2.3 or better, two more
1403 CRC-related functions are available.
1405 $crc = adler32_combine($crc1, $crc2, $len2)l
1406 $crc = crc32_combine($adler1, $adler2, $len2)
1408 These functions allow checksums to be merged.
1412 All the I<zlib> constants are automatically imported when you make use
1413 of I<Compress::Zlib>.
1418 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>
1420 L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1422 L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1423 L<Archive::Tar|Archive::Tar>,
1424 L<IO::Zlib|IO::Zlib>
1427 For RFC 1950, 1951 and 1952 see
1428 F<http://www.faqs.org/rfcs/rfc1950.html>,
1429 F<http://www.faqs.org/rfcs/rfc1951.html> and
1430 F<http://www.faqs.org/rfcs/rfc1952.html>
1432 The I<zlib> compression library was written by Jean-loup Gailly
1433 F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1435 The primary site for the I<zlib> compression library is
1436 F<http://www.zlib.org>.
1438 The primary site for gzip is F<http://www.gzip.org>.
1445 This module was written by Paul Marquess, F<pmqs@cpan.org>.
1449 =head1 MODIFICATION HISTORY
1451 See the Changes file.
1453 =head1 COPYRIGHT AND LICENSE
1455 Copyright (c) 1995-2007 Paul Marquess. All rights reserved.
1457 This program is free software; you can redistribute it and/or
1458 modify it under the same terms as Perl itself.