*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> adler32 (3)              
Title
Content
Arch
Section
 

COMPRESS(3)

Contents


NAME    [Toc]    [Back]

     compress - zlib general purpose compression library

SYNOPSIS    [Toc]    [Back]

     #include <zlib.h>

     Basic functions

     const char *
     zlibVersion(void);

     int
     deflateInit(z_streamp strm, int level);

     int
     deflate(z_streamp strm, int flush);

     int
     deflateEnd(z_streamp strm);

     int
     inflateInit(z_streamp strm);

     int
     inflate(z_streamp strm, int flush);

     int
     inflateEnd(z_streamp strm);

     Advanced functions

     int
     deflateInit2(z_streamp strm,  int  level,  int  method,  int
windowBits,
             int memLevel, int strategy);

     int
     deflateSetDictionary(z_streamp     strm,     const     Bytef
*dictionary,
             uInt dictLength);

     int
     deflateCopy(z_streamp dest, z_streamp source);

     int
     deflateReset(z_streamp strm);

     int
     deflateParams(z_streamp strm, int level, int strategy);

     uLong
     deflateBound(z_streamp strm, uLong sourceLen);

     int
     deflatePrime(z_streamp strm, int bits, int value);

     int
     inflateInit2(z_streamp strm, int windowBits);

     int
     inflateSetDictionary(z_streamp     strm,     const     Bytef
*dictionary,
             uInt dictLength);

     int
     inflateSync(z_streamp strm);

     int
     inflateCopy(z_streamp dst, z_streamp source);

     int
     inflateReset(z_streamp strm);

     int
     inflateBackInit(z_stream FAR *strm, int windowBits,
             unsigned char FAR *window);

     int
     inflateBack(z_stream   FAR   *strm,  in_func  in,  void  FAR
*in_desc,
             out_func out, void FAR *out_desc);

     int
     inflateBackEnd(z_stream FAR *strm);

     uLong
     zlibCompileFlags(void);

     Utility functions

     typedef voidp gzFile;

     int
     compress(Bytef *dest, uLongf *destLen, const Bytef *source,
             uLong sourceLen);

     int
     compress2(Bytef *dest, uLongf *destLen, const Bytef *source,
             uLong sourceLen, int level);

     uLong
     compressBound(uLong sourceLen);

     int
     uncompress(Bytef   *dest,   uLongf   *destLen,  const  Bytef
*source,
             uLong sourceLen);

     gzFile
     gzopen(const char *path, const char *mode);

     gzFile
     gzdopen(int fd, const char *mode);

     int
     gzsetparams(gzFile file, int level, int strategy);

     int
     gzread(gzFile file, voidp buf, unsigned len);

     int
     gzwrite(gzFile file, voidpc buf, unsigned len);

     int
     gzprintf(gzFile file, const char *format, ...);

     int
     gzputs(gzFile file, const char *s);

     char *
     gzgets(gzFile file, char *buf, int len);

     int
     gzputc(gzFile file, int c);

     int
     gzgetc(gzFile file);

     int
     gzungetc(int c, gzFile file);

     int
     gzflush(gzFile file, int flush);

     z_off_t
     gzseek(gzFile file, z_off_t offset, int whence);

     int
     gzrewind(gzFile file);

     z_off_t
     gztell(gzFile file);

     int
     gzeof(gzFile file);

     int
     gzclose(gzFile file);

     const char *
     gzerror(gzFile file, int *errnum);

     void
     gzclearerr(gzFile file);

     Checksum functions

     uLong
     adler32(uLong adler, const Bytef *buf, uInt len);

     uLong
     crc32(uLong crc, const Bytef *buf, uInt len);

DESCRIPTION    [Toc]    [Back]

     This manual page describes the zlib general purpose compression library,
     version 1.1.4.

     The  zlib compression library 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 will  be  added  later  and
will have the
     same stream interface.

     Compression  can be done in a single step if the buffers are
