manpagez: man pages & more
man Tcl_ZlibDeflate(3)
Home | html | info | man
TclZlib(3)                  Tcl Library Procedures                  TclZlib(3)

______________________________________________________________________________


NAME

       Tcl_ZlibAdler32, Tcl_ZlibCRC32, Tcl_ZlibDeflate, Tcl_ZlibInflate,
       Tcl_ZlibStreamChecksum, Tcl_ZlibStreamClose, Tcl_ZlibStreamEof,
       Tcl_ZlibStreamGet, Tcl_ZlibStreamGetCommandName, Tcl_ZlibStreamInit,
       Tcl_ZlibStreamPut - compression and decompression functions


SYNOPSIS

       #include <tcl.h>

       int
       Tcl_ZlibDeflate(interp, format, dataObj, level, dictObj)

       int
       Tcl_ZlibInflate(interp, format, dataObj, bufferSize, dictObj)

       unsigned int
       Tcl_ZlibCRC32(initValue, bytes, length)

       unsigned int
       Tcl_ZlibAdler32(initValue, bytes, length)

       int
       Tcl_ZlibStreamInit(interp, mode, format, level, dictObj, zshandlePtr)

       Tcl_Obj *
       Tcl_ZlibStreamGetCommandName(zshandle)

       int
       Tcl_ZlibStreamEof(zshandle)

       int
       Tcl_ZlibStreamClose(zshandle)

       int
       Tcl_ZlibStreamReset(zshandle)

       int
       Tcl_ZlibStreamChecksum(zshandle)

       int
       Tcl_ZlibStreamPut(zshandle, dataObj, flush)

       int
       Tcl_ZlibStreamGet(zshandle, dataObj, count)

       Tcl_ZlibStreamSetCompressionDictionary(zshandle, compDict)


ARGUMENTS

       Tcl_Interp *interp (in)               The interpreter to store
                                             resulting compressed or
                                             uncompressed data in. Also where
                                             any error messages are written.
                                             For Tcl_ZlibStreamInit, this can
                                             be NULL to create a stream that
                                             is not bound to a command.

       int format (in)                       What format of compressed data to
                                             work with. Must be one of
                                             TCL_ZLIB_FORMAT_ZLIB for zlib-
                                             format data, TCL_ZLIB_FORMAT_GZIP
                                             for gzip-format data, or
                                             TCL_ZLIB_FORMAT_RAW for raw
                                             compressed data. In addition, for
                                             decompression only,
                                             TCL_ZLIB_FORMAT_AUTO may also be
                                             chosen which can automatically
                                             detect whether the compressed
                                             data was in zlib or gzip format.

       Tcl_Obj *dataObj (in/out)             A byte-array value containing the
                                             data to be compressed or
                                             decompressed, or to which the
                                             data extracted from the stream is
                                             appended when passed to
                                             Tcl_ZlibStreamGet.

       int level (in)                        What level of compression to use.
                                             Should be a number from 0 to 9 or
                                             one of the following:
                                             TCL_ZLIB_COMPRESS_NONE for no
                                             compression,
                                             TCL_ZLIB_COMPRESS_FAST for fast
                                             but inefficient compression,
                                             TCL_ZLIB_COMPRESS_BEST for slow
                                             but maximal compression, or
                                             TCL_ZLIB_COMPRESS_DEFAULT for the
                                             level recommended by the zlib
                                             library.

       Tcl_Obj *dictObj (in/out)             A dictionary that contains, or
                                             which will be updated to contain,
                                             a description of the gzip header
                                             associated with the compressed
                                             data. Only useful when the format
                                             is TCL_ZLIB_FORMAT_GZIP or
                                             TCL_ZLIB_FORMAT_AUTO. If a NULL
                                             is passed, a default header will
                                             be used on compression and the
                                             header will be ignored (apart
                                             from integrity checks) on
                                             decompression. See the section
                                             GZIP OPTIONS DICTIONARY for
                                             details about the contents of
                                             this dictionary.

       unsigned int initValue (in)           The initial value for the
                                             checksum algorithm.

       int bufferSize (in)                   A hint as to what size of buffer
                                             is to be used to receive the
                                             data.  Use 0 to use a geric guess
                                             based on the input data.

       unsigned char *bytes (in)             An array of bytes to run the
                                             checksum algorithm over, or NULL
                                             to get the recommended initial
                                             value for the checksum algorithm.

       int length (in)                       The number of bytes in the array.

       int mode (in)                         What mode to operate the stream
                                             in. Should be either
                                             TCL_ZLIB_STREAM_DEFLATE for a
                                             compressing stream or
                                             TCL_ZLIB_STREAM_INFLATE for a
                                             decompressing stream.

       Tcl_ZlibStream *zshandlePtr (out)     A pointer to a variable in which
                                             to write the abstract token for
                                             the stream upon successful
                                             creation.

       Tcl_ZlibStream zshandle (in)          The abstract token for the stream
                                             to operate on.

       int flush (in)                        Whether and how to flush the
                                             stream after writing the data to
                                             it. Must be one of:
                                             TCL_ZLIB_NO_FLUSH if no flushing
                                             is to be done, TCL_ZLIB_FLUSH if
                                             the currently compressed data
                                             must be made available for access
                                             using Tcl_ZlibStreamGet,
                                             TCL_ZLIB_FULLFLUSH if the stream
                                             must be put into a state where
                                             the decompressor can recover from
                                             on corruption, or
                                             TCL_ZLIB_FINALIZE to ensure that
                                             the stream is finished and that
                                             any trailer demanded by the
                                             format is written.

       int count (in)                        The maximum number of bytes to
                                             get from the stream, or -1 to get
                                             all remaining bytes from the
                                             stream's buffers.

       Tcl_Obj *compDict (in)                A byte array value that is the
                                             compression dictionary to use
                                             with the stream.  Note that this
                                             is not a Tcl dictionary, and it
                                             is recommended that this only
                                             ever be used with streams that
                                             were created with their format
                                             set to TCL_ZLIB_FORMAT_ZLIB
                                             because the other formats have no
                                             mechanism to indicate whether a
                                             compression dictionary was
                                             present other than to fail on
                                             decompression.
