DragonFly On-Line Manual Pages

Search: Section:  


ZLIB(3)               DragonFly Library Functions Manual               ZLIB(3)

NAME

zlib - compression/decompression library

SYNOPSIS

[see zlib.h for full description]

DESCRIPTION

The zlib library is a general purpose data compression library. The code is thread safe, assuming that the standard library functions used are thread safe, such as memory allocation routines. It provides in- memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) but other algorithms may be added later with the same stream interface. Compression can be done in a single step if the buffers are large enough or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. The library also supports reading and writing files in gzip(1) (.gz) format with an interface similar to that of stdio. The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash even in the case of corrupted input. All functions of the compression library are documented in the file zlib.h. The distribution source includes examples of use of the library in the files test/example.c and test/minigzip.c, as well as other examples in the examples/ directory. Changes to this version are documented in the file ChangeLog that accompanies the source. zlib is built in to many languages and operating systems, including but not limited to Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go. An experimental package to read and write files in the .zip format, written on top of zlib by Gilles Vollant (info@winimage.com), is available at: http://www.winimage.com/zLibDll/minizip.html and also in the contrib/minizip directory of the main zlib source distribution.

SEE ALSO

The zlib web site can be found at: http://zlib.net/ The data format used by the zlib library is described by RFC (Request for Comments) 1950 to 1952 in the files: http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format) http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format) http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format) Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at: http://marknelson.us/1997/01/01/zlib-engine/

REPORTING PROBLEMS

Before reporting a problem, please check the zlib web site to verify that you have the latest version of zlib; otherwise, obtain the latest version and see if the problem still exists. Please read the zlib FAQ at: http://zlib.net/zlib_faq.html before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).

AUTHORS AND LICENSE

Version 1.2.11 Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu The deflate format used by zlib was defined by Phil Katz. The deflate and zlib specifications were written by L. Peter Deutsch. Thanks to all the people who reported problems and suggested various improvements in zlib; who are too numerous to cite here. UNIX manual page by R. P. C. Rodgers, U.S. National Library of Medicine (rodgers@nlm.nih.gov). 15 Jan 2017 ZLIB(3) zlib(n) Tcl Built-In Commands zlib(n) ______________________________________________________________________________

NAME

zlib - compression and decompression operations

SYNOPSIS

zlib subcommand arg ... ______________________________________________________________________________

DESCRIPTION