large enough
     (for example if an input file is mmap'ed), 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  compressed  data format used by the in-memory functions
is the zlib
     format, which is a zlib  wrapper  documented  in  RFC  1950,
wrapped around a
     deflate stream, which is itself documented in RFC 1951.

     The  library  also  supports  reading  and  writing files in
gzip(1) (.gz) format
 with an interface similar to that of stdio(3) using  the
functions
     that start with "gz".  The gzip format is different from the
zlib format.
     gzip is a gzip wrapper,  documented  in  RFC  1952,  wrapped
around a deflate
     stream.

     The  zlib format was designed to be compact and fast for use
in memory and
     on communications channels.  The gzip  format  was  designed
for single-file
     compression  on  file systems, has a larger header than zlib
to maintain
     directory information, and uses a different,  slower,  check
method than
     zlib.

     This  library  does  not provide any functions to write gzip
files in memory.
  However such functions could be  easily  written  using
zlib's
     deflate()  function,  the documentation in the gzip RFC, and
the examples
     in gzio.c.

     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 case of corrupted input.

     The functions within the library are divided into  the  following sections:

           -   Basic functions
           -   Advanced functions
           -   Utility functions
           -   Checksum functions

BASIC FUNCTIONS    [Toc]    [Back]

     const char * zlibVersion(void);

             The   application   can  compare  zlibVersion()  and
ZLIB_VERSION for
             consistency.  If the first  character  differs,  the
library code
             actually  used  is  not compatible with the <zlib.h>
header file
             used by the application.  This check is automatically made by
             deflateInit() and inflateInit().

     int deflateInit(z_streamp strm, int level);

             The  deflateInit() function initializes the internal
stream state
             for compression.   The  fields  zalloc,  zfree,  and
opaque must be
             initialized  before  by  the  caller.  If zalloc and
zfree are set to
             Z_NULL, deflateInit() updates them  to  use  default
allocation
             functions.

             The compression level must be Z_DEFAULT_COMPRESSION,
or between 0
             and 9: 1 gives best speed, 9 gives best compression,
0 gives no
             compression  at all (the input data is simply copied
a block at a
             time).

             Z_DEFAULT_COMPRESSION requests a default  compromise
between speed
             and compression (currently equivalent to level 6).

             deflateInit()  returns Z_OK if successful, Z_MEM_ERROR if there
             was not enough memory, Z_STREAM_ERROR  if  level  is
not a valid
             compression  level,  Z_VERSION_ERROR if the zlib library version
             (zlib_version) is incompatible with the version  assumed by the
             caller  (ZLIB_VERSION).  msg is set to null if there
is no error
             message.  deflateInit() does not  perform  any  compression: this
             will be done by deflate().

     int deflate(z_streamp strm, int flush);

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

             The detailed semantics are  as  follows.   deflate()
performs one or
             both of the following actions:

             Compress  more  input starting at next_in and update
next_in and
             avail_in accordingly.  If not all input can be  processed (because
             there  is  not  enough  room  in the output buffer),
next_in and
             avail_in are updated and processing will  resume  at
this point for
             the next call to deflate().

             Provide  more output starting at next_out and update
next_out and
             avail_out accordingly.  This action is forced if the
parameter
             flush  is  non-zero.   Forcing  flush frequently degrades the compression
 ratio, so this parameter should be set only
when necessary
 (in interactive applications).  Some output may
be provided
             even if flush is not set.

             Before the call to deflate(), the application should
ensure that
             at  least one of the actions is possible, by providing more input
             and/or consuming more output, and updating  avail_in
or avail_out
             accordingly;  avail_out  should never be zero before
the call.  The
             application can consume the compressed  output  when
it wants, for
             example when the output buffer is full (avail_out ==
0), or after
             each call to deflate().  If deflate()  returns  Z_OK
and with zero
             avail_out, it must be called again after making room
in the output
 buffer because there might be more output  pending.

             If  the  parameter flush is set to Z_SYNC_FLUSH, 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.  (In particular, avail_in is  zero
after the
             call if enough output space has been provided before
the call.)
             Flushing may degrade compression for  some  compression algorithms
             and so it should be used only when necessary.

             If  flush  is  set  to  Z_FULL_FLUSH,  all output is
flushed as with
             Z_SYNC_FLUSH, 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
             Z_FULL_FLUSH  too  often  can  seriously degrade the
compression.

             If deflate() returns with avail_out == 0, this function must be
             called again with the same value of the flush parameter and more
             output space (updated avail_out), until the flush is
complete
             (deflate() returns with non-zero avail_out).  In the
case of a
             Z_FULL_FLUSH  or  a  Z_SYNC_FLUSH,  make  sure  that
avail_out is
             greater than six to avoid repeated flush markers due
to avail_out
             == 0 on return.

             If the parameter flush is set to  Z_FINISH,  pending
input is processed,
  pending output is flushed and deflate() returns with
             Z_STREAM_END if there was enough  output  space;  if
deflate() returns
  with Z_OK, this function must be called again
with Z_FINISH
             and more output space (updated avail_out but no more
input data,
             until it returns with Z_STREAM_END or an error.  After deflate()
             has returned Z_STREAM_END, the only possible  operations on the
             stream are deflateReset() or deflateEnd().

             Z_FINISH can be used immediately after deflateInit()
if all the
             compression is to be done in a single step.  In this
case,
             avail_out  must  be  at  least the value returned by
deflateBound()
             (see  below).   If   deflate()   does   not   return
Z_STREAM_END, then it
             must be called again as described above.

             deflate()  sets strm->adler to the Adler-32 checksum
of all input
             read so far (that is, total_in bytes).

             deflate() may update data_type if it can make a good
guess about
             the  input  data  type (Z_ASCII or Z_BINARY).  If in
doubt, the data
             is considered binary.  This field is only for information purposes
  and does not affect the compression algorithm in
any manner.

             deflate() returns Z_OK if  some  progress  has  been
made (more input
             processed  or more output produced), Z_STREAM_END if
all input has
             been consumed and all output has been produced (only
when flush
             is  set  to  Z_FINISH), Z_STREAM_ERROR if the stream
state was inconsistent
 (for example, if next_in or next_out  was
NULL),
             Z_BUF_ERROR if no progress is possible (for example,
avail_in or
             avail_out was zero).  Note that Z_BUF_ERROR  is  not
fatal, and
             deflate()  can  be  called again with more input and
more output
             space to continue processing.

     int deflateEnd(z_streamp strm);

             All dynamically allocated data structures  for  this
stream are
             freed.  This function discards any unprocessed input
and does not
             flush any pending output.

             deflateEnd()    returns    Z_OK    if    successful,
Z_STREAM_ERROR if the
             stream  state  was inconsistent, Z_DATA_ERROR if the
stream was
             freed prematurely (some input or output was discarded).  In the
             error  case,  msg  may  be  set but then points to a
static string
             (which must not be deallocated).

     int inflateInit(z_streamp strm);
             The inflateInit() function initializes the  internal
stream state
             for  decompression.   The  fields next_in, avail_in,
zalloc, zfree,
             and opaque must be initialized before by the caller.
If next_in
             is  not Z_NULL and avail_in is large enough (the exact value
             depends on the  compression  method),  inflateInit()
determines the
             compression  method  from  the zlib header and allocates all data
             structures  accordingly;  otherwise  the  allocation
will be deferred
             to the first call to inflate().  If zalloc and zfree
are set to
             Z_NULL, inflateInit() updates them  to  use  default
allocation
             functions.

             inflateInit()  returns Z_OK if successful, Z_MEM_ERROR if there
             was not enough memory, Z_VERSION_ERROR if  the  zlib
library version
 is incompatible with the version assumed by the
caller.  msg
             is set  to  null  if  there  is  no  error  message.
inflateInit() does
             not perform any decompression apart from reading the
zlib header
             if present: this will be  done  by  inflate().   (So
next_in and
             avail_in may be modified, but next_out and avail_out
are unchanged.)


     int inflate(z_streamp strm, int flush);
             inflate() decompresses as much data as possible, and
stops when
             the  input buffer becomes empty or the output buffer
becomes full.
             It may introduce some output latency (reading  input
without
             producing any output) except when forced to flush.

             The  detailed  semantics  are as follows.  inflate()
performs one or
             both of the following actions:

             Decompress more input starting at next_in and update
next_in and
             avail_in  accordingly.  If not all input can be processed (because
             there is not enough  room  in  the  output  buffer),
next_in is updated
  and processing will resume at this point for the
next call to
             inflate().

             Provide more output starting at next_out and  update
next_out and
             avail_out  accordingly.   inflate() provides as much
output as possible,
 until there is no more input data or no  more
space in the
             output buffer (see below about the flush parameter).

             Before the call to inflate(), the application should
ensure that
             at  least one of the actions is possible, by providing more input
             and/or  consuming  more  output,  and  updating  the
next_* and avail_*
             values accordingly.  The application can consume the
uncompressed
             output when it wants, for example  when  the  output
buffer is full
             (avail_out  ==  0), or after each call to inflate().
If inflate()
             returns Z_OK and with zero  avail_out,  it  must  be
called again after
  making  room in the output buffer because there
might be more
             output pending.

             The flush parameter of inflate() can be  Z_NO_FLUSH,
Z_SYNC_FLUSH,
             Z_FINISH,  or  Z_BLOCK.   Z_SYNC_FLUSH requests that
inflate() flush
             as much output as possible  to  the  output  buffer.
Z_BLOCK requests
  that  inflate()  stop if and when it gets to
the next deflate
 block boundary.  When  decoding  the  zlib  or
gzip format,
             this  will cause inflate() to return immediately after the header
             and before the first block.  When doing  a  raw  inflate, inflate()
             will  go ahead and process the first block, and will
return when
             it gets to the end of that block, or  when  it  runs
out of data.

             The  Z_BLOCK  option assists in appending to or combining deflate
             streams.   Also  to  assist  in  this,   on   return
inflate() will set
             strm->data_type  to the number of unused bits in the
last byte
             taken from strm->next_in, plus 64  if  inflate()  is
currently decoding
  the  last  block in the deflate stream, plus
128 if
             inflate() returned  immediately  after  decoding  an
end-of-block
             code  or decoding the complete header up to just before the first
             byte of the deflate stream.  The  end-of-block  will
not be indicated
  until  all of the uncompressed data from that
block has been
             written to strm->next_out.   The  number  of  unused
bits may in general
 be greater than seven, except when bit 7 of data_type is
             set, in which case the number of unused bits will be
less than
             eight.

             inflate() should normally be called until it returns
Z_STREAM_END
             or an error.  However if all decompression is to  be
performed in
             a single step (a single call to inflate), the parameter flush
             should be set to Z_FINISH.  In this case all pending
input is
             processed   and   all  pending  output  is  flushed;
avail_out must be
             large enough to  hold  all  the  uncompressed  data.
(The size of the
             uncompressed  data  may  have been saved by the compressor for this
             purpose.)  The next operation on this stream must be
inflateEnd()
             to  deallocate  the decompression state.  The use of
Z_FINISH is
             never required, but can be used to inform  inflate()
that a faster
             approach  may be used for the single inflate() call.

             In this implementation, inflate() always flushes  as
much output
             as  possible  to  the output buffer, and always uses
the faster approach
 on the first call.  So the only effect of the
flush parameter
  in  this implementation is on the return value
of inflate(),
             as noted below, or when  it  returns  early  because
Z_BLOCK is used.

             If  a  preset  dictionary  is needed after this call
(see
             inflateSetDictionary() below), inflate() sets  strmadler to the
             Adler-32  checksum  of  the dictionary chosen by the
compressor and
             returns Z_NEED_DICT; otherwise it  sets  strm->adler
to the
             Adler-32  checksum  of  all  output  produced so far
(that is,
             total_out bytes) and returns Z_OK,  Z_STREAM_END  or
an error code
             as  described  below.   At  the  end  of the stream,
inflate() checks
             that its computed Adler-32 checksum is equal to that
saved by the
             compressor  and  returns  Z_STREAM_END  only  if the
checksum is correct.


             inflate() will decompress  and  check  either  zlibwrapped or gzipwrapped
  deflate  data.  The header type is detected
automatically.
             Any information contained in the gzip header is  not
retained, so
             applications  that  need that information should instead use raw
             inflate; see inflateInit2() below, or  inflateBack()
and perform
             their own processing of the gzip header and trailer.

             inflate() returns Z_OK if  some  progress  has  been
made (more input
             processed  or more output produced), Z_STREAM_END if
the end of
             the compressed data has been reached and all  uncompressed output
             has  been  produced, Z_NEED_DICT if a preset dictionary is needed
             at this point, Z_DATA_ERROR if the  input  data  was
corrupted (input
  stream not conforming to the zlib format or incorrect check
             value), Z_STREAM_ERROR if the stream  structure  was
inconsistent
             (for  example,  if  next_in  or  next_out was NULL),
Z_MEM_ERROR if
             there was  not  enough  memory,  Z_BUF_ERROR  if  no
progress is possible
  or  if  there was not enough room in the output
buffer when
             Z_FINISH is used.  Note that Z_BUF_ERROR is not  fatal, and
             inflate()  can  be  called again with more input and
more output
             space to continue compressing.  If  Z_DATA_ERROR  is
returned, the
             application  may then call inflateSync() to look for
a good compression
 block if a partial recovery of the data  is
desired.

     int inflateEnd(z_streamp strm);
             All  dynamically  allocated data structures for this
stream are
             freed.  This function discards any unprocessed input
and does not
             flush any pending output.

             inflateEnd()   returns   Z_OK   if   successful,  or
Z_STREAM_ERROR if the
             stream state was inconsistent.  In the  error  case,
msg may be set
             but  then  points to a static string (which must not
be
             deallocated).

ADVANCED FUNCTIONS    [Toc]    [Back]

     The following functions are needed only in some special  applications.

     int  deflateInit2(z_streamp strm, int level, int method, int
windowBits,
             int memLevel, int strategy);

             This is another version of deflateInit()  with  more
compression
             options.   The  fields  next_in,  zalloc, zfree, and
opaque must be
             initialized before by the caller.

             The method parameter is the compression method.   It
must be
             Z_DEFLATED in this version of the library.

             The  windowBits  parameter is the base two logarithm
of the window
             size (the size of the history buffer).  It should be
in the range
             8..15  for this version of the library.  Larger values of this parameter
 result in better compression at the  expense
of memory usage.
   The  default  value is 15 if deflateInit() is
used instead.

             windowBits can also be -8..-15 for raw deflate.   In
this case,
             -windowBits  determines  the window size.  deflate()
will then generate
 raw deflate data with no zlib header or trailer, and will
             not compute an Adler-32 check value.

             windowBits  can also be greater than 15 for optional
gzip encoding.
  Add 16 to windowBits to write  a  simple  gzip
header and
             trailer around the compressed data instead of a zlib
wrapper.
             The gzip header will have no file name, no extra data, no comment,
  no modification time (set to zero), no header
crc, and the
             operating system will be set to 255 (unknown).

             The memLevel parameter  specifies  how  much  memory
should 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.  The default
value is 8.
             See <zconf.h> for total memory usage as  a  function
of windowBits
             and memLevel.

             The  strategy parameter is used to tune the compression algorithm.
             Use the value Z_DEFAULT_STRATEGY  for  normal  data;
Z_FILTERED for
             data  produced  by  a filter (or predictor); Z_HUFFMAN_ONLY to force
             Huffman encoding only (no string match), or Z_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 Z_FILTERED is to  force  more
Huffman coding
             and  less string matching; it is somewhat intermediate between
             Z_DEFAULT and Z_HUFFMAN_ONLY.  Z_RLE is designed  to
be almost as
             fast as Z_HUFFMAN_ONLY, but gives better compression
for PNG image
 data.  The strategy parameter only  affects  the
compression
             ratio but not the correctness of the compressed output, even if
             it is not set appropriately.

             deflateInit2() returns Z_OK if successful, Z_MEM_ERROR if there
             was not enough memory, Z_STREAM_ERROR if a parameter
is invalid
             (such as an invalid method).  msg is set to null  if
there is no
             error  message.  deflateInit2() does not perform any
compression:
             this will be done by deflate().

     int   deflateSetDictionary(z_streamp   strm,   const   Bytef
*dictionary, uInt
             dictLength);

             Initializes the compression dictionary from the given byte sequence
  without  producing  any  compressed  output.
This function
             must  be  called  immediately  after  deflateInit(),
deflateInit2(),
             or deflateReset(), before  any  call  to  deflate().
The compressor
             and  decompressor  must use exactly the same dictionary (see
             inflateSetDictionary()).

             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.  Using a dictionary is most
useful when
             the data to be compressed is short and can  be  predicted with good
             accuracy;  the  data  can  then be compressed better
than with the
             default empty dictionary.

             Depending on the size of the compression data structures selected
             by  deflateInit()  or  deflateInit2(), a part of the
dictionary may
             in effect be discarded, for example if  the  dictionary is larger
             than  the  window  size  in deflate() or deflate2().
Thus the
             strings most likely to be useful should  be  put  at
the end of the
             dictionary, not at the front.

             Upon  return of this function, strm->adler is set to
the Adler-32
             value of the dictionary; the decompressor may  later
use this value
  to  determine  which dictionary has been used by
the compressor.
             (The Adler-32 value applies to the whole  dictionary
even if only
             a  subset  of the dictionary is actually used by the
compressor.)
             If a raw deflate was requested,  then  the  Adler-32
value is not
             computed and strm->adler is not set.

             deflateSetDictionary()  returns  Z_OK if successful,
or
             Z_STREAM_ERROR if a parameter is  invalid  (such  as
NULL
             dictionary) or the stream state is inconsistent (for
example if
             deflate() has already been called for this stream or
if the compression
  method  is bsort).  deflateSetDictionary()
does not perform
  any  compression:  this  will   be   done   by
deflate().

     int deflateCopy(z_streamp dest, z_streamp source);

             The  deflateCopy()  function  sets  the  destination
stream as a complete
 copy of the source stream.

             This function can be useful when several compression
strategies
             will  be  tried,  for example when there are several
ways of preprocessing
  the  input  data  with  a  filter.   The
streams that will
             be   discarded  should  then  be  freed  by  calling
deflateEnd().  Note
             that deflateCopy() duplicates the internal  compression state
             which  can  be quite large, so this strategy is slow
and can consume
 lots of memory.

             deflateCopy() returns Z_OK if successful,  Z_MEM_ERROR if there
             was  not enough memory, Z_STREAM_ERROR if the source
stream state
             was inconsistent (such as zalloc being  NULL).   msg
is left unchanged
 in both source and destination.

     int deflateReset(z_streamp strm);

             This function is equivalent to deflateEnd() followed
by
             deflateInit(), but does not free and reallocate  all
the internal
             compression  state.   The  stream will keep the same
compression
             level and any other attributes that  may  have  been
set by
             deflateInit2().

             deflateReset()   returns   Z_OK  if  successful,  or
Z_STREAM_ERROR if
             the source stream state was  inconsistent  (such  as
zalloc or state
             being NULL).

     int deflateParams(z_streamp strm, int level, int strategy);

             The deflateParams() function dynamically updates the
compression
             level and compression strategy.  The  interpretation
of level and
             strategy  is as in deflateInit2().  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
may be
             flushed); the new level will take effect only at the
next call to
             deflate().

             Before the call to deflateParams(), the stream state
must be set
             as for a call  to  deflate(),  since  the  currently
available input
             may  have to be compressed and flushed.  In particular,
             strm->avail_out must be non-zero.

             deflateParams()   returns   Z_OK   if    successful,
Z_STREAM_ERROR if the
             source stream state was inconsistent or if a parameter was invalid,
 or Z_BUF_ERROR if strm->avail_out was zero.

     uLong deflateBound(z_streamp strm, uLong sourceLen)

             deflateBound() returns an upper bound  on  the  compressed size after
 deflation of sourceLen bytes.  It must be called
after
             deflateInit() or deflateInit2().  This would be used
to allocate
             an output buffer for deflation in a single pass, and
so would be
             called before deflate().

     int deflatePrime(z_streamp strm, int bits, int value)

             deflatePrime() inserts bits in  the  deflate  output
stream.  The
             intent  is  that  this function is used to start off
the deflate
             output with the bits leftover from  a  previous  deflate stream when
             appending to it.  As such, this function can only be
used for raw
             deflate, and must be used before the first deflate()
call after a
             deflateInit2() or deflateReset().  bits must be less
than or
             equal to 16, and that many of the least  significant
bits of value
             will be inserted in the output.

             deflatePrime()   returns   Z_OK  if  successful,  or
Z_STREAM_ERROR if
             the source stream state was inconsistent.

     int inflateInit2(z_streamp strm, int windowBits);

             This is another version of inflateInit() with an extra parameter.
             The  fields  next_in,  avail_in,  zalloc, zfree, and
opaque must be
             initialized before by the caller.

             The windowBits parameter is the base  two  logarithm
of the maximum
             window  size  (the  size of the history buffer).  It
should be in
             the range 8..15 for this  version  of  the  library.
The default
             value  is  15  if  inflateInit()  is  used  instead.
windowBits must be
             greater than or equal to the windowBits  value  provided to
             deflateInit2()  while  compressing,  or  it  must be
equal to 15 if
             deflateInit2() was not used.  If a compressed stream
with a larger
 window size is given as input, inflate() will return with the
             error code Z_DATA_ERROR instead of trying  to  allocate a larger
             window.

             windowBits  can also be -8..-15 for raw inflate.  In
this case,
             -windowBits determines the window  size.   inflate()
will then process
  raw  deflate  data,  not looking for a zlib or
gzip header, not
             generating a check value, and not  looking  for  any
check values
             for  comparison  at  the end of the stream.  This is
for use with
             other formats that use the deflate  compressed  data
format such as
             zip.   Those formats provide their own check values.
If a custom
             format is developed using the raw deflate format for
compressed
             data,  it  is recommended that a check value such as
an Adler-32 or
             a crc32 be applied to the uncompressed  data  as  is
done in the
             zlib, gzip, and zip formats.  For most applications,
the zlib
             format should be used as  is.   Note  that  comments
above on the use
             in   deflateInit2()  applies  to  the  magnitude  of
windowBits.

             windowBits can also be greater than 15 for  optional
gzip decoding.
   Add  32 to windowBits to enable zlib and gzip
decoding with
             automatic header detection, or add 16 to decode only
the gzip
             format (the zlib format will return a Z_DATA_ERROR).

             inflateInit2() returns Z_OK if successful, Z_MEM_ERROR if there
             was not enough memory, Z_STREAM_ERROR if a parameter
is invalid
             (such as a negative memLevel).  msg is set  to  null
if there is no
             error  message.  inflateInit2() does not perform any
decompression
             apart from reading the zlib header if present:  this
will be done
             by inflate().  (So next_in and avail_in may be modified, but
             next_out and avail_out are unchanged.)

     int   inflateSetDictionary(z_streamp   strm,   const   Bytef
*dictionary, uInt
             dictLength);

             Initializes  the  decompression  dictionary from the
given uncompressed
 byte sequence.  This function must be called
immediately
             after  a  call  to  inflate()  if this call returned
Z_NEED_DICT.  The
             dictionary chosen by the compressor  can  be  determined from the
             Adler-32  value  returned by this call to inflate().
The compressor
 and decompressor must use exactly the same  dictionary (see
             deflateSetDictionary()).

             inflateSetDictionary()  returns  Z_OK if successful,
Z_STREAM_ERROR
             if a parameter is invalid (such as NULL  dictionary)
or the stream
             state  is  inconsistent,  Z_DATA_ERROR  if the given
dictionary
             doesn't match the expected one  (incorrect  Adler-32
value).
             inflateSetDictionary()  does  not perform any decompression: this
             will be done by subsequent calls of inflate().

     int inflateSync(z_streamp strm);

             Skips invalid compressed data  until  a  full  flush