______________________________________________________________________________


DESCRIPTION

       These functions form the interface from the Tcl library to the Zlib
       library by Jean-loup Gailly and Mark Adler.

       Tcl_ZlibDeflate and Tcl_ZlibInflate respectively compress and
       decompress the data contained in the dataObj argument, according to the
       format and, for compression, level arguments. The dictionary in the
       dictObj parameter is used to convey additional header information about
       the compressed data when the compression format supports it; currently,
       the dictionary is only used when the format parameter is
       TCL_ZLIB_FORMAT_GZIP or TCL_ZLIB_FORMAT_AUTO. For details of the
       contents of the dictionary, see the GZIP OPTIONS DICTIONARY section
       below. Upon success, both functions leave the resulting compressed or
       decompressed data in a byte-array value that is the Tcl interpreter's
       result; the returned value is a standard Tcl result code.

       Tcl_ZlibAdler32 and Tcl_ZlibCRC32 compute checksums on arrays of bytes,
       returning the computed checksum. Checksums are computed incrementally,
       allowing data to be processed one block at a time, but this requires
       the caller to maintain the current checksum and pass it in as the
       initValue parameter; the initial value to use for this can be obtained
       by using NULL for the bytes parameter instead of a pointer to the array
       of bytes to compute the checksum over. Thus, typical usage in the
       single data block case is like this:

              checksum = Tcl_ZlibCRC32(Tcl_ZlibCRC32(0,NULL,0), data, length);

       Note that the Adler-32 algorithm is not a real checksum, but instead is
       a related type of hash that works best on longer data.

   ZLIB STREAMS
       Tcl_ZlibStreamInit creates a compressing or decompressing stream that
       is linked to a Tcl command, according to its arguments, and provides an
       abstract token for the stream and returns a normal Tcl result code;
       Tcl_ZlibStreamGetCommandName returns the name of that command given the
       stream token, or NULL if the stream has no command. Streams are not
       designed to be thread-safe; each stream should only ever be used from
       the thread that created it. When working with gzip streams, a
       dictionary (fields as given in the GZIP OPTIONS DICTIONARY section
       below) can be given via the dictObj parameter that on compression
       allows control over the generated headers, and on decompression allows
       discovery of the existing headers. Note that the dictionary will be
       written to on decompression once sufficient data has been read to have
       a complete header. This means that the dictionary must be an unshared
       value in that case; a blank value created with Tcl_NewObj is suggested.

       Once a stream has been constructed, Tcl_ZlibStreamPut is used to add
       data to the stream and Tcl_ZlibStreamGet is used to retrieve data from
       the stream after processing. Both return normal Tcl result codes and
       leave an error message in the result of the interpreter that the stream
       is registered with in the error case (if such a registration has been
       performed). With Tcl_ZlibStreamPut, the data buffer value passed to it
       should not be modified afterwards. With Tcl_ZlibStreamGet, the data
       buffer value passed to it will have the data bytes appended to it.
       Internally to the stream, data is kept compressed so as to minimize the
       cost of buffer space.

       Tcl_ZlibStreamChecksum returns the checksum computed over the
       uncompressed data according to the format, and Tcl_ZlibStreamEof
       returns a boolean value indicating whether the end of the uncompressed
       data has been reached.

       Tcl_ZlibStreamSetCompressionDictionary is used to control the
       compression dictionary used with the stream, a compression dictionary
       being an array of bytes (such as might be created with
       Tcl_NewByteArrayObj) that is used to initialize the compression engine
       rather than leaving it to create it on the fly from the data being
       compressed. Setting a compression dictionary allows for more efficient
       compression in the case where the start of the data is highly regular,
       but it does require both the compressor and the decompressor to agreee
       on the value to use. Compression dictionaries are only fully supported
       for zlib-format data; on compression, they must be set before any data
       is sent in with Tcl_ZlibStreamPut, and on decompression they should be
       set when Tcl_ZlibStreamGet produces an error with its -errorcode set to
       "ZLIB NEED_DICT code"; the code will be the Adler-32 checksum (see
       Tcl_ZlibAdler32) of the compression dictionary sought. (Note that this
       is only true for zlib-format streams; gzip streams ignore compression
       dictionaries as the format specification doesn't permit them, and raw
       streams just produce a data error if the compression dictionary is
       missing or incorrect.)

       If you wish to clear a stream and reuse it for a new compression or
       decompression action, Tcl_ZlibStreamReset will do this and return a
       normal Tcl result code to indicate whether it was successful; if the
       stream is registered with an interpreter, an error message will be left
       in the interpreter result when this function returns TCL_ERROR.
       Finally, Tcl_ZlibStreamClose will clean up the stream and delete the
       associated command: using Tcl_DeleteCommand on the stream's command is
       equivalent (when such a command exists).


