bionic (3) zlib.3erl.gz

Provided by: erlang-manpages_20.2.2+dfsg-1ubuntu2_all bug

NAME

       zlib - zlib compression interface.

DESCRIPTION

       This  module  provides  an API for the zlib library (www.zlib.net). It is used to compress and decompress
       data. The data format is described by RFC 1950, RFC 1951, and RFC 1952.

       A typical (compress) usage is as follows:

       Z = zlib:open(),
       ok = zlib:deflateInit(Z,default),

       Compress = fun(end_of_data, _Cont) -> [];
                     (Data, Cont) ->
                        [zlib:deflate(Z, Data)|Cont(Read(),Cont)]
                  end,
       Compressed = Compress(Read(),Compress),
       Last = zlib:deflate(Z, [], finish),
       ok = zlib:deflateEnd(Z),
       zlib:close(Z),
       list_to_binary([Compressed|Last])

       In all functions errors, {'EXIT',{Reason,Backtrace}}, can be thrown, where Reason describes the error.

       Typical Reasonss:

         badarg:
           Bad argument.

         not_initialized:
           The stream hasn't been initialized, eg. if inflateInit/1 wasn't called prior to a call to inflate/2.

         not_on_controlling_process:
           The stream was used by a process that doesn't control it. Use set_controlling_process/2 if  you  need
           to transfer a stream to a different process.

         data_error:
           The data contains errors.

         stream_error:
           Inconsistent stream state.

         {need_dictionary,Adler32}:
           See inflate/2.

DATA TYPES

       zstream() = term()

              A zlib stream, see open/0.

       zlevel() =
           none | default | best_compression | best_speed | 0..9

       zflush() = none | sync | full | finish

       zmemlevel() = 1..9

       zmethod() = deflated

       zstrategy() = default | filtered | huffman_only | rle

       zwindowbits() = -15..-8 | 8..47

              Normally in the range -15..-8 | 8..15.