point (see above
             the  description of deflate() with Z_FULL_FLUSH) can
be found, or
             until all available input is skipped.  No output  is
provided.

             inflateSync() returns Z_OK if a full flush point has
been found,
             Z_BUF_ERROR if no more  input  was  provided,  Z_DATA_ERROR if no
             flush point has been found, or Z_STREAM_ERROR if the
stream
             structure was inconsistent.  In  the  success  case,
the application
             may  save  the current value of total_in which indicates where
             valid compressed data was found.  In the error case,
the application
  may  repeatedly  call inflateSync(), providing
more input each
             time, until success or end of the input data.

     int inflateCopy(z_streamp dest, z_streamp source)

             Sets the destination stream as a  complete  copy  of
the source
             stream.

             This  function can be useful when randomly accessing
a large
             stream.  The first pass through the stream can periodically
             record  the  inflate  state, allowing restarting inflate at those
             points when randomly accessing the stream.

             inflateCopy() returns Z_OK if  success,  Z_MEM_ERROR
if there was
             not  enough  memory,  Z_STREAM_ERROR  if  the source
stream state was
             inconsistent (such as zalloc being  NULL).   msg  is
left unchanged
             in both source and dest.

     int inflateReset(z_streamp strm);

             This function is equivalent to inflateEnd() followed