GZIP OPTIONS DICTIONARY

       The dictObj parameter to Tcl_ZlibDeflate, Tcl_ZlibInflate and
       Tcl_ZlibStreamInit is used to pass a dictionary of options about that
       is used to describe the gzip header in the compressed data. When
       creating compressed data, the dictionary is read and when unpacking
       compressed data the dictionary is written (in which case the dictObj
       parameter must refer to an unshared dictionary value).

       The following fields in the dictionary value are understood. All other
       fields are ignored. No field is required when creating a gzip-format
       stream.

       comment
              This holds the comment field of the header, if present. If
              absent, no comment was supplied (on decompression) or will be
              created (on compression).

       crc    A boolean value describing whether a CRC of the header is
              computed. Note that the gzip program does not use or allow a CRC
              on the header.

       filename
              The name of the file that held the uncompressed data. This
              should not contain any directory separators, and should be
              sanitized before use on decompression with file tail.

       os     The operating system type code field from the header (if not the
              "unknown" value). See RFC 1952 for the meaning of these codes.
              On compression, if this is absent then the field will be set to
              the "unknown" value.

       size   The size of the uncompressed data. This is ignored on
              compression; the size of the data compressed depends on how much
              data is supplied to the compression engine.

       time   The time field from the header if non-zero, expected to be the
              time that the file named by the filename field was modified.
              Suitable for use with clock format. On creation, the right value
              to use is that from clock seconds or file mtime.

       type   The type of the uncompressed data (either binary or text) if
              known.


PORTABILITY NOTES

       These functions will fail gracefully if Tcl is not linked with the zlib
       library.


SEE ALSO

       Tcl_NewByteArrayObj(3), zlib(n)


KEYWORDS

       compress, decompress, deflate, gzip, inflate

Tcl                                   8.6                           TclZlib(3)

tcl 8.6.15 - Generated Tue Dec 3 16:44:22 CST 2024
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.