diff options
Diffstat (limited to '')
-rw-r--r-- | upstream/mageia-cauldron/man3pm/Compress::Zlib.3pm | 924 |
1 files changed, 924 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/Compress::Zlib.3pm b/upstream/mageia-cauldron/man3pm/Compress::Zlib.3pm new file mode 100644 index 00000000..495e4392 --- /dev/null +++ b/upstream/mageia-cauldron/man3pm/Compress::Zlib.3pm @@ -0,0 +1,924 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "Compress::Zlib 3pm" +.TH Compress::Zlib 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +Compress::Zlib \- Interface to zlib compression library +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 1 +\& use Compress::Zlib ; +\& +\& ($d, $status) = deflateInit( [OPT] ) ; +\& $status = $d\->deflate($input, $output) ; +\& $status = $d\->flush([$flush_type]) ; +\& $d\->deflateParams(OPTS) ; +\& $d\->deflateTune(OPTS) ; +\& $d\->dict_adler() ; +\& $d\->crc32() ; +\& $d\->adler32() ; +\& $d\->total_in() ; +\& $d\->total_out() ; +\& $d\->msg() ; +\& $d\->get_Strategy(); +\& $d\->get_Level(); +\& $d\->get_BufSize(); +\& +\& ($i, $status) = inflateInit( [OPT] ) ; +\& $status = $i\->inflate($input, $output [, $eof]) ; +\& $status = $i\->inflateSync($input) ; +\& $i\->dict_adler() ; +\& $d\->crc32() ; +\& $d\->adler32() ; +\& $i\->total_in() ; +\& $i\->total_out() ; +\& $i\->msg() ; +\& $d\->get_BufSize(); +\& +\& $dest = compress($source) ; +\& $dest = uncompress($source) ; +\& +\& $gz = gzopen($filename or filehandle, $mode) ; +\& $bytesread = $gz\->gzread($buffer [,$size]) ; +\& $bytesread = $gz\->gzreadline($line) ; +\& $byteswritten = $gz\->gzwrite($buffer) ; +\& $status = $gz\->gzflush($flush) ; +\& $offset = $gz\->gztell() ; +\& $status = $gz\->gzseek($offset, $whence) ; +\& $status = $gz\->gzclose() ; +\& $status = $gz\->gzeof() ; +\& $status = $gz\->gzsetparams($level, $strategy) ; +\& $errstring = $gz\->gzerror() ; +\& $gzerrno +\& +\& $dest = Compress::Zlib::memGzip($buffer) ; +\& $dest = Compress::Zlib::memGunzip($buffer) ; +\& +\& $crc = adler32($buffer [,$crc]) ; +\& $crc = crc32($buffer [,$crc]) ; +\& +\& $crc = crc32_combine($crc1, $crc2, $len2); +\& $adler = adler32_combine($adler1, $adler2, $len2); +\& +\& my $version = Compress::Raw::Zlib::zlib_version(); +.Ve +.SH DESCRIPTION +.IX Header "DESCRIPTION" +The \fICompress::Zlib\fR module provides a Perl interface to the \fIzlib\fR +compression library (see "AUTHOR" for details about where to get +\&\fIzlib\fR). +.PP +The \f(CW\*(C`Compress::Zlib\*(C'\fR module can be split into two general areas of +functionality, namely a simple read/write interface to \fIgzip\fR files +and a low-level in-memory compression/decompression interface. +.PP +Each of these areas will be discussed in the following sections. +.SS "Notes for users of Compress::Zlib version 1" +.IX Subsection "Notes for users of Compress::Zlib version 1" +The main change in \f(CW\*(C`Compress::Zlib\*(C'\fR version 2.x is that it does not now +interface directly to the zlib library. Instead it uses the +\&\f(CW\*(C`IO::Compress::Gzip\*(C'\fR and \f(CW\*(C`IO::Uncompress::Gunzip\*(C'\fR modules for +reading/writing gzip files, and the \f(CW\*(C`Compress::Raw::Zlib\*(C'\fR module for some +low-level zlib access. +.PP +The interface provided by version 2 of this module should be 100% backward +compatible with version 1. If you find a difference in the expected +behaviour please contact the author (See "AUTHOR"). See "GZIP INTERFACE" +.PP +With the creation of the \f(CW\*(C`IO::Compress\*(C'\fR and \f(CW\*(C`IO::Uncompress\*(C'\fR modules no +new features are planned for \f(CW\*(C`Compress::Zlib\*(C'\fR \- the new modules do +everything that \f(CW\*(C`Compress::Zlib\*(C'\fR does and then some. Development on +\&\f(CW\*(C`Compress::Zlib\*(C'\fR will be limited to bug fixes only. +.PP +If you are writing new code, your first port of call should be one of the +new \f(CW\*(C`IO::Compress\*(C'\fR or \f(CW\*(C`IO::Uncompress\*(C'\fR modules. +.SH "GZIP INTERFACE" +.IX Header "GZIP INTERFACE" +A number of functions are supplied in \fIzlib\fR for reading and writing +\&\fIgzip\fR files that conform to RFC 1952. This module provides an interface +to most of them. +.PP +If you have previously used \f(CW\*(C`Compress::Zlib\*(C'\fR 1.x, the following +enhancements/changes have been made to the \f(CW\*(C`gzopen\*(C'\fR interface: +.IP 1. 5 +If you want to open either STDIN or STDOUT with \f(CW\*(C`gzopen\*(C'\fR, you can now +optionally use the special filename "\f(CW\*(C`\-\*(C'\fR" as a synonym for \f(CW\*(C`\e*STDIN\*(C'\fR and +\&\f(CW\*(C`\e*STDOUT\*(C'\fR. +.IP 2. 5 +In \f(CW\*(C`Compress::Zlib\*(C'\fR version 1.x, \f(CW\*(C`gzopen\*(C'\fR used the zlib library to open +the underlying file. This made things especially tricky when a Perl +filehandle was passed to \f(CW\*(C`gzopen\*(C'\fR. Behind the scenes the numeric C file +descriptor had to be extracted from the Perl filehandle and this passed to +the zlib library. +.Sp +Apart from being non-portable to some operating systems, this made it +difficult to use \f(CW\*(C`gzopen\*(C'\fR in situations where you wanted to extract/create +a gzip data stream that is embedded in a larger file, without having to +resort to opening and closing the file multiple times. +.Sp +It also made it impossible to pass a perl filehandle that wasn't associated +with a real filesystem file, like, say, an \f(CW\*(C`IO::String\*(C'\fR. +.Sp +In \f(CW\*(C`Compress::Zlib\*(C'\fR version 2.x, the \f(CW\*(C`gzopen\*(C'\fR interface has been +completely rewritten to use the IO::Compress::Gzip +for writing gzip files and IO::Uncompress::Gunzip +for reading gzip files. None of the limitations mentioned above apply. +.IP 3. 5 +Addition of \f(CW\*(C`gzseek\*(C'\fR to provide a restricted \f(CW\*(C`seek\*(C'\fR interface. +.IP 4. 5 +Added \f(CW\*(C`gztell\*(C'\fR. +.PP +A more complete and flexible interface for reading/writing gzip +files/buffers is included with the module \f(CW\*(C`IO\-Compress\-Zlib\*(C'\fR. See +IO::Compress::Gzip and +IO::Uncompress::Gunzip for more details. +.ie n .IP "\fR\fB$gz\fR\fB = gzopen($filename, \fR\fB$mode\fR\fB)\fR" 5 +.el .IP "\fR\f(CB$gz\fR\fB = gzopen($filename, \fR\f(CB$mode\fR\fB)\fR" 5 +.IX Item "$gz = gzopen($filename, $mode)" +.PD 0 +.ie n .IP "\fR\fB$gz\fR\fB = gzopen($filehandle, \fR\fB$mode\fR\fB)\fR" 5 +.el .IP "\fR\f(CB$gz\fR\fB = gzopen($filehandle, \fR\f(CB$mode\fR\fB)\fR" 5 +.IX Item "$gz = gzopen($filehandle, $mode)" +.PD +This function opens either the \fIgzip\fR file \f(CW$filename\fR for reading or +writing or attaches to the opened filehandle, \f(CW$filehandle\fR. +It returns an object on success and \f(CW\*(C`undef\*(C'\fR on failure. +.Sp +When writing a gzip file this interface will \fIalways\fR create the smallest +possible gzip header (exactly 10 bytes). If you want greater control over +what gets stored in the gzip header (like the original filename or a +comment) use IO::Compress::Gzip instead. Similarly if +you want to read the contents of the gzip header use +IO::Uncompress::Gunzip. +.Sp +The second parameter, \f(CW$mode\fR, is used to specify whether the file is +opened for reading or writing and to optionally specify a compression +level and compression strategy when writing. The format of the \f(CW$mode\fR +parameter is similar to the mode parameter to the 'C' function \f(CW\*(C`fopen\*(C'\fR, +so "rb" is used to open for reading, "wb" for writing and "ab" for +appending (writing at the end of the file). +.Sp +To specify a compression level when writing, append a digit between 0 +and 9 to the mode string \-\- 0 means no compression and 9 means maximum +compression. +If no compression level is specified Z_DEFAULT_COMPRESSION is used. +.Sp +To specify the compression strategy when writing, append 'f' for filtered +data, 'h' for Huffman only compression, or 'R' for run-length encoding. +If no strategy is specified Z_DEFAULT_STRATEGY is used. +.Sp +So, for example, "wb9" means open for writing with the maximum compression +using the default strategy and "wb4R" means open for writing with compression +level 4 and run-length encoding. +.Sp +Refer to the \fIzlib\fR documentation for the exact format of the \f(CW$mode\fR +parameter. +.ie n .IP "\fR\fB$bytesread\fR\fB = \fR\fB$gz\fR\fB\->gzread($buffer [, \fR\fB$size\fR\fB]) ;\fR" 5 +.el .IP "\fR\f(CB$bytesread\fR\fB = \fR\f(CB$gz\fR\fB\->gzread($buffer [, \fR\f(CB$size\fR\fB]) ;\fR" 5 +.IX Item "$bytesread = $gz->gzread($buffer [, $size]) ;" +Reads \f(CW$size\fR bytes from the compressed file into \f(CW$buffer\fR. If +\&\f(CW$size\fR is not specified, it will default to 4096. If the scalar +\&\f(CW$buffer\fR is not large enough, it will be extended automatically. +.Sp +Returns the number of bytes actually read. On EOF it returns 0 and in +the case of an error, \-1. +.ie n .IP "\fR\fB$bytesread\fR\fB = \fR\fB$gz\fR\fB\->gzreadline($line) ;\fR" 5 +.el .IP "\fR\f(CB$bytesread\fR\fB = \fR\f(CB$gz\fR\fB\->gzreadline($line) ;\fR" 5 +.IX Item "$bytesread = $gz->gzreadline($line) ;" +Reads the next line from the compressed file into \f(CW$line\fR. +.Sp +Returns the number of bytes actually read. On EOF it returns 0 and in +the case of an error, \-1. +.Sp +It is legal to intermix calls to \f(CW\*(C`gzread\*(C'\fR and \f(CW\*(C`gzreadline\*(C'\fR. +.Sp +To maintain backward compatibility with version 1.x of this module +\&\f(CW\*(C`gzreadline\*(C'\fR ignores the \f(CW$/\fR variable \- it \fIalways\fR uses the string +\&\f(CW"\en"\fR as the line delimiter. +.Sp +If you want to read a gzip file a line at a time and have it respect the +\&\f(CW$/\fR variable (or \f(CW$INPUT_RECORD_SEPARATOR\fR, or \f(CW$RS\fR when \f(CW\*(C`English\*(C'\fR is +in use) see IO::Uncompress::Gunzip. +.ie n .IP "\fR\fB$byteswritten\fR\fB = \fR\fB$gz\fR\fB\->gzwrite($buffer) ;\fR" 5 +.el .IP "\fR\f(CB$byteswritten\fR\fB = \fR\f(CB$gz\fR\fB\->gzwrite($buffer) ;\fR" 5 +.IX Item "$byteswritten = $gz->gzwrite($buffer) ;" +Writes the contents of \f(CW$buffer\fR to the compressed file. Returns the +number of bytes actually written, or 0 on error. +.ie n .IP "\fR\fB$status\fR\fB = \fR\fB$gz\fR\fB\->gzflush($flush_type) ;\fR" 5 +.el .IP "\fR\f(CB$status\fR\fB = \fR\f(CB$gz\fR\fB\->gzflush($flush_type) ;\fR" 5 +.IX Item "$status = $gz->gzflush($flush_type) ;" +Flushes all pending output into the compressed file. +.Sp +This method takes an optional parameter, \f(CW$flush_type\fR, that controls +how the flushing will be carried out. By default the \f(CW$flush_type\fR +used is \f(CW\*(C`Z_FINISH\*(C'\fR. Other valid values for \f(CW$flush_type\fR are +\&\f(CW\*(C`Z_NO_FLUSH\*(C'\fR, \f(CW\*(C`Z_SYNC_FLUSH\*(C'\fR, \f(CW\*(C`Z_FULL_FLUSH\*(C'\fR and \f(CW\*(C`Z_BLOCK\*(C'\fR. It is +strongly recommended that you only set the \f(CW\*(C`flush_type\*(C'\fR parameter if +you fully understand the implications of what it does \- overuse of \f(CW\*(C`flush\*(C'\fR +can seriously degrade the level of compression achieved. See the \f(CW\*(C`zlib\*(C'\fR +documentation for details. +.Sp +Returns 0 on success. +.ie n .IP "\fR\fB$offset\fR\fB = \fR\fB$gz\fR\fB\->gztell() ;\fR" 5 +.el .IP "\fR\f(CB$offset\fR\fB = \fR\f(CB$gz\fR\fB\->gztell() ;\fR" 5 +.IX Item "$offset = $gz->gztell() ;" +Returns the uncompressed file offset. +.ie n .IP "\fR\fB$status\fR\fB = \fR\fB$gz\fR\fB\->gzseek($offset, \fR\fB$whence\fR\fB) ;\fR" 5 +.el .IP "\fR\f(CB$status\fR\fB = \fR\f(CB$gz\fR\fB\->gzseek($offset, \fR\f(CB$whence\fR\fB) ;\fR" 5 +.IX Item "$status = $gz->gzseek($offset, $whence) ;" +Provides a sub-set of the \f(CW\*(C`seek\*(C'\fR functionality, with the restriction +that it is only legal to seek forward in the compressed file. +It is a fatal error to attempt to seek backward. +.Sp +When opened for writing, empty parts of the file will have NULL (0x00) +bytes written to them. +.Sp +The \f(CW$whence\fR parameter should be one of SEEK_SET, SEEK_CUR or SEEK_END. +.Sp +Returns 1 on success, 0 on failure. +.ie n .IP \fR\fB$gz\fR\fB\->gzclose\fR 5 +.el .IP \fR\f(CB$gz\fR\fB\->gzclose\fR 5 +.IX Item "$gz->gzclose" +Closes the compressed file. Any pending data is flushed to the file +before it is closed. +.Sp +Returns 0 on success. +.ie n .IP "\fR\fB$gz\fR\fB\->gzsetparams($level, \fR\fB$strategy\fR\fB\fR" 5 +.el .IP "\fR\f(CB$gz\fR\fB\->gzsetparams($level, \fR\f(CB$strategy\fR\fB\fR" 5 +.IX Item "$gz->gzsetparams($level, $strategy" +Change settings for the deflate stream \f(CW$gz\fR. +.Sp +The list of the valid options is shown below. Options not specified +will remain unchanged. +.Sp +Note: This method is only available if you are running zlib 1.0.6 or better. +.RS 5 +.ie n .IP \fR\fB$level\fR\fB\fR 5 +.el .IP \fR\f(CB$level\fR\fB\fR 5 +.IX Item "$level" +Defines the compression level. Valid values are 0 through 9, +\&\f(CW\*(C`Z_NO_COMPRESSION\*(C'\fR, \f(CW\*(C`Z_BEST_SPEED\*(C'\fR, \f(CW\*(C`Z_BEST_COMPRESSION\*(C'\fR, and +\&\f(CW\*(C`Z_DEFAULT_COMPRESSION\*(C'\fR. +.ie n .IP \fR\fB$strategy\fR\fB\fR 5 +.el .IP \fR\f(CB$strategy\fR\fB\fR 5 +.IX Item "$strategy" +Defines the strategy used to tune the compression. The valid values are +\&\f(CW\*(C`Z_DEFAULT_STRATEGY\*(C'\fR, \f(CW\*(C`Z_FILTERED\*(C'\fR and \f(CW\*(C`Z_HUFFMAN_ONLY\*(C'\fR. +.RE +.RS 5 +.RE +.ie n .IP \fR\fB$gz\fR\fB\->gzerror\fR 5 +.el .IP \fR\f(CB$gz\fR\fB\->gzerror\fR 5 +.IX Item "$gz->gzerror" +Returns the \fIzlib\fR error message or number for the last operation +associated with \f(CW$gz\fR. The return value will be the \fIzlib\fR error +number when used in a numeric context and the \fIzlib\fR error message +when used in a string context. The \fIzlib\fR error number constants, +shown below, are available for use. +.Sp +.Vb 7 +\& Z_OK +\& Z_STREAM_END +\& Z_ERRNO +\& Z_STREAM_ERROR +\& Z_DATA_ERROR +\& Z_MEM_ERROR +\& Z_BUF_ERROR +.Ve +.ie n .IP \fR\fB$gzerrno\fR\fB\fR 5 +.el .IP \fR\f(CB$gzerrno\fR\fB\fR 5 +.IX Item "$gzerrno" +The \f(CW$gzerrno\fR scalar holds the error code associated with the most +recent \fIgzip\fR routine. Note that unlike \f(CWgzerror()\fR, the error is +\&\fInot\fR associated with a particular file. +.Sp +As with \f(CWgzerror()\fR it returns an error number in numeric context and +an error message in string context. Unlike \f(CWgzerror()\fR though, the +error message will correspond to the \fIzlib\fR message when the error is +associated with \fIzlib\fR itself, or the UNIX error message when it is +not (i.e. \fIzlib\fR returned \f(CW\*(C`Z_ERRORNO\*(C'\fR). +.Sp +As there is an overlap between the error numbers used by \fIzlib\fR and +UNIX, \f(CW$gzerrno\fR should only be used to check for the presence of +\&\fIan\fR error in numeric context. Use \f(CWgzerror()\fR to check for specific +\&\fIzlib\fR errors. The \fIgzcat\fR example below shows how the variable can +be used safely. +.SS Examples +.IX Subsection "Examples" +Here is an example script which uses the interface. It implements a +\&\fIgzcat\fR function. +.PP +.Vb 2 +\& use strict ; +\& use warnings ; +\& +\& use Compress::Zlib ; +\& +\& # use stdin if no files supplied +\& @ARGV = \*(Aq\-\*(Aq unless @ARGV ; +\& +\& foreach my $file (@ARGV) { +\& my $buffer ; +\& +\& my $gz = gzopen($file, "rb") +\& or die "Cannot open $file: $gzerrno\en" ; +\& +\& print $buffer while $gz\->gzread($buffer) > 0 ; +\& +\& die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\en" +\& if $gzerrno != Z_STREAM_END ; +\& +\& $gz\->gzclose() ; +\& } +.Ve +.PP +Below is a script which makes use of \f(CW\*(C`gzreadline\*(C'\fR. It implements a +very simple \fIgrep\fR like script. +.PP +.Vb 2 +\& use strict ; +\& use warnings ; +\& +\& use Compress::Zlib ; +\& +\& die "Usage: gzgrep pattern [file...]\en" +\& unless @ARGV >= 1; +\& +\& my $pattern = shift ; +\& +\& # use stdin if no files supplied +\& @ARGV = \*(Aq\-\*(Aq unless @ARGV ; +\& +\& foreach my $file (@ARGV) { +\& my $gz = gzopen($file, "rb") +\& or die "Cannot open $file: $gzerrno\en" ; +\& +\& while ($gz\->gzreadline($_) > 0) { +\& print if /$pattern/ ; +\& } +\& +\& die "Error reading from $file: $gzerrno\en" +\& if $gzerrno != Z_STREAM_END ; +\& +\& $gz\->gzclose() ; +\& } +.Ve +.PP +This script, \fIgzstream\fR, does the opposite of the \fIgzcat\fR script +above. It reads from standard input and writes a gzip data stream to +standard output. +.PP +.Vb 2 +\& use strict ; +\& use warnings ; +\& +\& use Compress::Zlib ; +\& +\& binmode STDOUT; # gzopen only sets it on the fd +\& +\& my $gz = gzopen(\e*STDOUT, "wb") +\& or die "Cannot open stdout: $gzerrno\en" ; +\& +\& while (<>) { +\& $gz\->gzwrite($_) +\& or die "error writing: $gzerrno\en" ; +\& } +\& +\& $gz\->gzclose ; +.Ve +.SS Compress::Zlib::memGzip +.IX Subsection "Compress::Zlib::memGzip" +This function is used to create an in-memory gzip file with the minimum +possible gzip header (exactly 10 bytes). +.PP +.Vb 2 +\& $dest = Compress::Zlib::memGzip($buffer) +\& or die "Cannot compress: $gzerrno\en"; +.Ve +.PP +If successful, it returns the in-memory gzip file. Otherwise it returns +\&\f(CW\*(C`undef\*(C'\fR and the \f(CW$gzerrno\fR variable will store the zlib error code. +.PP +The \f(CW$buffer\fR parameter can either be a scalar or a scalar reference. +.PP +See IO::Compress::Gzip for an alternative way to +carry out in-memory gzip compression. +.SS Compress::Zlib::memGunzip +.IX Subsection "Compress::Zlib::memGunzip" +This function is used to uncompress an in-memory gzip file. +.PP +.Vb 2 +\& $dest = Compress::Zlib::memGunzip($buffer) +\& or die "Cannot uncompress: $gzerrno\en"; +.Ve +.PP +If successful, it returns the uncompressed gzip file. Otherwise it +returns \f(CW\*(C`undef\*(C'\fR and the \f(CW$gzerrno\fR variable will store the zlib error +code. +.PP +The \f(CW$buffer\fR parameter can either be a scalar or a scalar reference. The +contents of the \f(CW$buffer\fR parameter are destroyed after calling this function. +.PP +If \f(CW$buffer\fR consists of multiple concatenated gzip data streams only the +first will be uncompressed. Use \f(CW\*(C`gunzip\*(C'\fR with the \f(CW\*(C`MultiStream\*(C'\fR option in +the \f(CW\*(C`IO::Uncompress::Gunzip\*(C'\fR module if you need to deal with concatenated +data streams. +.PP +See IO::Uncompress::Gunzip for an alternative way +to carry out in-memory gzip uncompression. +.SH COMPRESS/UNCOMPRESS +.IX Header "COMPRESS/UNCOMPRESS" +Two functions are provided to perform in-memory compression/uncompression of +RFC 1950 data streams. They are called \f(CW\*(C`compress\*(C'\fR and \f(CW\*(C`uncompress\*(C'\fR. +.ie n .IP "\fR\fB$dest\fR\fB = compress($source [, \fR\fB$level\fR\fB] ) ;\fR" 5 +.el .IP "\fR\f(CB$dest\fR\fB = compress($source [, \fR\f(CB$level\fR\fB] ) ;\fR" 5 +.IX Item "$dest = compress($source [, $level] ) ;" +Compresses \f(CW$source\fR. If successful it returns the compressed +data. Otherwise it returns \fIundef\fR. +.Sp +The source buffer, \f(CW$source\fR, can either be a scalar or a scalar +reference. +.Sp +The \f(CW$level\fR parameter defines the compression level. Valid values are +0 through 9, \f(CW\*(C`Z_NO_COMPRESSION\*(C'\fR, \f(CW\*(C`Z_BEST_SPEED\*(C'\fR, +\&\f(CW\*(C`Z_BEST_COMPRESSION\*(C'\fR, and \f(CW\*(C`Z_DEFAULT_COMPRESSION\*(C'\fR. +If \f(CW$level\fR is not specified \f(CW\*(C`Z_DEFAULT_COMPRESSION\*(C'\fR will be used. +.ie n .IP "\fR\fB$dest\fR\fB = uncompress($source) ;\fR" 5 +.el .IP "\fR\f(CB$dest\fR\fB = uncompress($source) ;\fR" 5 +.IX Item "$dest = uncompress($source) ;" +Uncompresses \f(CW$source\fR. If successful it returns the uncompressed +data. Otherwise it returns \fIundef\fR. +.Sp +The source buffer can either be a scalar or a scalar reference. +.PP +Please note: the two functions defined above are \fInot\fR compatible with +the Unix commands of the same name. +.PP +See IO::Deflate and IO::Inflate included with +this distribution for an alternative interface for reading/writing RFC 1950 +files/buffers. +.SH "Deflate Interface" +.IX Header "Deflate Interface" +This section defines an interface that allows in-memory compression using +the \fIdeflate\fR interface provided by zlib. +.PP +Here is a definition of the interface available: +.ie n .SS "\fB($d, \fP\fB$status\fP\fB) = deflateInit( [OPT] )\fP" +.el .SS "\fB($d, \fP\f(CB$status\fP\fB) = deflateInit( [OPT] )\fP" +.IX Subsection "($d, $status) = deflateInit( [OPT] )" +Initialises a deflation stream. +.PP +It combines the features of the \fIzlib\fR functions \f(CW\*(C`deflateInit\*(C'\fR, +\&\f(CW\*(C`deflateInit2\*(C'\fR and \f(CW\*(C`deflateSetDictionary\*(C'\fR. +.PP +If successful, it will return the initialised deflation stream, \f(CW$d\fR +and \f(CW$status\fR of \f(CW\*(C`Z_OK\*(C'\fR in a list context. In scalar context it +returns the deflation stream, \f(CW$d\fR, only. +.PP +If not successful, the returned deflation stream (\f(CW$d\fR) will be +\&\fIundef\fR and \f(CW$status\fR will hold the exact \fIzlib\fR error code. +.PP +The function optionally takes a number of named options specified as +\&\f(CW\*(C`\-Name=>value\*(C'\fR pairs. This allows individual options to be +tailored without having to specify them all in the parameter list. +.PP +For backward compatibility, it is also possible to pass the parameters +as a reference to a hash containing the name=>value pairs. +.PP +The function takes one optional parameter, a reference to a hash. The +contents of the hash allow the deflation interface to be tailored. +.PP +Here is a list of the valid options: +.IP \fB\-Level\fR 5 +.IX Item "-Level" +Defines the compression level. Valid values are 0 through 9, +\&\f(CW\*(C`Z_NO_COMPRESSION\*(C'\fR, \f(CW\*(C`Z_BEST_SPEED\*(C'\fR, \f(CW\*(C`Z_BEST_COMPRESSION\*(C'\fR, and +\&\f(CW\*(C`Z_DEFAULT_COMPRESSION\*(C'\fR. +.Sp +The default is Z_DEFAULT_COMPRESSION. +.IP \fB\-Method\fR 5 +.IX Item "-Method" +Defines the compression method. The only valid value at present (and +the default) is Z_DEFLATED. +.IP \fB\-WindowBits\fR 5 +.IX Item "-WindowBits" +To create an RFC 1950 data stream, set \f(CW\*(C`WindowBits\*(C'\fR to a positive number. +.Sp +To create an RFC 1951 data stream, set \f(CW\*(C`WindowBits\*(C'\fR to \f(CW\*(C`\-MAX_WBITS\*(C'\fR. +.Sp +For a full definition of the meaning and valid values for \f(CW\*(C`WindowBits\*(C'\fR refer +to the \fIzlib\fR documentation for \fIdeflateInit2\fR. +.Sp +Defaults to MAX_WBITS. +.IP \fB\-MemLevel\fR 5 +.IX Item "-MemLevel" +For a definition of the meaning and valid values for \f(CW\*(C`MemLevel\*(C'\fR +refer to the \fIzlib\fR documentation for \fIdeflateInit2\fR. +.Sp +Defaults to MAX_MEM_LEVEL. +.IP \fB\-Strategy\fR 5 +.IX Item "-Strategy" +Defines the strategy used to tune the compression. The valid values are +\&\f(CW\*(C`Z_DEFAULT_STRATEGY\*(C'\fR, \f(CW\*(C`Z_FILTERED\*(C'\fR and \f(CW\*(C`Z_HUFFMAN_ONLY\*(C'\fR. +.Sp +The default is Z_DEFAULT_STRATEGY. +.IP \fB\-Dictionary\fR 5 +.IX Item "-Dictionary" +When a dictionary is specified \fICompress::Zlib\fR will automatically +call \f(CW\*(C`deflateSetDictionary\*(C'\fR directly after calling \f(CW\*(C`deflateInit\*(C'\fR. The +Adler32 value for the dictionary can be obtained by calling the method +\&\f(CW\*(C`$d\->dict_adler()\*(C'\fR. +.Sp +The default is no dictionary. +.IP \fB\-Bufsize\fR 5 +.IX Item "-Bufsize" +Sets the initial size for the deflation buffer. If the buffer has to be +reallocated to increase the size, it will grow in increments of +\&\f(CW\*(C`Bufsize\*(C'\fR. +.Sp +The default is 4096. +.PP +Here is an example of using the \f(CW\*(C`deflateInit\*(C'\fR optional parameter list +to override the default buffer size and compression level. All other +options will take their default values. +.PP +.Vb 2 +\& deflateInit( \-Bufsize => 300, +\& \-Level => Z_BEST_SPEED ) ; +.Ve +.ie n .SS "\fB($out, \fP\fB$status\fP\fB) = \fP\fB$d\fP\fB\->deflate($buffer)\fP" +.el .SS "\fB($out, \fP\f(CB$status\fP\fB) = \fP\f(CB$d\fP\fB\->deflate($buffer)\fP" +.IX Subsection "($out, $status) = $d->deflate($buffer)" +Deflates the contents of \f(CW$buffer\fR. The buffer can either be a scalar +or a scalar reference. When finished, \f(CW$buffer\fR will be +completely processed (assuming there were no errors). If the deflation +was successful it returns the deflated output, \f(CW$out\fR, and a status +value, \f(CW$status\fR, of \f(CW\*(C`Z_OK\*(C'\fR. +.PP +On error, \f(CW$out\fR will be \fIundef\fR and \f(CW$status\fR will contain the +\&\fIzlib\fR error code. +.PP +In a scalar context \f(CW\*(C`deflate\*(C'\fR will return \f(CW$out\fR only. +.PP +As with the \fIdeflate\fR function in \fIzlib\fR, it is not necessarily the +case that any output will be produced by this method. So don't rely on +the fact that \f(CW$out\fR is empty for an error test. +.ie n .SS "\fB($out, \fP\fB$status\fP\fB) = \fP\fB$d\fP\fB\->flush()\fP =head2 \fB($out, \fP\fB$status\fP\fB) = \fP\fB$d\fP\fB\->flush($flush_type)\fP" +.el .SS "\fB($out, \fP\f(CB$status\fP\fB) = \fP\f(CB$d\fP\fB\->flush()\fP =head2 \fB($out, \fP\f(CB$status\fP\fB) = \fP\f(CB$d\fP\fB\->flush($flush_type)\fP" +.IX Subsection "($out, $status) = $d->flush() =head2 ($out, $status) = $d->flush($flush_type)" +Typically used to finish the deflation. Any pending output will be +returned via \f(CW$out\fR. +\&\f(CW$status\fR will have a value \f(CW\*(C`Z_OK\*(C'\fR if successful. +.PP +In a scalar context \f(CW\*(C`flush\*(C'\fR will return \f(CW$out\fR only. +.PP +Note that flushing can seriously degrade the compression ratio, so it +should only be used to terminate a decompression (using \f(CW\*(C`Z_FINISH\*(C'\fR) or +when you want to create a \fIfull flush point\fR (using \f(CW\*(C`Z_FULL_FLUSH\*(C'\fR). +.PP +By default the \f(CW\*(C`flush_type\*(C'\fR used is \f(CW\*(C`Z_FINISH\*(C'\fR. Other valid values +for \f(CW\*(C`flush_type\*(C'\fR are \f(CW\*(C`Z_NO_FLUSH\*(C'\fR, \f(CW\*(C`Z_PARTIAL_FLUSH\*(C'\fR, \f(CW\*(C`Z_SYNC_FLUSH\*(C'\fR +and \f(CW\*(C`Z_FULL_FLUSH\*(C'\fR. It is strongly recommended that you only set the +\&\f(CW\*(C`flush_type\*(C'\fR parameter if you fully understand the implications of +what it does. See the \f(CW\*(C`zlib\*(C'\fR documentation for details. +.ie n .SS "\fB\fP\fB$status\fP\fB = \fP\fB$d\fP\fB\->deflateParams([OPT])\fP" +.el .SS "\fB\fP\f(CB$status\fP\fB = \fP\f(CB$d\fP\fB\->deflateParams([OPT])\fP" +.IX Subsection "$status = $d->deflateParams([OPT])" +Change settings for the deflate stream \f(CW$d\fR. +.PP +The list of the valid options is shown below. Options not specified +will remain unchanged. +.IP \fB\-Level\fR 5 +.IX Item "-Level" +Defines the compression level. Valid values are 0 through 9, +\&\f(CW\*(C`Z_NO_COMPRESSION\*(C'\fR, \f(CW\*(C`Z_BEST_SPEED\*(C'\fR, \f(CW\*(C`Z_BEST_COMPRESSION\*(C'\fR, and +\&\f(CW\*(C`Z_DEFAULT_COMPRESSION\*(C'\fR. +.IP \fB\-Strategy\fR 5 +.IX Item "-Strategy" +Defines the strategy used to tune the compression. The valid values are +\&\f(CW\*(C`Z_DEFAULT_STRATEGY\*(C'\fR, \f(CW\*(C`Z_FILTERED\*(C'\fR and \f(CW\*(C`Z_HUFFMAN_ONLY\*(C'\fR. +.ie n .SS \fB\fP\fB$d\fP\fB\->dict_adler()\fP +.el .SS \fB\fP\f(CB$d\fP\fB\->dict_adler()\fP +.IX Subsection "$d->dict_adler()" +Returns the adler32 value for the dictionary. +.ie n .SS \fB\fP\fB$d\fP\fB\->msg()\fP +.el .SS \fB\fP\f(CB$d\fP\fB\->msg()\fP +.IX Subsection "$d->msg()" +Returns the last error message generated by zlib. +.ie n .SS \fB\fP\fB$d\fP\fB\->total_in()\fP +.el .SS \fB\fP\f(CB$d\fP\fB\->total_in()\fP +.IX Subsection "$d->total_in()" +Returns the total number of bytes uncompressed bytes input to deflate. +.ie n .SS \fB\fP\fB$d\fP\fB\->total_out()\fP +.el .SS \fB\fP\f(CB$d\fP\fB\->total_out()\fP +.IX Subsection "$d->total_out()" +Returns the total number of compressed bytes output from deflate. +.SS Example +.IX Subsection "Example" +Here is a trivial example of using \f(CW\*(C`deflate\*(C'\fR. It simply reads standard +input, deflates it and writes it to standard output. +.PP +.Vb 2 +\& use strict ; +\& use warnings ; +\& +\& use Compress::Zlib ; +\& +\& binmode STDIN; +\& binmode STDOUT; +\& my $x = deflateInit() +\& or die "Cannot create a deflation stream\en" ; +\& +\& my ($output, $status) ; +\& while (<>) +\& { +\& ($output, $status) = $x\->deflate($_) ; +\& +\& $status == Z_OK +\& or die "deflation failed\en" ; +\& +\& print $output ; +\& } +\& +\& ($output, $status) = $x\->flush() ; +\& +\& $status == Z_OK +\& or die "deflation failed\en" ; +\& +\& print $output ; +.Ve +.SH "Inflate Interface" +.IX Header "Inflate Interface" +This section defines the interface available that allows in-memory +uncompression using the \fIdeflate\fR interface provided by zlib. +.PP +Here is a definition of the interface: +.ie n .SS "\fB($i, \fP\fB$status\fP\fB) = inflateInit()\fP" +.el .SS "\fB($i, \fP\f(CB$status\fP\fB) = inflateInit()\fP" +.IX Subsection "($i, $status) = inflateInit()" +Initialises an inflation stream. +.PP +In a list context it returns the inflation stream, \f(CW$i\fR, and the +\&\fIzlib\fR status code in \f(CW$status\fR. In a scalar context it returns the +inflation stream only. +.PP +If successful, \f(CW$i\fR will hold the inflation stream and \f(CW$status\fR will +be \f(CW\*(C`Z_OK\*(C'\fR. +.PP +If not successful, \f(CW$i\fR will be \fIundef\fR and \f(CW$status\fR will hold the +\&\fIzlib\fR error code. +.PP +The function optionally takes a number of named options specified as +\&\f(CW\*(C`\-Name=>value\*(C'\fR pairs. This allows individual options to be +tailored without having to specify them all in the parameter list. +.PP +For backward compatibility, it is also possible to pass the parameters +as a reference to a hash containing the name=>value pairs. +.PP +The function takes one optional parameter, a reference to a hash. The +contents of the hash allow the deflation interface to be tailored. +.PP +Here is a list of the valid options: +.IP \fB\-WindowBits\fR 5 +.IX Item "-WindowBits" +To uncompress an RFC 1950 data stream, set \f(CW\*(C`WindowBits\*(C'\fR to a positive number. +.Sp +To uncompress an RFC 1951 data stream, set \f(CW\*(C`WindowBits\*(C'\fR to \f(CW\*(C`\-MAX_WBITS\*(C'\fR. +.Sp +For a full definition of the meaning and valid values for \f(CW\*(C`WindowBits\*(C'\fR refer +to the \fIzlib\fR documentation for \fIinflateInit2\fR. +.Sp +Defaults to MAX_WBITS. +.IP \fB\-Bufsize\fR 5 +.IX Item "-Bufsize" +Sets the initial size for the inflation buffer. If the buffer has to be +reallocated to increase the size, it will grow in increments of +\&\f(CW\*(C`Bufsize\*(C'\fR. +.Sp +Default is 4096. +.IP \fB\-Dictionary\fR 5 +.IX Item "-Dictionary" +The default is no dictionary. +.PP +Here is an example of using the \f(CW\*(C`inflateInit\*(C'\fR optional parameter to +override the default buffer size. +.PP +.Vb 1 +\& inflateInit( \-Bufsize => 300 ) ; +.Ve +.ie n .SS "\fB($out, \fP\fB$status\fP\fB) = \fP\fB$i\fP\fB\->inflate($buffer)\fP" +.el .SS "\fB($out, \fP\f(CB$status\fP\fB) = \fP\f(CB$i\fP\fB\->inflate($buffer)\fP" +.IX Subsection "($out, $status) = $i->inflate($buffer)" +Inflates the complete contents of \f(CW$buffer\fR. The buffer can either be +a scalar or a scalar reference. +.PP +Returns \f(CW\*(C`Z_OK\*(C'\fR if successful and \f(CW\*(C`Z_STREAM_END\*(C'\fR if the end of the +compressed data has been successfully reached. +If not successful, \f(CW$out\fR will be \fIundef\fR and \f(CW$status\fR will hold +the \fIzlib\fR error code. +.PP +The \f(CW$buffer\fR parameter is modified by \f(CW\*(C`inflate\*(C'\fR. On completion it +will contain what remains of the input buffer after inflation. This +means that \f(CW$buffer\fR will be an empty string when the return status is +\&\f(CW\*(C`Z_OK\*(C'\fR. When the return status is \f(CW\*(C`Z_STREAM_END\*(C'\fR the \f(CW$buffer\fR +parameter will contains what (if anything) was stored in the input +buffer after the deflated data stream. +.PP +This feature is useful when processing a file format that encapsulates +a compressed data stream (e.g. gzip, zip). +.ie n .SS "\fB\fP\fB$status\fP\fB = \fP\fB$i\fP\fB\->inflateSync($buffer)\fP" +.el .SS "\fB\fP\f(CB$status\fP\fB = \fP\f(CB$i\fP\fB\->inflateSync($buffer)\fP" +.IX Subsection "$status = $i->inflateSync($buffer)" +Scans \f(CW$buffer\fR until it reaches either a \fIfull flush point\fR or the +end of the buffer. +.PP +If a \fIfull flush point\fR is found, \f(CW\*(C`Z_OK\*(C'\fR is returned and \f(CW$buffer\fR +will be have all data up to the flush point removed. This can then be +passed to the \f(CW\*(C`deflate\*(C'\fR method. +.PP +Any other return code means that a flush point was not found. If more +data is available, \f(CW\*(C`inflateSync\*(C'\fR can be called repeatedly with more +compressed data until the flush point is found. +.ie n .SS \fB\fP\fB$i\fP\fB\->dict_adler()\fP +.el .SS \fB\fP\f(CB$i\fP\fB\->dict_adler()\fP +.IX Subsection "$i->dict_adler()" +Returns the adler32 value for the dictionary. +.ie n .SS \fB\fP\fB$i\fP\fB\->msg()\fP +.el .SS \fB\fP\f(CB$i\fP\fB\->msg()\fP +.IX Subsection "$i->msg()" +Returns the last error message generated by zlib. +.ie n .SS \fB\fP\fB$i\fP\fB\->total_in()\fP +.el .SS \fB\fP\f(CB$i\fP\fB\->total_in()\fP +.IX Subsection "$i->total_in()" +Returns the total number of bytes compressed bytes input to inflate. +.ie n .SS \fB\fP\fB$i\fP\fB\->total_out()\fP +.el .SS \fB\fP\f(CB$i\fP\fB\->total_out()\fP +.IX Subsection "$i->total_out()" +Returns the total number of uncompressed bytes output from inflate. +.SS Example +.IX Subsection "Example" +Here is an example of using \f(CW\*(C`inflate\*(C'\fR. +.PP +.Vb 2 +\& use strict ; +\& use warnings ; +\& +\& use Compress::Zlib ; +\& +\& my $x = inflateInit() +\& or die "Cannot create a inflation stream\en" ; +\& +\& my $input = \*(Aq\*(Aq ; +\& binmode STDIN; +\& binmode STDOUT; +\& +\& my ($output, $status) ; +\& while (read(STDIN, $input, 4096)) +\& { +\& ($output, $status) = $x\->inflate(\e$input) ; +\& +\& print $output +\& if $status == Z_OK or $status == Z_STREAM_END ; +\& +\& last if $status != Z_OK ; +\& } +\& +\& die "inflation failed\en" +\& unless $status == Z_STREAM_END ; +.Ve +.SH "CHECKSUM FUNCTIONS" +.IX Header "CHECKSUM FUNCTIONS" +Two functions are provided by \fIzlib\fR to calculate checksums. For the +Perl interface, the order of the two parameters in both functions has +been reversed. This allows both running checksums and one off +calculations to be done. +.PP +.Vb 2 +\& $crc = adler32($buffer [,$crc]) ; +\& $crc = crc32($buffer [,$crc]) ; +.Ve +.PP +The buffer parameters can either be a scalar or a scalar reference. +.PP +If the \f(CW$crc\fR parameters is \f(CW\*(C`undef\*(C'\fR, the crc value will be reset. +.PP +If you have built this module with zlib 1.2.3 or better, two more +CRC-related functions are available. +.PP +.Vb 2 +\& $crc = crc32_combine($crc1, $crc2, $len2); +\& $adler = adler32_combine($adler1, $adler2, $len2); +.Ve +.PP +These functions allow checksums to be merged. +Refer to the \fIzlib\fR documentation for more details. +.SH Misc +.IX Header "Misc" +.ie n .SS "my $version = \fBCompress::Zlib::zlib_version()\fP;" +.el .SS "my \f(CW$version\fP = \fBCompress::Zlib::zlib_version()\fP;" +.IX Subsection "my $version = Compress::Zlib::zlib_version();" +Returns the version of the zlib library. +.SH CONSTANTS +.IX Header "CONSTANTS" +All the \fIzlib\fR constants are automatically imported when you make use +of \fICompress::Zlib\fR. +.SH SUPPORT +.IX Header "SUPPORT" +General feedback/questions/bug reports should be sent to +<https://github.com/pmqs/IO\-Compress/issues> (preferred) or +<https://rt.cpan.org/Public/Dist/Display.html?Name=IO\-Compress>. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +IO::Compress::Gzip, IO::Uncompress::Gunzip, IO::Compress::Deflate, IO::Uncompress::Inflate, IO::Compress::RawDeflate, IO::Uncompress::RawInflate, IO::Compress::Bzip2, IO::Uncompress::Bunzip2, IO::Compress::Lzma, IO::Uncompress::UnLzma, IO::Compress::Xz, IO::Uncompress::UnXz, IO::Compress::Lzip, IO::Uncompress::UnLzip, IO::Compress::Lzop, IO::Uncompress::UnLzop, IO::Compress::Lzf, IO::Uncompress::UnLzf, IO::Compress::Zstd, IO::Uncompress::UnZstd, IO::Uncompress::AnyInflate, IO::Uncompress::AnyUncompress +.PP +IO::Compress::FAQ +.PP +File::GlobMapper, Archive::Zip, +Archive::Tar, +IO::Zlib +.PP +For RFC 1950, 1951 and 1952 see +<https://datatracker.ietf.org/doc/html/rfc1950>, +<https://datatracker.ietf.org/doc/html/rfc1951> and +<https://datatracker.ietf.org/doc/html/rfc1952> +.PP +The \fIzlib\fR compression library was written by Jean-loup Gailly +\&\f(CW\*(C`gzip@prep.ai.mit.edu\*(C'\fR and Mark Adler \f(CW\*(C`madler@alumni.caltech.edu\*(C'\fR. +.PP +The primary site for the \fIzlib\fR compression library is +<http://www.zlib.org>. +.PP +The primary site for the \fIzlib-ng\fR compression library is +<https://github.com/zlib\-ng/zlib\-ng>. +.PP +The primary site for gzip is <http://www.gzip.org>. +.SH AUTHOR +.IX Header "AUTHOR" +This module was written by Paul Marquess, \f(CW\*(C`pmqs@cpan.org\*(C'\fR. +.SH "MODIFICATION HISTORY" +.IX Header "MODIFICATION HISTORY" +See the Changes file. +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (c) 1995\-2023 Paul Marquess. All rights reserved. +.PP +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. |