by
             inflateInit(), but does not free and reallocate  all
the internal
             decompression  state.   The  stream  will  keep  attributes that may
             have been set by inflateInit2().

             inflateReset()  returns  Z_OK  if   successful,   or
Z_STREAM_ERROR if
             the  source  stream  state was inconsistent (such as
zalloc or state
             being NULL).

     int  inflateBackInit(z_stream  FAR  *strm,  int  windowBits,
unsigned char FAR
             *window)

             Initialize  the internal stream state for decompression using
             inflateBack() calls.  The fields zalloc,  zfree  and
opaque in strm
             must  be initialized before the call.  If zalloc and
zfree are
             Z_NULL, then the default library-derived memory  allocation routines
  are  used.   windowBits is the base two logarithm of the window
 size, in the range 8..15.  window  is  a  caller
supplied buffer
             of that size.  Except for special applications where
it is assured
 that deflate()  was  used  with  small  window
sizes, windowBits
             must be 15 and a 32K byte window must be supplied to
be able to
             decompress general deflate streams.

             See inflateBack() for the usage of these routines.

             inflateBackInit()  will  return  Z_OK  on   success,
Z_STREAM_ERROR if
             any  of  the  parameters are invalid, Z_MEM_ERROR if
the internal
             state could not be allocated, or Z_VERSION_ERROR  if
