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