2 package Compress::Raw::Zlib;
9 #use Parse::Parameters;
14 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
17 $XS_VERSION = $VERSION;
18 $VERSION = eval $VERSION;
21 # Items to export into callers namespace by default. Note: do not export
22 # names by default without a very good reason. Use EXPORT_OK instead.
23 # Do not simply export all your public functions/methods/constants.
70 use constant WANT_GZIP => 16;
71 use constant WANT_GZIP_OR_ZLIB => 32;
75 ($constname = $AUTOLOAD) =~ s/.*:://;
76 my ($error, $val) = constant($constname);
77 Carp::croak $error if $error;
79 *{$AUTOLOAD} = sub { $val };
83 use constant FLAG_APPEND => 1 ;
84 use constant FLAG_CRC => 2 ;
85 use constant FLAG_ADLER => 4 ;
86 use constant FLAG_CONSUME_INPUT => 8 ;
87 use constant FLAG_LIMIT_OUTPUT => 16 ;
91 XSLoader::load('Compress::Raw::Zlib', $XS_VERSION);
96 local @ISA = qw(DynaLoader);
97 bootstrap Compress::Raw::Zlib $XS_VERSION ;
101 use constant Parse_any => 0x01;
102 use constant Parse_unsigned => 0x02;
103 use constant Parse_signed => 0x04;
104 use constant Parse_boolean => 0x08;
105 use constant Parse_string => 0x10;
106 use constant Parse_custom => 0x12;
108 use constant Parse_store_ref => 0x100 ;
110 use constant OFF_PARSED => 0 ;
111 use constant OFF_TYPE => 1 ;
112 use constant OFF_DEFAULT => 2 ;
113 use constant OFF_FIXED => 3 ;
114 use constant OFF_FIRST_ONLY => 4 ;
115 use constant OFF_STICKY => 5 ;
121 my $level = shift || 0 ;
123 my $sub = (caller($level + 1))[3] ;
124 #local $Carp::CarpLevel = 1 ;
125 my $p = new Compress::Raw::Zlib::Parameters() ;
127 or croak "$sub: $p->{Error}" ;
133 sub Compress::Raw::Zlib::Parameters::new
137 my $obj = { Error => '',
141 #return bless $obj, ref($class) || $class || __PACKAGE__ ;
142 return bless $obj, 'Compress::Raw::Zlib::Parameters' ;
145 sub Compress::Raw::Zlib::Parameters::setError
149 my $retval = @_ ? shift : undef ;
151 $self->{Error} = $error ;
158 # return $self->{Error} ;
161 sub Compress::Raw::Zlib::Parameters::parse
165 my $default = shift ;
167 my $got = $self->{Got} ;
168 my $firstTime = keys %{ $got } == 0 ;
173 # Allow the options to be passed as a hash reference or
174 # as the complete hash.
180 return $self->setError("Expected even number of parameters, got 1")
181 if ! defined $href or ! ref $href or ref $href ne "HASH" ;
183 foreach my $key (keys %$href) {
184 push @entered, $key ;
185 push @entered, \$href->{$key} ;
190 return $self->setError("Expected even number of parameters, got $count")
193 for my $i (0.. $count / 2 - 1) {
194 push @entered, $_[2* $i] ;
195 push @entered, \$_[2* $i+1] ;
200 while (my ($key, $v) = each %$default)
202 croak "need 4 params [@$v]"
205 my ($first_only, $sticky, $type, $value) = @$v ;
207 $self->_checkType($key, \$value, $type, 0, \$x)
212 if ($firstTime || ! $sticky) {
213 $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ;
216 $got->{$key}[OFF_PARSED] = 0 ;
219 for my $i (0.. @entered / 2 - 1) {
220 my $key = $entered[2* $i] ;
221 my $value = $entered[2* $i+1] ;
223 #print "Key [$key] Value [$value]" ;
224 #print defined $$value ? "[$$value]\n" : "[undef]\n";
227 my $canonkey = lc $key;
229 if ($got->{$canonkey} && ($firstTime ||
230 ! $got->{$canonkey}[OFF_FIRST_ONLY] ))
232 my $type = $got->{$canonkey}[OFF_TYPE] ;
234 $self->_checkType($key, $value, $type, 1, \$s)
236 #$value = $$value unless $type & Parse_store_ref ;
238 $got->{$canonkey} = [1, $type, $value, $s] ;
241 { push (@Bad, $key) }
245 my ($bad) = join(", ", @Bad) ;
246 return $self->setError("unknown key value(s) @Bad") ;
252 sub Compress::Raw::Zlib::Parameters::_checkType
259 my $validate = shift ;
262 #local $Carp::CarpLevel = $level ;
263 #print "PARSE $type $key $value $validate $sub\n" ;
264 if ( $type & Parse_store_ref)
267 # if ref ${ $value } ;
275 if ($type & Parse_any)
280 elsif ($type & Parse_unsigned)
282 return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'")
283 if $validate && ! defined $value ;
284 return $self->setError("Parameter '$key' must be an unsigned int, got '$value'")
285 if $validate && $value !~ /^\d+$/;
287 $$output = defined $value ? $value : 0 ;
290 elsif ($type & Parse_signed)
292 return $self->setError("Parameter '$key' must be a signed int, got 'undef'")
293 if $validate && ! defined $value ;
294 return $self->setError("Parameter '$key' must be a signed int, got '$value'")
295 if $validate && $value !~ /^-?\d+$/;
297 $$output = defined $value ? $value : 0 ;
300 elsif ($type & Parse_boolean)
302 return $self->setError("Parameter '$key' must be an int, got '$value'")
303 if $validate && defined $value && $value !~ /^\d*$/;
304 $$output = defined $value ? $value != 0 : 0 ;
307 elsif ($type & Parse_string)
309 $$output = defined $value ? $value : "" ;
319 sub Compress::Raw::Zlib::Parameters::parsed
324 return $self->{Got}{lc $name}[OFF_PARSED] ;
327 sub Compress::Raw::Zlib::Parameters::value
334 $self->{Got}{lc $name}[OFF_PARSED] = 1;
335 $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ;
336 $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ;
339 return $self->{Got}{lc $name}[OFF_FIXED] ;
342 sub Compress::Raw::Zlib::Deflate::new
345 my ($got) = ParseParameters(0,
347 'AppendOutput' => [1, 1, Parse_boolean, 0],
348 'CRC32' => [1, 1, Parse_boolean, 0],
349 'ADLER32' => [1, 1, Parse_boolean, 0],
350 'Bufsize' => [1, 1, Parse_unsigned, 4096],
352 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
353 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
354 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
355 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
356 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
357 'Dictionary' => [1, 1, Parse_any, ""],
361 croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " .
362 $got->value('Bufsize')
363 unless $got->value('Bufsize') >= 1;
366 $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
367 $flags |= FLAG_CRC if $got->value('CRC32') ;
368 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
370 my $windowBits = $got->value('WindowBits');
371 $windowBits += MAX_WBITS()
372 if ($windowBits & MAX_WBITS()) == 0 ;
375 $got->value('Level'),
376 $got->value('Method'),
378 $got->value('MemLevel'),
379 $got->value('Strategy'),
380 $got->value('Bufsize'),
381 $got->value('Dictionary')) ;
385 sub Compress::Raw::Zlib::Inflate::new
388 my ($got) = ParseParameters(0,
390 'AppendOutput' => [1, 1, Parse_boolean, 0],
391 'LimitOutput' => [1, 1, Parse_boolean, 0],
392 'CRC32' => [1, 1, Parse_boolean, 0],
393 'ADLER32' => [1, 1, Parse_boolean, 0],
394 'ConsumeInput' => [1, 1, Parse_boolean, 1],
395 'Bufsize' => [1, 1, Parse_unsigned, 4096],
397 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()],
398 'Dictionary' => [1, 1, Parse_any, ""],
402 croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " .
403 $got->value('Bufsize')
404 unless $got->value('Bufsize') >= 1;
407 $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
408 $flags |= FLAG_CRC if $got->value('CRC32') ;
409 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
410 $flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
411 $flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ;
414 my $windowBits = $got->value('WindowBits');
415 $windowBits += MAX_WBITS()
416 if ($windowBits & MAX_WBITS()) == 0 ;
418 _inflateInit($flags, $windowBits, $got->value('Bufsize'),
419 $got->value('Dictionary')) ;
422 sub Compress::Raw::Zlib::InflateScan::new
425 my ($got) = ParseParameters(0,
427 'CRC32' => [1, 1, Parse_boolean, 0],
428 'ADLER32' => [1, 1, Parse_boolean, 0],
429 'Bufsize' => [1, 1, Parse_unsigned, 4096],
431 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()],
432 'Dictionary' => [1, 1, Parse_any, ""],
436 croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " .
437 $got->value('Bufsize')
438 unless $got->value('Bufsize') >= 1;
441 #$flags |= FLAG_APPEND if $got->value('AppendOutput') ;
442 $flags |= FLAG_CRC if $got->value('CRC32') ;
443 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
444 #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ;
446 _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'),
450 sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream
453 my ($got) = ParseParameters(0,
455 'AppendOutput' => [1, 1, Parse_boolean, 0],
456 'CRC32' => [1, 1, Parse_boolean, 0],
457 'ADLER32' => [1, 1, Parse_boolean, 0],
458 'Bufsize' => [1, 1, Parse_unsigned, 4096],
460 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()],
461 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()],
462 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()],
463 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()],
464 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()],
467 croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " .
468 $got->value('Bufsize')
469 unless $got->value('Bufsize') >= 1;
472 $flags |= FLAG_APPEND if $got->value('AppendOutput') ;
473 $flags |= FLAG_CRC if $got->value('CRC32') ;
474 $flags |= FLAG_ADLER if $got->value('ADLER32') ;
476 $pkg->_createDeflateStream($flags,
477 $got->value('Level'),
478 $got->value('Method'),
479 $got->value('WindowBits'),
480 $got->value('MemLevel'),
481 $got->value('Strategy'),
482 $got->value('Bufsize'),
487 sub Compress::Raw::Zlib::inflateScanStream::inflate
493 my $status = $self->scan(@_);
495 if ($status == Z_OK() && $_[2]) {
498 $status = $self->scan(\$byte, $_[1]) ;
504 sub Compress::Raw::Zlib::deflateStream::deflateParams
507 my ($got) = ParseParameters(0, {
508 'Level' => [1, 1, Parse_signed, undef],
509 'Strategy' => [1, 1, Parse_unsigned, undef],
510 'Bufsize' => [1, 1, Parse_unsigned, undef],
514 croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy"
515 unless $got->parsed('Level') + $got->parsed('Strategy') +
516 $got->parsed('Bufsize');
518 croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " .
519 $got->value('Bufsize')
520 if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1;
523 $flags |= 1 if $got->parsed('Level') ;
524 $flags |= 2 if $got->parsed('Strategy') ;
525 $flags |= 4 if $got->parsed('Bufsize') ;
527 $self->_deflateParams($flags, $got->value('Level'),
528 $got->value('Strategy'), $got->value('Bufsize'));
533 # Autoload methods go after __END__, and are processed by the autosplit program.
541 Compress::Raw::Zlib - Low-Level Interface to zlib compression library
545 use Compress::Raw::Zlib ;
547 ($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) ;
548 $status = $d->deflate($input, $output) ;
549 $status = $d->flush($output [, $flush_type]) ;
551 $d->deflateParams(OPTS) ;
552 $d->deflateTune(OPTS) ;
563 ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) ;
564 $status = $i->inflate($input, $output [, $eof]) ;
565 $status = $i->inflateSync($input) ;
574 $crc = adler32($buffer [,$crc]) ;
575 $crc = crc32($buffer [,$crc]) ;
577 $crc = adler32_combine($crc1, $crc2, $len2)l
578 $crc = crc32_combine($adler1, $adler2, $len2)
580 my $version = Compress::Raw::Zlib::zlib_version();
584 The I<Compress::Raw::Zlib> module provides a Perl interface to the I<zlib>
585 compression library (see L</AUTHOR> for details about where to get
588 =head1 Compress::Raw::Zlib::Deflate
590 This section defines an interface that allows in-memory compression using
591 the I<deflate> interface provided by zlib.
593 Here is a definition of the interface available:
595 =head2 B<($d, $status) = new Compress::Raw::Zlib::Deflate( [OPT] ) >
597 Initialises a deflation object.
599 If you are familiar with the I<zlib> library, it combines the
600 features of the I<zlib> functions C<deflateInit>, C<deflateInit2>
601 and C<deflateSetDictionary>.
603 If successful, it will return the initialised deflation object, C<$d>
604 and a C<$status> of C<Z_OK> in a list context. In scalar context it
605 returns the deflation object, C<$d>, only.
607 If not successful, the returned deflation object, C<$d>, will be
608 I<undef> and C<$status> will hold the a I<zlib> error code.
610 The function optionally takes a number of named options specified as
611 C<< Name => value >> pairs. This allows individual options to be
612 tailored without having to specify them all in the parameter list.
614 For backward compatibility, it is also possible to pass the parameters
615 as a reference to a hash containing the name=>value pairs.
617 Below is a list of the valid options:
623 Defines the compression level. Valid values are 0 through 9,
624 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
625 C<Z_DEFAULT_COMPRESSION>.
627 The default is C<Z_DEFAULT_COMPRESSION>.
631 Defines the compression method. The only valid value at present (and
632 the default) is Z_DEFLATED.
636 To compress an RFC 1950 data stream, set C<WindowBits> to a positive
637 number between 8 and 15.
639 To compress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
641 To compress an RFC 1952 data stream (i.e. gzip), set C<WindowBits> to
644 For a definition of the meaning and valid values for C<WindowBits>
645 refer to the I<zlib> documentation for I<deflateInit2>.
647 Defaults to C<MAX_WBITS>.
651 For a definition of the meaning and valid values for C<MemLevel>
652 refer to the I<zlib> documentation for I<deflateInit2>.
654 Defaults to MAX_MEM_LEVEL.
658 Defines the strategy used to tune the compression. The valid values are
659 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED>, C<Z_RLE>, C<Z_FIXED> and
662 The default is Z_DEFAULT_STRATEGY.
666 When a dictionary is specified I<Compress::Raw::Zlib> will automatically
667 call C<deflateSetDictionary> directly after calling C<deflateInit>. The
668 Adler32 value for the dictionary can be obtained by calling the method
669 C<$d-E<gt>dict_adler()>.
671 The default is no dictionary.
675 Sets the initial size for the output buffer used by the C<$d-E<gt>deflate>
676 and C<$d-E<gt>flush> methods. If the buffer has to be
677 reallocated to increase the size, it will grow in increments of
680 The default buffer size is 4096.
682 =item B<-AppendOutput>
684 This option controls how data is written to the output buffer by the
685 C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods.
687 If the C<AppendOutput> option is set to false, the output buffers in the
688 C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods will be truncated before
689 uncompressed data is written to them.
691 If the option is set to true, uncompressed data will be appended to the
692 output buffer in the C<$d-E<gt>deflate> and C<$d-E<gt>flush> methods.
694 This option defaults to false.
698 If set to true, a crc32 checksum of the uncompressed data will be
699 calculated. Use the C<$d-E<gt>crc32> method to retrieve this value.
701 This option defaults to false.
705 If set to true, an adler32 checksum of the uncompressed data will be
706 calculated. Use the C<$d-E<gt>adler32> method to retrieve this value.
708 This option defaults to false.
712 Here is an example of using the C<Compress::Raw::Zlib::Deflate> optional
713 parameter list to override the default buffer size and compression
714 level. All other options will take their default values.
716 my $d = new Compress::Raw::Zlib::Deflate ( -Bufsize => 300,
717 -Level => Z_BEST_SPEED ) ;
719 =head2 B<$status = $d-E<gt>deflate($input, $output)>
721 Deflates the contents of C<$input> and writes the compressed data to
724 The C<$input> and C<$output> parameters can be either scalars or scalar
727 When finished, C<$input> will be completely processed (assuming there
728 were no errors). If the deflation was successful it writes the deflated
729 data to C<$output> and returns a status value of C<Z_OK>.
731 On error, it returns a I<zlib> error code.
733 If the C<AppendOutput> option is set to true in the constructor for
734 the C<$d> object, the compressed data will be appended to C<$output>. If
735 it is false, C<$output> will be truncated before any compressed data is
738 B<Note>: This method will not necessarily write compressed data to
739 C<$output> every time it is called. So do not assume that there has been
740 an error if the contents of C<$output> is empty on returning from
741 this method. As long as the return code from the method is C<Z_OK>,
742 the deflate has succeeded.
744 =head2 B<$status = $d-E<gt>flush($output [, $flush_type]) >
746 Typically used to finish the deflation. Any pending output will be
747 written to C<$output>.
749 Returns C<Z_OK> if successful.
751 Note that flushing can seriously degrade the compression ratio, so it
752 should only be used to terminate a decompression (using C<Z_FINISH>) or
753 when you want to create a I<full flush point> (using C<Z_FULL_FLUSH>).
755 By default the C<flush_type> used is C<Z_FINISH>. Other valid values
756 for C<flush_type> are C<Z_NO_FLUSH>, C<Z_PARTIAL_FLUSH>, C<Z_SYNC_FLUSH>
757 and C<Z_FULL_FLUSH>. It is strongly recommended that you only set the
758 C<flush_type> parameter if you fully understand the implications of
759 what it does. See the C<zlib> documentation for details.
761 If the C<AppendOutput> option is set to true in the constructor for
762 the C<$d> object, the compressed data will be appended to C<$output>. If
763 it is false, C<$output> will be truncated before any compressed data is
766 =head2 B<$status = $d-E<gt>deflateReset() >
768 This method will reset the deflation object C<$d>. It can be used when you
769 are compressing multiple data streams and want to use the same object to
770 compress each of them. It should only be used once the previous data stream
771 has been flushed successfully, i.e. a call to C<< $d->flush(Z_FINISH) >> has
774 Returns C<Z_OK> if successful.
776 =head2 B<$status = $d-E<gt>deflateParams([OPT])>
778 Change settings for the deflate object C<$d>.
780 The list of the valid options is shown below. Options not specified
781 will remain unchanged.
787 Defines the compression level. Valid values are 0 through 9,
788 C<Z_NO_COMPRESSION>, C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and
789 C<Z_DEFAULT_COMPRESSION>.
793 Defines the strategy used to tune the compression. The valid values are
794 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
798 Sets the initial size for the output buffer used by the C<$d-E<gt>deflate>
799 and C<$d-E<gt>flush> methods. If the buffer has to be
800 reallocated to increase the size, it will grow in increments of
805 =head2 B<$status = $d-E<gt>deflateTune($good_length, $max_lazy, $nice_length, $max_chain)>
807 Tune the internal settings for the deflate object C<$d>. This option is
808 only available if you are running zlib 1.2.2.3 or better.
810 Refer to the documentation in zlib.h for instructions on how to fly
813 =head2 B<$d-E<gt>dict_adler()>
815 Returns the adler32 value for the dictionary.
817 =head2 B<$d-E<gt>crc32()>
819 Returns the crc32 value for the uncompressed data to date.
821 If the C<CRC32> option is not enabled in the constructor for this object,
822 this method will always return 0;
824 =head2 B<$d-E<gt>adler32()>
826 Returns the adler32 value for the uncompressed data to date.
828 =head2 B<$d-E<gt>msg()>
830 Returns the last error message generated by zlib.
832 =head2 B<$d-E<gt>total_in()>
834 Returns the total number of bytes uncompressed bytes input to deflate.
836 =head2 B<$d-E<gt>total_out()>
838 Returns the total number of compressed bytes output from deflate.
840 =head2 B<$d-E<gt>get_Strategy()>
842 Returns the deflation strategy currently used. Valid values are
843 C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>.
845 =head2 B<$d-E<gt>get_Level()>
847 Returns the compression level being used.
849 =head2 B<$d-E<gt>get_BufSize()>
851 Returns the buffer size used to carry out the compression.
855 Here is a trivial example of using C<deflate>. It simply reads standard
856 input, deflates it and writes it to standard output.
861 use Compress::Raw::Zlib ;
865 my $x = new Compress::Raw::Zlib::Deflate
866 or die "Cannot create a deflation stream\n" ;
868 my ($output, $status) ;
871 $status = $x->deflate($_, $output) ;
874 or die "deflation failed\n" ;
879 $status = $x->flush($output) ;
882 or die "deflation failed\n" ;
886 =head1 Compress::Raw::Zlib::Inflate
888 This section defines an interface that allows in-memory uncompression using
889 the I<inflate> interface provided by zlib.
891 Here is a definition of the interface:
893 =head2 B< ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) >
895 Initialises an inflation object.
897 In a list context it returns the inflation object, C<$i>, and the
898 I<zlib> status code (C<$status>). In a scalar context it returns the
899 inflation object only.
901 If successful, C<$i> will hold the inflation object and C<$status> will
904 If not successful, C<$i> will be I<undef> and C<$status> will hold the
907 The function optionally takes a number of named options specified as
908 C<< -Name => value >> pairs. This allows individual options to be
909 tailored without having to specify them all in the parameter list.
911 For backward compatibility, it is also possible to pass the parameters
912 as a reference to a hash containing the C<< name=>value >> pairs.
914 Here is a list of the valid options:
920 To uncompress an RFC 1950 data stream, set C<WindowBits> to a positive
921 number between 8 and 15.
923 To uncompress an RFC 1951 data stream, set C<WindowBits> to C<-MAX_WBITS>.
925 To uncompress an RFC 1952 data stream (i.e. gzip), set C<WindowBits> to
928 To auto-detect and uncompress an RFC 1950 or RFC 1952 data stream (i.e.
929 gzip), set C<WindowBits> to C<WANT_GZIP_OR_ZLIB>.
931 For a full definition of the meaning and valid values for C<WindowBits>
932 refer to the I<zlib> documentation for I<inflateInit2>.
934 Defaults to C<MAX_WBITS>.
938 Sets the initial size for the output buffer used by the C<$i-E<gt>inflate>
939 method. If the output buffer in this method has to be reallocated to
940 increase the size, it will grow in increments of C<Bufsize>.
946 The default is no dictionary.
948 =item B<-AppendOutput>
950 This option controls how data is written to the output buffer by the
951 C<$i-E<gt>inflate> method.
953 If the option is set to false, the output buffer in the C<$i-E<gt>inflate>
954 method will be truncated before uncompressed data is written to it.
956 If the option is set to true, uncompressed data will be appended to the
957 output buffer by the C<$i-E<gt>inflate> method.
959 This option defaults to false.
963 If set to true, a crc32 checksum of the uncompressed data will be
964 calculated. Use the C<$i-E<gt>crc32> method to retrieve this value.
966 This option defaults to false.
970 If set to true, an adler32 checksum of the uncompressed data will be
971 calculated. Use the C<$i-E<gt>adler32> method to retrieve this value.
973 This option defaults to false.
975 =item B<-ConsumeInput>
977 If set to true, this option will remove compressed data from the input
978 buffer of the C<< $i->inflate >> method as the inflate progresses.
980 This option can be useful when you are processing compressed data that is
981 embedded in another file/buffer. In this case the data that immediately
982 follows the compressed stream will be left in the input buffer.
984 This option defaults to true.
986 =item B<-LimitOutput>
988 The C<LimitOutput> option changes the behavior of the C<< $i->inflate >>
989 method so that the amount of memory used by the output buffer can be
992 When C<LimitOutput> is used the size of the output buffer used will either
993 be the value of the C<Bufsize> option or the amount of memory already
994 allocated to C<$output>, whichever is larger. Predicting the output size
995 available is tricky, so don't rely on getting an exact output buffer size.
997 When C<LimitOutout> is not specified C<< $i->inflate >> will use as much
998 memory as it takes to write all the uncompressed data it creates by
999 uncompressing the input buffer.
1001 If C<LimitOutput> is enabled, the C<ConsumeInput> option will also be
1004 This option defaults to false.
1006 See L</The LimitOutput option> for a discussion on why C<LimitOutput> is
1007 needed and how to use it.
1011 Here is an example of using an optional parameter to override the default
1014 my ($i, $status) = new Compress::Raw::Zlib::Inflate( -Bufsize => 300 ) ;
1016 =head2 B< $status = $i-E<gt>inflate($input, $output [,$eof]) >
1018 Inflates the complete contents of C<$input> and writes the uncompressed
1019 data to C<$output>. The C<$input> and C<$output> parameters can either be
1020 scalars or scalar references.
1022 Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
1023 compressed data has been successfully reached.
1025 If not successful C<$status> will hold the I<zlib> error code.
1027 If the C<ConsumeInput> option has been set to true when the
1028 C<Compress::Raw::Zlib::Inflate> object is created, the C<$input> parameter
1029 is modified by C<inflate>. On completion it will contain what remains
1030 of the input buffer after inflation. In practice, this means that when
1031 the return status is C<Z_OK> the C<$input> parameter will contain an
1032 empty string, and when the return status is C<Z_STREAM_END> the C<$input>
1033 parameter will contains what (if anything) was stored in the input buffer
1034 after the deflated data stream.
1036 This feature is useful when processing a file format that encapsulates
1037 a compressed data stream (e.g. gzip, zip) and there is useful data
1038 immediately after the deflation stream.
1040 If the C<AppendOutput> option is set to true in the constructor for
1041 this object, the uncompressed data will be appended to C<$output>. If
1042 it is false, C<$output> will be truncated before any uncompressed data
1045 The C<$eof> parameter needs a bit of explanation.
1047 Prior to version 1.2.0, zlib assumed that there was at least one trailing
1048 byte immediately after the compressed data stream when it was carrying out
1049 decompression. This normally isn't a problem because the majority of zlib
1050 applications guarantee that there will be data directly after the
1051 compressed data stream. For example, both gzip (RFC 1950) and zip both
1052 define trailing data that follows the compressed data stream.
1054 The C<$eof> parameter only needs to be used if B<all> of the following
1061 You are either using a copy of zlib that is older than version 1.2.0 or you
1062 want your application code to be able to run with as many different
1063 versions of zlib as possible.
1067 You have set the C<WindowBits> parameter to C<-MAX_WBITS> in the constructor
1068 for this object, i.e. you are uncompressing a raw deflated data stream
1073 There is no data immediately after the compressed data stream.
1077 If B<all> of these are the case, then you need to set the C<$eof> parameter
1078 to true on the final call (and only the final call) to C<$i-E<gt>inflate>.
1080 If you have built this module with zlib >= 1.2.0, the C<$eof> parameter is
1081 ignored. You can still set it if you want, but it won't be used behind the
1084 =head2 B<$status = $i-E<gt>inflateSync($input)>
1086 This method can be used to attempt to recover good data from a compressed
1087 data stream that is partially corrupt.
1088 It scans C<$input> until it reaches either a I<full flush point> or the
1091 If a I<full flush point> is found, C<Z_OK> is returned and C<$input>
1092 will be have all data up to the flush point removed. This data can then be
1093 passed to the C<$i-E<gt>inflate> method to be uncompressed.
1095 Any other return code means that a flush point was not found. If more
1096 data is available, C<inflateSync> can be called repeatedly with more
1097 compressed data until the flush point is found.
1099 Note I<full flush points> are not present by default in compressed
1100 data streams. They must have been added explicitly when the data stream
1101 was created by calling C<Compress::Deflate::flush> with C<Z_FULL_FLUSH>.
1103 =head2 B<$i-E<gt>dict_adler()>
1105 Returns the adler32 value for the dictionary.
1107 =head2 B<$i-E<gt>crc32()>
1109 Returns the crc32 value for the uncompressed data to date.
1111 If the C<CRC32> option is not enabled in the constructor for this object,
1112 this method will always return 0;
1114 =head2 B<$i-E<gt>adler32()>
1116 Returns the adler32 value for the uncompressed data to date.
1118 If the C<ADLER32> option is not enabled in the constructor for this object,
1119 this method will always return 0;
1121 =head2 B<$i-E<gt>msg()>
1123 Returns the last error message generated by zlib.
1125 =head2 B<$i-E<gt>total_in()>
1127 Returns the total number of bytes compressed bytes input to inflate.
1129 =head2 B<$i-E<gt>total_out()>
1131 Returns the total number of uncompressed bytes output from inflate.
1133 =head2 B<$d-E<gt>get_BufSize()>
1135 Returns the buffer size used to carry out the decompression.
1139 Here is an example of using C<inflate>.
1144 use Compress::Raw::Zlib;
1146 my $x = new Compress::Raw::Zlib::Inflate()
1147 or die "Cannot create a inflation stream\n" ;
1153 my ($output, $status) ;
1154 while (read(STDIN, $input, 4096))
1156 $status = $x->inflate($input, $output) ;
1160 last if $status != Z_OK ;
1163 die "inflation failed\n"
1164 unless $status == Z_STREAM_END ;
1166 The next example show how to use the C<LimitOutput> option. Notice the use
1167 of two nested loops in this case. The outer loop reads the data from the
1168 input source - STDIN and the inner loop repeatedly calls C<inflate> until
1169 C<$input> is exhausted, we get an error, or the end of the stream is
1170 reached. One point worth remembering is by using the C<LimitOutput> option
1171 you also get C<ConsumeInput> set as well - this makes the code below much
1177 use Compress::Raw::Zlib;
1179 my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
1180 or die "Cannot create a inflation stream\n" ;
1186 my ($output, $status) ;
1189 while (read(STDIN, $input, 4096))
1193 $status = $x->inflate($input, $output) ;
1198 unless $status == Z_OK || $status == Z_BUF_ERROR ;
1200 while ($status == Z_OK && length $input);
1203 die "inflation failed\n"
1204 unless $status == Z_STREAM_END ;
1206 =head1 CHECKSUM FUNCTIONS
1208 Two functions are provided by I<zlib> to calculate checksums. For the
1209 Perl interface, the order of the two parameters in both functions has
1210 been reversed. This allows both running checksums and one off
1211 calculations to be done.
1213 $crc = adler32($buffer [,$crc]) ;
1214 $crc = crc32($buffer [,$crc]) ;
1216 The buffer parameters can either be a scalar or a scalar reference.
1218 If the $crc parameters is C<undef>, the crc value will be reset.
1220 If you have built this module with zlib 1.2.3 or better, two more
1221 CRC-related functions are available.
1223 $crc = adler32_combine($crc1, $crc2, $len2)l
1224 $crc = crc32_combine($adler1, $adler2, $len2)
1226 These functions allow checksums to be merged.
1230 =head2 my $version = Compress::Raw::Zlib::zlib_version();
1232 Returns the version of the zlib library.
1234 =head1 The LimitOutput option.
1236 By default C<< $i->inflate($input, $output) >> will uncompress I<all> data
1237 in C<$input> and write I<all> of the uncompressed data it has generated to
1238 C<$output>. This makes the interface to C<inflate> much simpler - if the
1239 method has uncompressed C<$input> successfully I<all> compressed data in
1240 C<$input> will have been dealt with. So if you are reading from an input
1241 source and uncompressing as you go the code will look something like this
1246 use Compress::Raw::Zlib;
1248 my $x = new Compress::Raw::Zlib::Inflate()
1249 or die "Cannot create a inflation stream\n" ;
1253 my ($output, $status) ;
1254 while (read(STDIN, $input, 4096))
1256 $status = $x->inflate($input, $output) ;
1260 last if $status != Z_OK ;
1263 die "inflation failed\n"
1264 unless $status == Z_STREAM_END ;
1266 The points to note are
1272 The main processing loop in the code handles reading of compressed data
1277 The status code returned from C<inflate> will only trigger termination of
1278 the main processing loop if it isn't C<Z_OK>. When C<LimitOutput> has not
1279 been used the C<Z_OK> status means means that the end of the compressed
1280 data stream has been reached or there has been an error in uncompression.
1284 After the call to C<inflate> I<all> of the uncompressed data in C<$input>
1285 will have been processed. This means the subsequent call to C<read> can
1286 overwrite it's contents without any problem.
1290 For most use-cases the behavior described above is acceptable (this module
1291 and it's predecessor, C<Compress::Zlib>, have used it for over 10 years
1292 without an issue), but in a few very specific use-cases the amount of
1293 memory required for C<$output> can prohibitively large. For example, if the
1294 compressed data stream contains the same pattern repeated thousands of
1295 times, a relatively small compressed data stream can uncompress into
1296 hundreds of megabytes. Remember C<inflate> will keep allocating memory
1297 until I<all> the uncompressed data has been written to the output buffer -
1298 the size of C<$output> is unbounded.
1300 The C<LimitOutput> option is designed to help with this use-case.
1302 The main difference in your code when using C<LimitOutput> is having to
1303 deal with cases where the C<$input> parameter still contains some
1304 uncompressed data that C<inflate> hasn't processed yet. The status code
1305 returned from C<inflate> will be C<Z_OK> if uncompression took place and
1306 C<Z_BUF_ERROR> if the output buffer is full.
1308 Below is typical code that shows how to use C<LimitOutput>.
1313 use Compress::Raw::Zlib;
1315 my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1)
1316 or die "Cannot create a inflation stream\n" ;
1322 my ($output, $status) ;
1325 while (read(STDIN, $input, 4096))
1329 $status = $x->inflate($input, $output) ;
1334 unless $status == Z_OK || $status == Z_BUF_ERROR ;
1336 while ($status == Z_OK && length $input);
1339 die "inflation failed\n"
1340 unless $status == Z_STREAM_END ;
1342 Points to note this time:
1348 There are now two nested loops in the code: the outer loop for reading the
1349 compressed data from STDIN, as before; and the inner loop to carry out the
1354 There are two exit points from the inner uncompression loop.
1356 Firstly when C<inflate> has returned a status other than C<Z_OK> or
1357 C<Z_BUF_ERROR>. This means that either the end of the compressed data
1358 stream has been reached (C<Z_STREAM_END>) or there is an error in the
1359 compressed data. In either of these cases there is no point in continuing
1360 with reading the compressed data, so both loops are terminated.
1362 The second exit point tests if there is any data left in the input buffer,
1363 C<$input> - remember that the C<ConsumeInput> option is automatically
1364 enabled when C<LimitOutput> is used. When the input buffer has been
1365 exhausted, the outer loop can run again and overwrite a now empty
1370 =head1 ACCESSING ZIP FILES
1372 Although it is possible (with some effort on your part) to use this module
1373 to access .zip files, there are other perl modules available that will
1374 do all the hard work for you. Check out C<Archive::Zip>,
1375 C<IO::Compress::Zip> and C<IO::Uncompress::Unzip>.
1379 All the I<zlib> constants are automatically imported when you make use
1380 of I<Compress::Raw::Zlib>.
1384 L<Compress::Zlib>, 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>
1386 L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
1388 L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
1389 L<Archive::Tar|Archive::Tar>,
1390 L<IO::Zlib|IO::Zlib>
1392 For RFC 1950, 1951 and 1952 see
1393 F<http://www.faqs.org/rfcs/rfc1950.html>,
1394 F<http://www.faqs.org/rfcs/rfc1951.html> and
1395 F<http://www.faqs.org/rfcs/rfc1952.html>
1397 The I<zlib> compression library was written by Jean-loup Gailly
1398 F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
1400 The primary site for the I<zlib> compression library is
1401 F<http://www.zlib.org>.
1403 The primary site for gzip is F<http://www.gzip.org>.
1407 This module was written by Paul Marquess, F<pmqs@cpan.org>.
1409 =head1 MODIFICATION HISTORY
1411 See the Changes file.
1413 =head1 COPYRIGHT AND LICENSE
1415 Copyright (c) 2005-2009 Paul Marquess. All rights reserved.
1417 This program is free software; you can redistribute it and/or
1418 modify it under the same terms as Perl itself.