the version
             of  the  library  does  not match the version of the
header file.

     int inflateBack(z_stream FAR *strm,  in_func  in,  void  FAR
*in_desc,
             out_func out, void FAR *out_desc)

             inflateBack()  does a raw inflate with a single call
using a callback
 interface for input and output.  This  is  more
efficient than
             inflate()  for  file  I/O  applications  in  that it
avoids copying between
 the output and the sliding  window  by  simply
making the window
  itself the output buffer.  This function trusts
the application
 to not change the output buffer passed  by  the
output function,
 at least until inflateBack() returns.

             inflateBackInit()  must  be called first to allocate
the internal
             state and to initialize the state with the user-provided window
             buffer.   inflateBack()  may  then  be used multiple
times to inflate
             a complete,  raw  deflate  stream  with  each  call.
inflateBackEnd()
             is then called to free the allocated state.

             A  raw  deflate  stream  is one with no zlib or gzip
header or trailer.
  This routine would normally be used in a utility that reads
             zip or gzip files and writes out uncompressed files.
The utility
             would decode the header and process the  trailer  on
its own, hence
             this  routine expects only the raw deflate stream to
decompress.
             This  is  different  from  the  normal  behavior  of
inflate(), which
             expects  either  a  zlib  or gzip header and trailer
around the deflate
 stream.

             inflateBack() uses two subroutines supplied  by  the