EXPORTS

       adler32(Z, Data) -> CheckSum

              Types:

                 Z = zstream()
                 Data = iodata()
                 CheckSum = integer()

              Calculates the Adler-32 checksum for Data.

          Warning:
              This function is deprecated and will be removed in a future release. Use erlang:adler32/1 instead.

       adler32(Z, PrevAdler, Data) -> CheckSum

              Types:

                 Z = zstream()
                 PrevAdler = integer()
                 Data = iodata()
                 CheckSum = integer()

              Updates  a  running  Adler-32  checksum for Data. If Data is the empty binary or the empty iolist,
              this function returns the required initial value for the checksum.

              Example:

              Crc = lists:foldl(fun(Data,Crc0) ->
                                    zlib:adler32(Z, Crc0, Data),
                                end, zlib:adler32(Z,<< >>), Datas)

          Warning:
              This function is deprecated and will be removed in a future release. Use erlang:adler32/2 instead.

       adler32_combine(Z, Adler1, Adler2, Size2) -> Adler

              Types:

                 Z = zstream()
                 Adler = Adler1 = Adler2 = Size2 = integer()

              Combines two Adler-32 checksums into one. For two binaries or iolists, Data1 and Data2 with  sizes
              of Size1 and Size2, with Adler-32 checksums Adler1 and Adler2.

              This  function  returns  the  Adler  checksum of [Data1,Data2], requiring only Adler1, Adler2, and
              Size2.

          Warning:
              This function is deprecated and will be removed in a future release. Use  erlang:adler32_combine/3
              instead.

       close(Z) -> ok

              Types:

                 Z = zstream()

              Closes the stream referenced by Z.

       compress(Data) -> Compressed

              Types:

                 Data = iodata()
                 Compressed = binary()

              Compresses data with zlib headers and checksum.

       crc32(Z) -> CRC

              Types:

                 Z = zstream()
                 CRC = integer()

              Gets the current calculated CRC checksum.

          Warning:
              This  function  is  deprecated  and will be removed in a future release. Use erlang:crc32/1 on the
              uncompressed data instead.

       crc32(Z, Data) -> CRC

              Types:

                 Z = zstream()
                 Data = iodata()
                 CRC = integer()

              Calculates the CRC checksum for Data.

          Warning:
              This function is deprecated and will be removed in a future release. Use erlang:crc32/1 instead.

       crc32(Z, PrevCRC, Data) -> CRC

              Types:

                 Z = zstream()
                 PrevCRC = integer()
                 Data = iodata()
                 CRC = integer()

              Updates a running CRC checksum for Data. If Data is the empty binary or  the  empty  iolist,  this
              function returns the required initial value for the CRC.

              Example:

              Crc = lists:foldl(fun(Data,Crc0) ->
                                    zlib:crc32(Z, Crc0, Data),
                                end, zlib:crc32(Z,<< >>), Datas)

          Warning:
              This function is deprecated and will be removed in a future release. Use erlang:crc32/2 instead.

       crc32_combine(Z, CRC1, CRC2, Size2) -> CRC

              Types:

                 Z = zstream()
                 CRC = CRC1 = CRC2 = Size2 = integer()

              Combines  two  CRC  checksums into one. For two binaries or iolists, Data1 and Data2 with sizes of
              Size1 and Size2, with CRC checksums CRC1 and CRC2.

              This function returns the CRC checksum of [Data1,Data2], requiring only CRC1, CRC2, and Size2.

          Warning:
              This function is deprecated and will be removed in a future  release.  Use  erlang:crc32_combine/3
              instead.

       deflate(Z, Data) -> Compressed

              Types:

                 Z = zstream()
                 Data = iodata()
                 Compressed = iolist()

              Same as deflate(Z, Data, none).

       deflate(Z, Data, Flush) -> Compressed

              Types:

                 Z = zstream()
                 Data = iodata()
                 Flush = zflush()
                 Compressed = iolist()

              Compresses  as  much  data  as  possible,  and  stops  when the input buffer becomes empty. It can
              introduce some output latency (reading input without producing any output) except when  forced  to
              flush.

              If  Flush  is  set  to  sync, all pending output is flushed to the output buffer and the output is
              aligned on a byte boundary, so that the decompressor can get all  input  data  available  so  far.
              Flushing  can  degrade  compression  for  some  compression  algorithms;  thus,  use  it only when
              necessary.

              If Flush is set to full, all output is flushed as with sync, and the compression state is reset so
              that  decompression can restart from this point if previous compressed data has been damaged or if
              random access is desired. Using full too often can seriously degrade the compression.

              If Flush is set to finish, pending input is processed, pending output is  flushed,  and  deflate/3
              returns. Afterwards the only possible operations on the stream are deflateReset/1 or deflateEnd/1.

              Flush  can  be set to finish immediately after deflateInit if all compression is to be done in one
              step.

              Example:

              zlib:deflateInit(Z),
              B1 = zlib:deflate(Z,Data),
              B2 = zlib:deflate(Z,<< >>,finish),
              zlib:deflateEnd(Z),
              list_to_binary([B1,B2])

       deflateEnd(Z) -> ok

              Types:

                 Z = zstream()

              Ends the deflate session and cleans all data used. Notice that this function throws  a  data_error
              exception if the last call to deflate/3 was not called with Flush set to finish.

       deflateInit(Z) -> ok

              Types:

                 Z = zstream()

              Same as zlib:deflateInit(Z, default).

       deflateInit(Z, Level) -> ok

              Types:

                 Z = zstream()
                 Level = zlevel()

              Initializes a zlib stream for compression.

              Level decides the compression level to be used:

                * 0 (none), gives no compression

                * 1 (best_speed) gives best speed

                * 9 (best_compression) gives best compression

       deflateInit(Z, Level, Method, WindowBits, MemLevel, Strategy) ->
                      ok

              Types:

                 Z = zstream()
                 Level = zlevel()
                 Method = zmethod()
                 WindowBits = zwindowbits()
                 MemLevel = zmemlevel()
                 Strategy = zstrategy()

              Initiates a zlib stream for compression.

                Level:
                  Compression level to use:

                  * 0 (none), gives no compression

                  * 1 (best_speed) gives best speed

                  * 9 (best_compression) gives best compression

                Method:
                  Compression method to use, currently the only supported method is deflated.

                WindowBits:
                  The base two logarithm of the window size (the size of the history buffer). It is to be in the
                  range 8 through 15. Larger values result in better compression at the expense of memory usage.
                  Defaults  to  15  if  deflateInit/2  is  used. A negative WindowBits value suppresses the zlib
                  header (and checksum) from the stream. Notice that the zlib source mentions  this  only  as  a
                  undocumented feature.

            Warning:
                Due  to  a  known  bug in the underlying zlib library, WindowBits values 8 and -8 do not work as
                expected. In zlib versions before 1.2.9 values 8 and -8 are automatically changed to 9  and  -9.
                From  zlib  version  1.2.9  value  -8 is rejected causing zlib:deflateInit/6 to fail (8 is still
                changed to 9). It also seem possible that future versions of zlib may fix  this  bug  and  start
                accepting 8 and -8 as is.

                Conclusion: Avoid values 8 and -8 unless you know your zlib version supports them.

                MemLevel:
                  Specifies  how  much  memory is to be allocated for the internal compression state: MemLevel=1
                  uses minimum memory but is slow and reduces compression ratio; MemLevel=9 uses maximum  memory
                  for optimal speed. Defaults to 8.

                Strategy:
                  Tunes the compression algorithm. Use the following values:

                  * default for normal data

                  * filtered for data produced by a filter (or predictor)

                  * huffman_only to force Huffman encoding only (no string match)

                  * rle to limit match distances to one (run-length encoding)

                  Filtered  data  consists  mostly  of small values with a somewhat random distribution. In this
                  case, the compression algorithm is tuned to compress them better. The effect of filtered is to
                  force  more  Huffman  coding  and  less  string  matching; it is somewhat intermediate between
                  default and huffman_only. rle is designed to be almost as  fast  as  huffman_only,  but  gives
                  better compression for PNG image data.

                  Strategy  affects only the compression ratio, but not the correctness of the compressed output
                  even if it is not set appropriately.

       deflateParams(Z, Level, Strategy) -> ok

              Types:

                 Z = zstream()
                 Level = zlevel()
                 Strategy = zstrategy()

              Dynamically updates the compression level and compression strategy. The  interpretation  of  Level
              and  Strategy  is as in deflateInit/6. This can be used to switch between compression and straight
              copy of the input data, or to switch to a different kind  of  input  data  requiring  a  different
              strategy.  If  the compression level is changed, the input available so far is compressed with the
              old level (and can be flushed); the new level takes effect only at the next call of deflate/3.

              Before the call of deflateParams, the stream state must be set as for a call of deflate/3, as  the
              currently available input may have to be compressed and flushed.

       deflateReset(Z) -> ok

              Types:

                 Z = zstream()

              Equivalent to deflateEnd/1 followed by deflateInit/1,2,6, but does not free and reallocate all the
              internal compression state. The stream keeps the same compression level and any other attributes.

       deflateSetDictionary(Z, Dictionary) -> Adler32

              Types:

                 Z = zstream()
                 Dictionary = iodata()
                 Adler32 = integer()

              Initializes the compression dictionary from the specified  byte  sequence  without  producing  any
              compressed output.

              This  function  must  be  called immediately after deflateInit/1,2,6 or deflateReset/1, before any
              call of deflate/3.

              The compressor and decompressor must use the same dictionary (see inflateSetDictionary/2).

              The Adler checksum of the dictionary is returned.

       getBufSize(Z) -> integer() >= 0

              Types:

                 Z = zstream()

              Gets the size of the intermediate buffer.

          Warning:
              This function is deprecated and will be removed in a future release.

       gunzip(Data) -> Decompressed

              Types:

                 Data = iodata()
                 Decompressed = binary()

              Uncompresses data with gz headers and checksum.

       gzip(Data) -> Compressed

              Types:

                 Data = iodata()
                 Compressed = binary()

              Compresses data with gz headers and checksum.

       inflate(Z, Data) -> Decompressed

              Types:

                 Z = zstream()
                 Data = iodata()
                 Decompressed = iolist()

              Equivalent to inflate(Z, Data, [])

       inflate(Z, Data, Options) -> Decompressed

              Types:

                 Z = zstream()
                 Data = iodata()
                 Options = [{exception_on_need_dict, boolean()}]
                 Decompressed =
                     iolist() |
                     {need_dictionary, Adler32 :: integer(), Output :: iolist()}

              Decompresses as much data as possible. It can introduce some output latency (reading input without
              producing any output).

              Currently  the  only available option is {exception_on_need_dict,boolean()} which controls whether
              the function should throw an exception when a preset dictionary  is  required  for  decompression.
              When  set  to  false, a need_dictionary tuple will be returned instead. See inflateSetDictionary/2
              for details.

          Warning:
              This option defaults to true for backwards compatibility but we intend  to  remove  the  exception
              behavior  in  a  future release. New code that needs to handle dictionaries manually should always
              specify {exception_on_need_dict,false}.

       inflateChunk(Z) -> Decompressed | {more, Decompressed}

              Types:

                 Z = zstream()
                 Decompressed = iolist()

          Warning:
              This function is deprecated and will be removed in a future release. Use safeInflate/2 instead.

              Reads the next chunk of uncompressed data, initialized by inflateChunk/2.

              This function is to be repeatedly called, while it returns {more, Decompressed}.

       inflateChunk(Z, Data) -> Decompressed | {more, Decompressed}

              Types:

                 Z = zstream()
                 Data = iodata()
                 Decompressed = iolist()

          Warning:
              This function is deprecated and will be removed in a future release. Use safeInflate/2 instead.

              Like inflate/2, but decompresses no more data than will  fit  in  the  buffer  configured  through
              setBufSize/2.  Is is useful when decompressing a stream with a high compression ratio, such that a
              small amount of compressed input can expand up to 1000 times.

              This  function  returns  {more,  Decompressed},  when  there  is  more   output   available,   and
              inflateChunk/1 is to be used to read it.

              This function can introduce some output latency (reading input without producing any output).

              An  exception  will  be  thrown  if a preset dictionary is required for further decompression. See
              inflateSetDictionary/2 for details.

              Example:

              walk(Compressed, Handler) ->
                  Z = zlib:open(),
                  zlib:inflateInit(Z),
                  % Limit single uncompressed chunk size to 512kb
                  zlib:setBufSize(Z, 512 * 1024),
                  loop(Z, Handler, zlib:inflateChunk(Z, Compressed)),
                  zlib:inflateEnd(Z),
                  zlib:close(Z).

              loop(Z, Handler, {more, Uncompressed}) ->
                  Handler(Uncompressed),
                  loop(Z, Handler, zlib:inflateChunk(Z));
              loop(Z, Handler, Uncompressed) ->
                  Handler(Uncompressed).

       inflateEnd(Z) -> ok

              Types:

                 Z = zstream()

              Ends the inflate session and cleans all data used. Notice that this function throws  a  data_error
              exception if no end of stream was found (meaning that not all data has been uncompressed).

       inflateGetDictionary(Z) -> Dictionary

              Types:

                 Z = zstream()
                 Dictionary = binary()

              Returns  the decompression dictionary currently in use by the stream. This function must be called
              between inflateInit/1,2 and inflateEnd.

              Only supported if ERTS was compiled with zlib >= 1.2.8.

       inflateInit(Z) -> ok

              Types:

                 Z = zstream()

              Initializes a zlib stream for decompression.

       inflateInit(Z, WindowBits) -> ok

              Types:

                 Z = zstream()
                 WindowBits = zwindowbits()

              Initializes a decompression session on zlib stream.

              WindowBits is the base two logarithm of the maximum window size (the size of the history  buffer).
              It is to be in the range 8 through 15. Default to 15 if inflateInit/1 is used.

              If  a  compressed  stream  with  a  larger window size is specified as input, inflate/2 throws the
              data_error exception.

              A negative WindowBits value makes zlib ignore the zlib header  (and  checksum)  from  the  stream.
              Notice that the zlib source mentions this only as a undocumented feature.

       inflateReset(Z) -> ok

              Types:

                 Z = zstream()

              Equivalent  to  inflateEnd/1  followed  by inflateInit/1, but does not free and reallocate all the
              internal decompression state. The stream  will  keep  attributes  that  could  have  been  set  by
              inflateInit/1,2.

       inflateSetDictionary(Z, Dictionary) -> ok

              Types:

                 Z = zstream()
                 Dictionary = iodata()

              Initializes  the  decompression  dictionary  from  the  specified uncompressed byte sequence. This
              function must be called as a response  to  an  inflate  operation  (eg.  safeInflate/2)  returning
              {need_dictionary,Adler,Output}   or   in   the   case   of   deprecated   functions,  throwing  an
              {'EXIT',{{need_dictionary,Adler},_StackTrace}} exception.

              The dictionary chosen by the compressor can be determined from the Adler value returned or  thrown
              by  the call to the inflate function. The compressor and decompressor must use the same dictionary
              (See deflateSetDictionary/2).

              After setting the dictionary the inflate operation should be retried without new input.

              Example:

              deprecated_unpack(Z, Compressed, Dict) ->
                   case catch zlib:inflate(Z, Compressed) of
                        {'EXIT',{{need_dictionary,_DictID},_}} ->
                               ok = zlib:inflateSetDictionary(Z, Dict),
                               Uncompressed = zlib:inflate(Z, []);
                        Uncompressed ->
                               Uncompressed
                   end.

              new_unpack(Z, Compressed, Dict) ->
                  case zlib:inflate(Z, Compressed, [{exception_on_need_dict, false}]) of
                      {need_dictionary, _DictId, Output} ->
                          ok = zlib:inflateSetDictionary(Z, Dict),
                          [Output | zlib:inflate(Z, [])];
                      Uncompressed ->
                          Uncompressed
                  end.

       open() -> zstream()

              Opens a zlib stream.

       safeInflate(Z, Data) -> Result

              Types:

                 Z = zstream()
                 Data = iodata()
                 Result =
                     {continue, Output :: iolist()} |
                     {finished, Output :: iolist()} |
                     {need_dictionary, Adler32 :: integer(), Output :: iolist()}

              Like inflate/2, but returns once it has expanded beyond a small implementation-defined  threshold.
              It's useful when decompressing untrusted input which could have been maliciously crafted to expand
              until the system runs out of memory.

              This function  returns  {continue  |  finished,  Output},  where  Output  is  the  data  that  was
              decompressed  in  this  call. New input can be queued up on each call if desired, and the function
              will return {finished, Output} once all queued data has been decompressed.

              This function can introduce some output latency (reading input without producing any output).

              If  a  preset  dictionary  is  required  for  further  decompression,  this  function  returns   a
              need_dictionary tuple. See inflateSetDictionary/2) for details.

              Example:

              walk(Compressed, Handler) ->
                  Z = zlib:open(),
                  zlib:inflateInit(Z),
                  loop(Z, Handler, zlib:safeInflate(Z, Compressed)),
                  zlib:inflateEnd(Z),
                  zlib:close(Z).

              loop(Z, Handler, {continue, Output}) ->
                  Handler(Output),
                  loop(Z, Handler, zlib:safeInflate(Z, []));
              loop(Z, Handler, {finished, Output}) ->
                  Handler(Output).

       setBufSize(Z, Size) -> ok

              Types:

                 Z = zstream()
                 Size = integer() >= 0

              Sets the intermediate buffer size.

          Warning:
              This function is deprecated and will be removed in a future release.

       set_controlling_process(Z, Pid) -> ok

              Types:

                 Z = zstream()
                 Pid = pid()

              Changes the controlling process of Z to Pid, which must be a local process.

       uncompress(Data) -> Decompressed

              Types:

                 Data = iodata()
                 Decompressed = binary()

              Uncompresses data with zlib headers and checksum.

       unzip(Data) -> Decompressed

              Types:

                 Data = iodata()
                 Decompressed = binary()

              Uncompresses data without zlib headers and checksum.

       zip(Data) -> Compressed

              Types:

                 Data = iodata()
                 Compressed = binary()

              Compresses data without zlib headers and checksum.