The zlib command provides access to the compression and check-summing facilities of the Zlib library by Jean-loup Gailly and Mark Adler. It has the following subcommands. COMPRESSION SUBCOMMANDS zlib compress string ?level? Returns the zlib-format compressed binary data of the binary string in string. If present, level gives the compression level to use (from 0, which is uncompressed, to 9, maximally compressed). zlib decompress string ?bufferSize? Returns the uncompressed version of the raw compressed binary data in string. If present, bufferSize is a hint as to what size of buffer is to be used to receive the data. zlib deflate string ?level? Returns the raw compressed binary data of the binary string in string. If present, level gives the compression level to use (from 0, which is uncompressed, to 9, maximally compressed). zlib gunzip string ?-headerVar varName? Return the uncompressed contents of binary string string, which must have been in gzip format. If -headerVar is given, store a dictionary describing the contents of the gzip header in the variable called varName. The keys of the dictionary that may be present are: comment The comment field from the header, if present. crc A boolean value describing whether a CRC of the header is computed. filename The filename field from the header, if present. os The operating system type code field from the header (if not the QW unknown value). See RFC 1952 for the meaning of these codes. size The size of the uncompressed data. time The time field from the header if non-zero, expected to be time that the file named by the filename field was modified. Suitable for use with clock format. type The type of the uncompressed data (binary or text) if known. zlib gzip string ?-level level? ?-header dict? Return the compressed contents of binary string string in gzip format. If -level is given, level gives the compression level to use (from 0, which is uncompressed, to 9, maximally compressed). If -header is given, dict is a dictionary containing values used for the gzip header. The following keys may be defined: comment Add the given comment to the header of the gzip-format data. crc A boolean saying whether to compute a CRC of the header. Note that if the data is to be interchanged with the gzip program, a header CRC should not be computed. filename The name of the file that the data to be compressed came from. os The operating system type code, which should be one of the values described in RFC 1952. time The time that the file named in the filename key was last modified. This will be in the same as is returned by clock seconds or file mtime. type The type of the data being compressed, being binary or text. zlib inflate string ?bufferSize? Returns the uncompressed version of the raw compressed binary data in string. If present, bufferSize is a hint as to what size of buffer is to be used to receive the data. CHANNEL SUBCOMMAND zlib push mode channel ?options ...? Pushes a compressing or decompressing transformation onto the channel channel. The transformation can be removed again with chan pop. The mode argument determines what type of transformation is pushed; the following are supported: compress The transformation will be a compressing transformation that produces zlib-format data on channel, which must be writable. decompress The transformation will be a decompressing transformation that reads zlib-format data from channel, which must be readable. deflate The transformation will be a compressing transformation that produces raw compressed data on channel, which must be writable. gunzip The transformation will be a decompressing transformation that reads gzip-format data from channel, which must be readable. gzip The transformation will be a compressing transformation that produces gzip-format data on channel, which must be writable. inflate The transformation will be a decompressing transformation that reads raw compressed data from channel, which must be readable. The following options may be set when creating a transformation via the "options ..." to the zlib push command: -dictionary binData Sets the compression dictionary to use when working with | compressing or decompressing the data to be binData. Not | valid for transformations that work with gzip-format | data. The dictionary should consist of strings (byte | sequences) that are likely to be encountered later in the | data to be compressed, with the most commonly used | strings preferably put towards the end of the dictionary. | Tcl provides no mechanism for choosing a good such | dictionary for a particular data sequence. -header dictionary Passes a description of the gzip header to create, in the same format that zlib gzip understands. -level compressionLevel How hard to compress the data. Must be an integer from 0 (uncompressed) to 9 (maximally compressed). -limit readaheadLimit The maximum number of bytes ahead to read when decompressing. This option has become irrelevant. It was originally introduced to prevent Tcl from reading beyond the end of a compressed stream in multi-stream channels to ensure that the data after was left alone for further reading, at the cost of speed. Tcl now automatically returns any bytes it has read beyond the end of a compressed stream back to the channel, making them appear as unread to further readers. Both compressing and decompressing channel transformations add extra configuration options that may be accessed through chan configure. The options are: -checksum checksum This read-only option gets the current checksum for the uncompressed data that the compression engine has seen so far. It is valid for both compressing and decompressing transforms, but not for the raw inflate and deflate formats. The compression algorithm depends on what format is being produced or consumed. -dictionary binData This read-write options gets or sets the initial | compression dictionary to use when working with | compressing or decompressing the data to be binData. It | is not valid for transformations that work with gzip- | format data, and should not normally be set on | compressing transformations other than at the point where | the transformation is stacked. Note that this cannot be | used to get the current active compression dictionary | mid-stream, as that information is not exposed by the | underlying library. -flush type This write-only operation flushes the current state of the compressor to the underlying channel. It is only valid for compressing transformations. The type must be either sync or full for a normal flush or an expensive flush respectively. Flushing degrades the compression ratio, but makes it easier for a decompressor to recover more of the file in the case of data corruption. -header dictionary This read-only option, only valid for decompressing transforms that are processing gzip-format data, returns the dictionary describing the header read off the data stream. -limit readaheadLimit This read-write option is used by decompressing channels to control the maximum number of bytes ahead to read from the underlying data source. See above for more information. STREAMING SUBCOMMAND zlib stream mode ?options? Creates a streaming compression or decompression command based on the mode, and return the name of the command. For a description of how that command works, see STREAMING INSTANCE COMMAND below. The following modes and options are supported: zlib stream compress ?-dictionary bindata? ?-level level? The stream will be a compressing stream that produces zlib-format output, using compression level level (if specified) which will be an integer from 0 to 9, and the | compression dictionary bindata (if specified). zlib stream decompress ?-dictionary bindata? The stream will be a decompressing stream that takes zlib-format input and produces uncompressed output. If | bindata is supplied, it is a compression dictionary to | use if required. zlib stream deflate ?-dictionary bindata? ?-level level? The stream will be a compressing stream that produces raw output, using compression level level (if specified) which will be an integer from 0 to 9, and the compression | dictionary bindata (if specified). Note that the raw | compressed data includes no metadata about what | compression dictionary was used, if any; that is a | feature of the zlib-format data. zlib stream gunzip The stream will be a decompressing stream that takes gzip-format input and produces uncompressed output. zlib stream gzip ?-header header? ?-level level? The stream will be a compressing stream that produces gzip-format output, using compression level level (if specified) which will be an integer from 0 to 9, and the header descriptor dictionary header (if specified; for keys see zlib gzip). zlib stream inflate ?-dictionary bindata? The stream will be a decompressing stream that takes raw compressed input and produces uncompressed output. If | bindata is supplied, it is a compression dictionary to | use. Note that there are no checks in place to determine | whether the compression dictionary is correct. CHECKSUMMING SUBCOMMANDS zlib adler32 string ?initValue? Compute a checksum of binary string string using the Adler-32 algorithm. If given, initValue is used to initialize the checksum engine. zlib crc32 string ?initValue? Compute a checksum of binary string string using the CRC-32 algorithm. If given, initValue is used to initialize the checksum engine.