caller that
             are  then called by inflateBack() for input and output.
             inflateBack() calls those routines until it reads  a
complete deflate
  stream and writes out all of the uncompressed
data, or until
 it encounters an error.  The function's  parameters and return
             types  are defined above in the in_func and out_func
typedefs.
             inflateBack()  will  call  in(in_desc,  &buf)  which
should return the
             number  of bytes of provided input, and a pointer to
that input in
             buf.  If there is no input available, in() must  return zero --
             buf  is  ignored  in  that case -- and inflateBack()
will return a
             buffer error.  inflateBack() will call out(out_desc,
buf, len) to
             write  the  uncompressed  data buf[0..len-1].  out()
should return
             zero on success, or non-zero on failure.   If  out()
returns nonzero,
 inflateBack() will return with an error.  Neither in() nor
             out() are permitted to change the  contents  of  the
window provided
             to  inflateBackInit(), which is also the buffer that
out() uses to
             write from.  The length written by out() will be  at
most the window
  size.  Any non-zero amount of input may be provided by in().

             For convenience, inflateBack() can be provided input
on the first
             call  by  setting  strm->next_in and strm->avail_in.
If that input
             is exhausted, then in() will be  called.   Therefore
strm->next_in
             must  be  initialized  before calling inflateBack().
If
             strm->next_in is Z_NULL, then in()  will  be  called
immediately for
             input.    If   strm->next_in  is  not  Z_NULL,  then
strm->avail_in must
             also be initialized, and then if  strm->avail_in  is
not zero, input
  will initially be taken from strm->next_in[0 ..
             strm->avail_in - 1].

             The in_desc and out_desc parameters of inflateBack()
are passed
             as the first parameter of in() and out() respectively when they
             are called.  These  descriptors  can  be  optionally
used to pass any
             information  that the caller-supplied in() and out()
functions
             need to do their job.

             On return, inflateBack() will set strm->next_in and
             strm->avail_in to pass back any  unused  input  that
was provided by
             the   last   in()   call.    The  return  values  of
inflateBack() can be
             Z_STREAM_END on  success,  Z_BUF_ERROR  if  in()  or
out() returned an
             error,  Z_DATA_ERROR  if there was a format error in
the deflate
             stream (in which case strm->msg is set  to  indicate
the nature of
             the  error), or Z_STREAM_ERROR if the stream was not
properly initialized.
  In the case of Z_BUF_ERROR, an  input  or
output error
             can  be distinguished using strm->next_in which will
be Z_NULL only
 if in() returned an error.  If strm->next is  not
Z_NULL, then
             the Z_BUF_ERROR was due to out() returning non-zero.
(in() will
             always be called before out(), so  strm->next_in  is
assured to be
             defined  if  out()  returns  non-zero.)   Note  that
inflateBack() cannot
 return Z_OK.

     int inflateBackEnd(z_stream FAR *strm)

             All memory allocated by inflateBackInit() is  freed.

             inflateBackEnd()   returns   Z_OK   on  success,  or
Z_STREAM_ERROR if
             the stream state was inconsistent.

     uLong zlibCompileFlags(void)

             This function returns flags indicating  compile-time
options.

             Type sizes, two bits each:

                   00      16 bits
                   01      32 bits
                   10      64 bits
                   11      other:

                                 1.0     size of uInt
                                 3.2     size of uLong
                                 5.4     size of voidpf (pointer)
                                 7.6     size of z_off_t

             Compiler, assembler, and debug options:

                   8       DEBUG
                   9       ASMV or ASMINF -- use ASM code
                   10      ZLIB_WINAPI -- exported functions  use
the WINAPI
                           calling convention
                   11      0 (reserved)

             One-time  table  building  (smaller  code,  but  not
thread-safe if
             true):

                   12      BUILDFIXED -- build static  block  decoding tables
                           when needed
                   13       DYNAMIC_CRC_TABLE -- build CRC calculation tables
                           when needed
                   14,15   0 (reserved)

             Library content (indicates missing functionality):

                   16      NO_GZCOMPRESS -- gz* functions  cannot
compress (to
                           avoid  linking  deflate  code when not
needed)
                   17      NO_GZIP -- deflate  can't  write  gzip
streams, and
                           inflate  can't  detect and decode gzip
streams (to
                           avoid linking CRC code)
                   18-19   0 (reserved)

             Operation variations (changes in library functionality):

                   20       PKZIP_BUG_WORKAROUND -- slightly more
permissive
                           inflate
                   21      FASTEST -- deflate algorithm with only
one, lowest
                           compression level
                   22,23   0 (reserved)

             The sprintf variant used by gzprintf (zero is best):

                   24      0 = vs*, 1 = s* -- 1 means limited  to
20 arguments
                           after the format
                   25       0  = *nprintf, 1 = *printf -- 1 means
gzprintf() not
                           secure!
                   26      0 = returns value, 1 = void -- 1 means
inferred
                           string length returned

             Remainder:

                   27-31   0 (reserved)

UTILITY FUNCTIONS    [Toc]    [Back]

     The  following  utility  functions are implemented on top of
the basic
     stream-oriented functions.  To simplify the interface,  some
default options
 are assumed (compression level and memory usage, standard memory
     allocation functions).  The source  code  of  these  utility
functions can
     easily be modified if you need special options.

     int  compress(Bytef  *dest,  uLongf  *destLen,  const  Bytef
*source, uLong
             sourceLen);

             The compress() function compresses the source buffer
into the
             destination buffer.  sourceLen is the byte length of
the source
             buffer.  Upon entry, destLen is the  total  size  of
the destination
             buffer, which must be at least the value returned by
             compressBound(sourcelen).  Upon exit, destLen is the
actual size
             of the compressed buffer.  This function can be used
to compress
             a whole file at once if the input file is mmap'ed.

             compress() returns Z_OK if  successful,  Z_MEM_ERROR
if there was
             not  enough  memory, or Z_BUF_ERROR if there was not
enough room in
             the output buffer.

     int compress2(Bytef  *dest,  uLongf  *destLen,  const  Bytef
*source, uLong
             sourceLen, int level);

             The   compress2()  function  compresses  the  source
buffer into the
             destination buffer.  The  level  parameter  has  the
same meaning as
             in  deflateInit().   sourceLen is the byte length of
the source
             buffer.  Upon entry, destLen is the  total  size  of
the destination
             buffer, which must be at least the value returned by
             compressBound(sourceLen).  Upon exit, destLen is the
actual size
             of the compressed buffer.

             compress2()  returns Z_OK if successful, Z_MEM_ERROR
if there was
             not enough memory,  Z_BUF_ERROR  if  there  was  not
enough room in
             the  output  buffer,  or Z_STREAM_ERROR if the level
parameter is
             invalid.

     int compressBound(uLong sourceLen)

             compressBound() returns an upper bound on  the  compressed size after
  compress()  or  compress2() on sourceLen bytes.
It would be
             used before a compress() or compress2() call to  allocate the destination
 buffer.

     int  uncompress(Bytef  *dest,  uLongf  *destLen, const Bytef
*source, uLong
             sourceLen);

             The uncompress() function  decompresses  the  source
buffer into the
             destination buffer.  sourceLen is the byte length of
the source
             buffer.  Upon entry, destLen is the  total  size  of
the destination
             buffer,  which  must be large enough to hold the entire uncompressed
 data.  (The size of  the  uncompressed  data
must have been
             saved  previously  by the compressor and transmitted
to the decompressor
 by some mechanism outside the scope of  this
compression
             library.)   Upon exit, destLen is the actual size of
the compressed
 buffer.  This function can be used to decompress a whole
             file at once if the input file is mmap'ed.

             uncompress() returns Z_OK if successful, Z_MEM_ERROR
if there was
             not enough memory,  Z_BUF_ERROR  if  there  was  not
enough room in
             the output buffer, or Z_DATA_ERROR if the input data
was corrupted
 or incomplete.

     gzFile gzopen(const char *path, const char *mode);

             The gzopen() function opens a gzip  (.gz)  file  for
reading or
             writing.  The mode parameter is as in fopen(3) ("rb"
or "wb") but
             can also include a  compression  level  (wb9)  or  a
strategy: `f' for
             filtered  data,  as  in "wb6f"; `h' for Huffman only
compression, as
             in "wb1h", or `R'  for  run-length  encoding  as  in
"wb1R".  (See the
             description  of  deflateInit2() for more information
about the
             strategy parameter.)

             gzopen() can be used to read a file which is not  in
gzip format;
             in  this  case  gzread() will directly read from the
file without
             decompression.

             gzopen() returns NULL  if  the  file  could  not  be
opened or if there
             was insufficient memory to allocate the (de)compression state;
             errno can be checked to distinguish  the  two  cases
(if errno is
             zero, the zlib error is Z_MEM_ERROR).

     gzFile gzdopen(int fd, const char *mode);

             The  gzdopen() function associates a gzFile with the
file descriptor
 fd.  File descriptors are  obtained  from  calls
like open(2),
             dup(2), creat(3), pipe(2), or fileno(3) (if the file
has been
             previously opened with fopen(3)).  The mode  parameter is as in
             gzopen().

             The  next  call  to gzclose() on the returned gzFile
will also close
             the file descriptor fd, just like fclose(fdopen(fd),
mode) closes
             the  file  descriptor  fd.   If  you want to keep fd
open, use gzdopen(dup(fd),
 mode).

             gzdopen() returns NULL  if  there  was  insufficient
memory to allocate
 the (de)compression state.

     int gzsetparams(gzFile file, int level, int strategy);

             The  gzsetparams()  function dynamically updates the
compression
             level  or  strategy.    See   the   description   of
deflateInit2() for the
             meaning of these parameters.

             gzsetparams()   returns   Z_OK   if  successful,  or
Z_STREAM_ERROR if
             the file was not opened for writing.

     int gzread(gzFile file, voidp buf, unsigned len);

             The gzread() function reads the given number of  uncompressed
             bytes  from  the compressed file.  If the input file
was not in
             gzip format, gzread() copies  the  given  number  of
bytes into the
             buffer.

             gzread()  returns  the  number of uncompressed bytes
actually read
             (0 for end of file, -1 for error).

     int gzwrite(gzFile file, voidpc buf, unsigned len);

             The gzwrite() function writes the  given  number  of
uncompressed
             bytes  into  the compressed file.  gzwrite() returns
the number of
             uncompressed bytes actually written (0  in  case  of
error).

     int gzprintf(gzFile file, const char *format, ...);

             The   gzprintf()  function  converts,  formats,  and
writes the args to
             the compressed file  under  control  of  the  format
string, as in
             fprintf(3).  gzprintf() returns the number of uncompressed bytes
             actually written (0 in case of error).   The  number
of uncompressed
  bytes  written  is  limited  to  4095.  The
caller should make
             sure that this limit is not exceeded.  If it is  exceeded, then
             gzprintf()  will  return  an  error (0) with nothing
written.  In
             this case, there may also be a buffer overflow  with
unpredictable
             consequences,  which  is  possible  only if zlib was
compiled with
             the insecure functions sprintf() or  vsprintf()  because the secure
             snprintf()  or vsnprintf() functions were not available.

     int gzputs(gzFile file, const char *s);

             The gzputs() function writes the  given  null-terminated string to
             the  compressed file, excluding the terminating null
character.

             gzputs() returns the number of  characters  written,
or -1 in case
             of error.

     char * gzgets(gzFile file, char *buf, int len);

             The  gzgets()  function  reads  bytes  from the compressed file until
             len-1 characters are read, or a newline character is
read and
             transferred  to  buf, or an end-of-file condition is
encountered.
             The string is then terminated with a null character.

             gzgets() returns buf, or Z_NULL in case of error.

     int gzputc(gzFile file, int c);

             The  gzputc() function writes c, converted to an unsigned char,
             into the compressed file.  gzputc() returns the value that was
             written, or -1 in case of error.

     int gzgetc(gzFile file);

             The  gzgetc()  function reads one byte from the compressed file.
             gzgetc() returns this byte or -1 in case of  end  of
file or error.

     int gzungetc(int c, gzFile file)

             Push  one  character back onto the stream to be read
again later.
             Only  one  character  of   push-back   is   allowed.
gzungetc() returns
             the  character pushed, or -1 on failure.  gzungetc()
will fail if
             a character has been pushed but not read yet, or  if
c is -1.  The
             pushed  character will be discarded if the stream is
repositioned
             with gzseek() or gzrewind().

     int gzflush(gzFile file, int flush);

             The gzflush() function flushes  all  pending  output
into the compressed
  file.   The  parameter  flush  is as in the
deflate() function.
  The return value is  the  zlib  error  number
(see function
             gzerror()  below).   gzflush()  returns  Z_OK if the
flush parameter
             is Z_FINISH and all output could be flushed.

             gzflush() should be called only when str

 Similar pages
Name OS Title
clAddParam IRIX Add a video or audio compression parameter to the Compression Library
clAddAlgorithm IRIX Add a video or audio compression algorithm to the Compression Library
xconfirm IRIX general purpose dialog box
gpio OpenBSD General Purpose Input/Output
extent_print OpenBSD general purpose extent manager
extent OpenBSD general purpose extent manager
extent_alloc OpenBSD general purpose extent manager
extent_alloc_subregion OpenBSD general purpose extent manager
extent_create OpenBSD general purpose extent manager
extent_destroy OpenBSD general purpose extent manager
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service