STREAMING INSTANCE COMMAND

Streaming compression instance commands are produced by the zlib stream command. They are used by calling their put subcommand one or more times to load data in, and their get subcommand one or more times to extract the transformed data. The full set of subcommands supported by a streaming instance command, stream, is as follows: stream add ?option...? data A short-cut for "stream put ?option...? data" followed by "stream get". stream checksum Returns the checksum of the uncompressed data seen so far by this stream. stream close Deletes this stream and frees up all resources associated with it. stream eof Returns a boolean indicating whether the end of the stream (as determined by the compressed data itself) has been reached. Not all formats support detection of the end of the stream. stream finalize A short-cut for "stream put -finalize {}". stream flush A short-cut for "stream put -flush {}". stream fullflush A short-cut for "stream put -fullflush {}". stream get ?count? Return up to count bytes from stream's internal buffers with the transformation applied. If count is omitted, the entire contents of the buffers are returned. stream header Return the gzip header description dictionary extracted from the stream. Only supported for streams created with their mode parameter set to gunzip. stream put ?option...? data Append the contents of the binary string data to stream's internal buffers while applying the transformation. The following options are supported (or an unambiguous prefix of them), which are used to modify the way in which the transformation is applied: -dictionary binData Sets the compression dictionary to use when working with | compressing or decompressing the data to be binData. -finalize Mark the stream as finished, ensuring that all bytes have been wholly compressed or decompressed. For gzip streams, this also ensures that the footer is written to the stream. The stream will need to be reset before having more data written to it after this, though data can still be read out of the stream with the get subcommand. This option is mutually exclusive with the -flush and -fullflush options. -flush Ensure that a decompressor consuming the bytes that the current (compressing) stream is producing will be able to produce all the bytes that have been compressed so far, at some performance penalty. This option is mutually exclusive with the -finalize and -fullflush options. -fullflush Ensure that not only can a decompressor handle all the bytes produced so far (as with -flush above) but also that it can restart from this point if it detects that the stream is partially corrupt. This incurs a substantial performance penalty. This option is mutually exclusive with the -finalize and -flush options. stream reset Puts any stream, including those that have been finalized or that have reached eof, back into a state where it can process more data. Throws away all internally buffered data.

EXAMPLES

To compress a Tcl string, it should be first converted to a particular charset encoding since the zlib command always operates on binary strings. set binData [encoding convertto utf-8 $string] set compData [zlib compress $binData] When converting back, it is also important to reverse the charset encoding: set binData [zlib decompress $compData] set string [encoding convertfrom utf-8 $binData] The compression operation from above can also be done with streams, which is especially helpful when you want to accumulate the data by stages: set strm [zlib stream compress] $strm put [encoding convertto utf-8 $string] # ... $strm finalize set compData [$strm get] $strm close

SEE ALSO

binary(n), chan(n), encoding(n), Tcl_ZlibDeflate(3), RFC1950 - RFC1952

KEYWORDS

compress, decompress, deflate, gzip, inflate, zlib Tcl 8.6 zlib(n)

Search: Section: