 84d9c625bf
			
		
	
	
		84d9c625bf
		
	
	
	
	
		
			
			- Fix for possible unset uid/gid in toproto
 - Fix for default mtree style
 - Update libelf
 - Importing libexecinfo
 - Resynchronize GCC, mpc, gmp, mpfr
 - build.sh: Replace params with show-params.
     This has been done as the make target has been renamed in the same
     way, while a new target named params has been added. This new
     target generates a file containing all the parameters, instead of
     printing it on the console.
 - Update test48 with new etc/services (Fix by Ben Gras <ben@minix3.org)
     get getservbyport() out of the inner loop
Change-Id: Ie6ad5226fa2621ff9f0dee8782ea48f9443d2091
		
	
			
		
			
				
	
	
		
			1645 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			1645 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: zlib.3,v 1.9 2013/07/20 21:39:57 wiz Exp $
 | |
| .\"	$OpenBSD: zlib.3,v 1.1 2003/09/25 09:12:09 jmc Exp $
 | |
| .\"
 | |
| .\"  Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
 | |
| .\"
 | |
| .\"  This software is provided 'as-is', without any express or implied
 | |
| .\"  warranty.  In no event will the authors be held liable for any damages
 | |
| .\"  arising from the use of this software.
 | |
| .\"
 | |
| .\"  Permission is granted to anyone to use this software for any purpose,
 | |
| .\"  including commercial applications, and to alter it and redistribute it
 | |
| .\"  freely, subject to the following restrictions:
 | |
| .\"
 | |
| .\"  The origin of this software must not be misrepresented; you must not
 | |
| .\"  claim that you wrote the original software. If you use this software
 | |
| .\"  in a product, an acknowledgment in the product documentation would be
 | |
| .\"  appreciated but is not required.
 | |
| .\"  Altered source versions must be plainly marked as such, and must not be
 | |
| .\"  misrepresented as being the original software.
 | |
| .\"  This notice may not be removed or altered from any source distribution.
 | |
| .\"
 | |
| .\" Converted to mdoc format for the OpenBSD project
 | |
| .\" by Jason McIntyre <jmc@openbsd.org>
 | |
| .\"
 | |
| .Dd May 1, 2004
 | |
| .Dt ZLIB 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm zlib
 | |
| .Nd general purpose compression library
 | |
| .Sh SYNOPSIS
 | |
| .In zlib.h
 | |
| .Ss Basic functions
 | |
| .Ft const char *
 | |
| .Fn zlibVersion "void"
 | |
| .Ft int
 | |
| .Fn deflateInit "z_streamp strm" "int level"
 | |
| .Ft int
 | |
| .Fn deflate "z_streamp strm" "int flush"
 | |
| .Ft int
 | |
| .Fn deflateEnd "z_streamp strm"
 | |
| .Ft int
 | |
| .Fn inflateInit "z_streamp strm"
 | |
| .Ft int
 | |
| .Fn inflate "z_streamp strm" "int flush"
 | |
| .Ft int
 | |
| .Fn inflateEnd "z_streamp strm"
 | |
| .Ss Advanced functions
 | |
| .Ft int
 | |
| .Fn deflateInit2 "z_streamp strm" "int level" "int method" \
 | |
| "int windowBits" "int memLevel" "int strategy"
 | |
| .Ft int
 | |
| .Fn deflateSetDictionary "z_streamp strm" "const Bytef *dictionary" \
 | |
| "uInt dictLength"
 | |
| .Ft int
 | |
| .Fn deflateCopy "z_streamp dest" "z_streamp source"
 | |
| .Ft int
 | |
| .Fn deflateReset "z_streamp strm"
 | |
| .Ft int
 | |
| .Fn deflateParams "z_streamp strm" "int level" "int strategy"
 | |
| .Ft int
 | |
| .Fn inflateInit2 "z_streamp strm" "int windowBits"
 | |
| .Ft int
 | |
| .Fn inflateSetDictionary "z_streamp strm" "const Bytef *dictionary" "uInt dictLength"
 | |
| .Ft int
 | |
| .Fn inflateSync "z_streamp strm"
 | |
| .Ft int
 | |
| .Fn inflateReset "z_streamp strm"
 | |
| .Ss Utility functions
 | |
| .Fd typedef voidp gzFile ;
 | |
| .Pp
 | |
| .Ft int
 | |
| .Fn compress "Bytef *dest" "uLongf *destLen" "const Bytef *source" "uLong sourceLen"
 | |
| .Ft int
 | |
| .Fn compress2 "Bytef *dest" "uLongf *destLen" "const Bytef *source" "uLong sourceLen" "int level"
 | |
| .Ft int
 | |
| .Fn uncompress "Bytef *dest" "uLongf *destLen" "const Bytef *source" "uLong sourceLen"
 | |
| .Ft gzFile
 | |
| .Fn gzopen "const char *path" "const char *mode"
 | |
| .Ft gzFile
 | |
| .Fn gzdopen "int fd" "const char *mode"
 | |
| .Ft int
 | |
| .Fn gzsetparams "gzFile file" "int level" "int strategy"
 | |
| .Ft int
 | |
| .Fn gzread "gzFile file" "voidp buf" "unsigned len"
 | |
| .Ft int
 | |
| .Fn gzwrite "gzFile file" "const voidp buf" "unsigned len"
 | |
| .Ft int
 | |
| .Fn gzprintf "gzFile file" "const char *format" "..."
 | |
| .Ft int
 | |
| .Fn gzputs "gzFile file" "const char *s"
 | |
| .Ft char *
 | |
| .Fn gzgets "gzFile file" "char *buf" "int len"
 | |
| .Ft int
 | |
| .Fn gzputc "gzFile file" "int c"
 | |
| .Ft int
 | |
| .Fn gzgetc "gzFile file"
 | |
| .Ft int
 | |
| .Fn gzflush "gzFile file" "int flush"
 | |
| .Ft z_off_t
 | |
| .Fn gzseek "gzFile file" "z_off_t offset" "int whence"
 | |
| .Ft int
 | |
| .Fn gzrewind "gzFile file"
 | |
| .Ft z_off_t
 | |
| .Fn gztell "gzFile file"
 | |
| .Ft int
 | |
| .Fn gzeof "gzFile file"
 | |
| .Ft int
 | |
| .Fn gzclose "gzFile file"
 | |
| .Ft const char *
 | |
| .Fn gzerror "gzFile file" "int *errnum"
 | |
| .Ss Checksum functions
 | |
| .Ft uLong
 | |
| .Fn adler32 "uLong adler" "const Bytef *buf" "uInt len"
 | |
| .Ft uLong
 | |
| .Fn crc32 "uLong crc" "const Bytef *buf" "uInt len"
 | |
| .Sh DESCRIPTION
 | |
| This manual page describes the
 | |
| .Nm
 | |
| general purpose compression library, version 1.1.4.
 | |
| .Pp
 | |
| The
 | |
| .Nm
 | |
| 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
 | |
| .Pq deflation
 | |
| but other algorithms will be added later and will have the same
 | |
| stream interface.
 | |
| .Pp
 | |
| Compression can be done in a single step if the buffers are large enough
 | |
| .Pq 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
 | |
| .Pq providing more output space
 | |
| before each call.
 | |
| .Pp
 | |
| The library also supports reading and writing files in
 | |
| .Xr gzip 1
 | |
| .Pq .gz
 | |
| format with an interface similar to that of
 | |
| .Xr stdio 3 .
 | |
| .Pp
 | |
| 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.
 | |
| .Pp
 | |
| The functions within the library are divided into the following sections:
 | |
| .Pp
 | |
| .Bl -dash -offset indent -compact
 | |
| .It
 | |
| Basic functions
 | |
| .It
 | |
| Advanced functions
 | |
| .It
 | |
| Utility functions
 | |
| .It
 | |
| Checksum functions
 | |
| .El
 | |
| .Sh BASIC FUNCTIONS
 | |
| .Bl -tag -width Ds
 | |
| .It Fa const char * Fn zlibVersion "void" ;
 | |
| .Pp
 | |
| The application can compare
 | |
| .Fn zlibVersion
 | |
| and
 | |
| .Dv ZLIB_VERSION
 | |
| for consistency.
 | |
| If the first character differs, the library code actually used is
 | |
| not compatible with the
 | |
| .In zlib.h
 | |
| header file used by the application.
 | |
| This check is automatically made by
 | |
| .Fn deflateInit
 | |
| and
 | |
| .Fn inflateInit .
 | |
| .It Fa int Fn deflateInit "z_streamp strm" "int level" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn deflateInit
 | |
| function initializes the internal stream state for compression.
 | |
| The fields
 | |
| .Fa zalloc ,
 | |
| .Fa zfree ,
 | |
| and
 | |
| .Fa opaque
 | |
| must be initialized before by the caller.
 | |
| If
 | |
| .Fa zalloc
 | |
| and
 | |
| .Fa zfree
 | |
| are set to
 | |
| .Dv Z_NULL ,
 | |
| .Fn deflateInit
 | |
| updates them to use default allocation functions.
 | |
| .Pp
 | |
| The compression level must be
 | |
| .Dv 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).
 | |
| .Pp
 | |
| .Dv Z_DEFAULT_COMPRESSION
 | |
| requests a default compromise between speed and compression
 | |
| .Pq currently equivalent to level 6 .
 | |
| .Pp
 | |
| .Fn deflateInit
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if level is not a valid compression level,
 | |
| .Dv Z_VERSION_ERROR
 | |
| if the
 | |
| .Nm
 | |
| library version
 | |
| .Pq zlib_version
 | |
| is incompatible with the version assumed by the caller
 | |
| .Pq ZLIB_VERSION .
 | |
| .Fa msg
 | |
| is set to null if there is no error message.
 | |
| .Fn deflateInit
 | |
| does not perform any compression: this will be done by
 | |
| .Fn deflate .
 | |
| .It Fa int Fn deflate "z_streamp strm" "int flush" ;
 | |
| .Pp
 | |
| .Fn 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
 | |
| .Pq reading input without producing any output
 | |
| except when forced to flush.
 | |
| .Pp
 | |
| The detailed semantics are as follows.
 | |
| .Fn deflate
 | |
| performs one or both of the following actions:
 | |
| .Pp
 | |
| Compress more input starting at
 | |
| .Fa next_in
 | |
| and update
 | |
| .Fa next_in
 | |
| and
 | |
| .Fa avail_in
 | |
| accordingly.
 | |
| If not all input can be processed
 | |
| (because there is not enough room in the output buffer),
 | |
| .Fa next_in
 | |
| and
 | |
| .Fa avail_in
 | |
| are updated and processing will resume at this point for the next call to
 | |
| .Fn deflate .
 | |
| .Pp
 | |
| Provide more output starting at
 | |
| .Fa next_out
 | |
| and update
 | |
| .Fa next_out
 | |
| and
 | |
| .Fa avail_out
 | |
| accordingly.
 | |
| This action is forced if the parameter
 | |
| .Fa flush
 | |
| is non-zero.
 | |
| Forcing
 | |
| .Fa flush
 | |
| frequently degrades the compression ratio,
 | |
| so this parameter should be set only when necessary
 | |
| .Pq in interactive applications .
 | |
| Some output may be provided even if
 | |
| .Fa flush
 | |
| is not set.
 | |
| .Pp
 | |
| Before the call to
 | |
| .Fn 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
 | |
| .Fa avail_in
 | |
| or
 | |
| .Fa avail_out
 | |
| accordingly;
 | |
| .Fa 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
 | |
| .Pq avail_out == 0 ,
 | |
| or after each call to
 | |
| .Fn deflate .
 | |
| If
 | |
| .Fn deflate
 | |
| returns
 | |
| .Dv Z_OK
 | |
| and with zero
 | |
| .Fa avail_out ,
 | |
| it must be called again after making room in the
 | |
| output buffer because there might be more output pending.
 | |
| .Pp
 | |
| If the parameter
 | |
| .Fa flush
 | |
| is set to
 | |
| .Dv 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,
 | |
| .Fa 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.
 | |
| .Pp
 | |
| If
 | |
| .Fa flush
 | |
| is set to
 | |
| .Dv Z_FULL_FLUSH ,
 | |
| all output is flushed as with
 | |
| .Dv 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
 | |
| .Dv Z_FULL_FLUSH
 | |
| too often can seriously degrade the compression.
 | |
| .Pp
 | |
| If
 | |
| .Fn 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
 | |
| .Fa avail_out ) ,
 | |
| until the flush is complete
 | |
| .Pf ( Fn deflate
 | |
| returns with non-zero
 | |
| .Fa avail_out ) .
 | |
| .Pp
 | |
| If the parameter
 | |
| .Fa flush
 | |
| is set to
 | |
| .Dv Z_FINISH ,
 | |
| pending input is processed, pending output is flushed and
 | |
| .Fn deflate
 | |
| returns with
 | |
| .Dv Z_STREAM_END
 | |
| if there was enough output space; if
 | |
| .Fn deflate
 | |
| returns with
 | |
| .Dv Z_OK ,
 | |
| this function must be called again with
 | |
| .Dv Z_FINISH
 | |
| and more output space
 | |
| (updated
 | |
| .Fa avail_out
 | |
| but no more input data, until it returns with
 | |
| .Dv Z_STREAM_END
 | |
| or an error.
 | |
| After
 | |
| .Fn deflate
 | |
| has returned
 | |
| .Dv Z_STREAM_END ,
 | |
| the only possible operations on the stream are
 | |
| .Fn deflateReset
 | |
| or
 | |
| .Fn deflateEnd .
 | |
| .Pp
 | |
| .Dv Z_FINISH
 | |
| can be used immediately after
 | |
| .Fn deflateInit
 | |
| if all the compression is to be done in a single step.
 | |
| In this case,
 | |
| .Fa avail_out
 | |
| must be at least 0.1% larger than
 | |
| .Fa avail_in
 | |
| plus 12 bytes.
 | |
| If
 | |
| .Fn deflate
 | |
| does not return
 | |
| .Dv Z_STREAM_END ,
 | |
| then it must be called again as described above.
 | |
| .Pp
 | |
| .Fn deflate
 | |
| sets strm-\*[Gt]adler to the Adler-32 checksum of all input read so far
 | |
| (that is,
 | |
| .Fa total_in
 | |
| bytes).
 | |
| .Pp
 | |
| .Fn deflate
 | |
| may update
 | |
| .Fa data_type
 | |
| if it can make a good guess about the input data type
 | |
| .Pq 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.
 | |
| .Pp
 | |
| .Fn deflate
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if some progress has been made
 | |
| .Pq more input processed or more output produced ,
 | |
| .Dv Z_STREAM_END
 | |
| if all input has been consumed and all output has been produced
 | |
| (only when
 | |
| .Fa flush
 | |
| is set to
 | |
| .Dv Z_FINISH ) ,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the stream state was inconsistent
 | |
| (for example, if
 | |
| .Fa next_in
 | |
| or
 | |
| .Fa next_out
 | |
| was
 | |
| .Dv NULL ) ,
 | |
| .Dv Z_BUF_ERROR
 | |
| if no progress is possible
 | |
| (for example,
 | |
| .Fa avail_in
 | |
| or
 | |
| .Fa avail_out
 | |
| was zero).
 | |
| .It Fa int Fn deflateEnd "z_streamp strm" ;
 | |
| .Pp
 | |
| All dynamically allocated data structures for this stream are freed.
 | |
| This function discards any unprocessed input and does not flush any
 | |
| pending output.
 | |
| .Pp
 | |
| .Fn deflateEnd
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the stream state was inconsistent,
 | |
| .Dv Z_DATA_ERROR
 | |
| if the stream was freed prematurely
 | |
| .Pq some input or output was discarded .
 | |
| In the error case,
 | |
| .Fa msg
 | |
| may be set but then points to a static string
 | |
| .Pq which must not be deallocated .
 | |
| .It Fa int Fn inflateInit "z_streamp strm" ;
 | |
| The
 | |
| .Fn inflateInit
 | |
| function initializes the internal stream state for decompression.
 | |
| The fields
 | |
| .Fa next_in ,
 | |
| .Fa avail_in ,
 | |
| .Fa zalloc ,
 | |
| .Fa zfree ,
 | |
| and
 | |
| .Fa opaque
 | |
| must be initialized before by the caller.
 | |
| If
 | |
| .Fa next_in
 | |
| is not
 | |
| .Dv Z_NULL
 | |
| and
 | |
| .Fa avail_in
 | |
| is large enough
 | |
| .Pq the exact value depends on the compression method ,
 | |
| .Fn inflateInit
 | |
| determines the compression method from the
 | |
| .Nm
 | |
| header and allocates all data structures accordingly;
 | |
| otherwise the allocation will be deferred to the first call to
 | |
| .Fn inflate .
 | |
| If
 | |
| .Fa zalloc
 | |
| and
 | |
| .Fa zfree
 | |
| are set to
 | |
| .Dv Z_NULL ,
 | |
| .Fn inflateInit
 | |
| updates them to use default allocation functions.
 | |
| .Pp
 | |
| .Fn inflateInit
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_VERSION_ERROR
 | |
| if the
 | |
| .Nm
 | |
| library version is incompatible with the version assumed by the caller.
 | |
| .Fa msg
 | |
| is set to null if there is no error message.
 | |
| .Fn inflateInit
 | |
| does not perform any decompression apart from reading the
 | |
| .Nm
 | |
| header if present: this will be done by
 | |
| .Fn inflate .
 | |
| (So
 | |
| .Fa next_in
 | |
| and
 | |
| .Fa avail_in
 | |
| may be modified,
 | |
| but
 | |
| .Fa next_out
 | |
| and
 | |
| .Fa avail_out
 | |
| are unchanged.)
 | |
| .It Fa int Fn inflate "z_streamp strm" "int flush" ;
 | |
| .Fn 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
 | |
| .Pq reading input without producing any output
 | |
| except when forced to flush.
 | |
| .Pp
 | |
| The detailed semantics are as follows.
 | |
| .Fn inflate
 | |
| performs one or both of the following actions:
 | |
| .Pp
 | |
| Decompress more input starting at
 | |
| .Fa next_in
 | |
| and update
 | |
| .Fa next_in
 | |
| and
 | |
| .Fa avail_in
 | |
| accordingly.
 | |
| If not all input can be processed
 | |
| (because there is not enough room in the output buffer),
 | |
| .Fa next_in
 | |
| is updated and processing will resume at this point for the next call to
 | |
| .Fn inflate .
 | |
| .Pp
 | |
| Provide more output starting at
 | |
| .Fa next_out
 | |
| and update
 | |
| .Fa next_out
 | |
| and
 | |
| .Fa avail_out
 | |
| accordingly.
 | |
| .Fn inflate
 | |
| provides as much output as possible,
 | |
| until there is no more input data or no more space in the output buffer
 | |
| .Pq see below about the flush parameter .
 | |
| .Pp
 | |
| Before the call to
 | |
| .Fn 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
 | |
| .Fn inflate .
 | |
| If
 | |
| .Fn inflate
 | |
| returns
 | |
| .Dv Z_OK
 | |
| and with zero
 | |
| .Fa avail_out ,
 | |
| it must be called again after making room
 | |
| in the output buffer because there might be more output pending.
 | |
| .Pp
 | |
| If the parameter
 | |
| .Fa flush
 | |
| is set to
 | |
| .Dv Z_SYNC_FLUSH ,
 | |
| .Fn inflate
 | |
| flushes as much output as possible to the output buffer.
 | |
| The flushing behavior of
 | |
| .Fn inflate
 | |
| is not specified for values of the flush parameter other than
 | |
| .Dv Z_SYNC_FLUSH
 | |
| and
 | |
| .Dv Z_FINISH ,
 | |
| but the current implementation actually flushes as much output
 | |
| as possible anyway.
 | |
| .Pp
 | |
| .Fn inflate
 | |
| should normally be called until it returns
 | |
| .Dv Z_STREAM_END
 | |
| or an error.
 | |
| However if all decompression is to be performed in a single step
 | |
| .Pq a single call to inflate ,
 | |
| the parameter
 | |
| .Fa flush
 | |
| should be set to
 | |
| .Dv Z_FINISH .
 | |
| In this case all pending input is processed and all pending output is flushed;
 | |
| .Fa 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
 | |
| .Fn inflateEnd
 | |
| to deallocate the decompression state.
 | |
| The use of
 | |
| .Dv Z_FINISH
 | |
| is never required, but can be used to inform
 | |
| .Fn inflate
 | |
| that a faster routine may be used for the single
 | |
| .Fn inflate
 | |
| call.
 | |
| .Pp
 | |
| If a preset dictionary is needed at this point (see
 | |
| .Fn inflateSetDictionary
 | |
| below),
 | |
| .Fn inflate
 | |
| sets strm-\*[Gt]adler to the Adler-32 checksum of the dictionary
 | |
| chosen by the compressor and returns
 | |
| .Dv Z_NEED_DICT ;
 | |
| otherwise it sets strm-\*[Gt]adler to the Adler-32 checksum of all output produced
 | |
| so far
 | |
| (that is,
 | |
| .Fa total_out
 | |
| bytes)
 | |
| and returns
 | |
| .Dv Z_OK ,
 | |
| .Dv Z_STREAM_END ,
 | |
| or an error code as described below.
 | |
| At the end of the stream,
 | |
| .Fn inflate
 | |
| checks that its computed Adler-32 checksum is equal to that saved by the
 | |
| compressor and returns
 | |
| .Dv Z_STREAM_END
 | |
| only if the checksum is correct.
 | |
| .Pp
 | |
| .Fn inflate
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if some progress has been made
 | |
| .Pq more input processed or more output produced ,
 | |
| .Dv Z_STREAM_END
 | |
| if the end of the compressed data has been reached and all uncompressed output
 | |
| has been produced,
 | |
| .Dv Z_NEED_DICT
 | |
| if a preset dictionary is needed at this point,
 | |
| .Dv Z_DATA_ERROR
 | |
| if the input data was corrupted (input stream not conforming to the
 | |
| .Nm
 | |
| format or incorrect Adler-32 checksum),
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the stream structure was inconsistent
 | |
| (for example, if
 | |
| .Fa next_in
 | |
| or
 | |
| .Fa next_out
 | |
| was
 | |
| .Dv NULL ) ,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_BUF_ERROR
 | |
| if no progress is possible or if there was not enough room in the output buffer
 | |
| when
 | |
| .Dv Z_FINISH
 | |
| is used.
 | |
| In the
 | |
| .Dv Z_DATA_ERROR
 | |
| case, the application may then call
 | |
| .Fn inflateSync
 | |
| to look for a good compression block.
 | |
| .It Fa int Fn 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.
 | |
| .Pp
 | |
| .Fn inflateEnd
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful, or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the stream state was inconsistent.
 | |
| In the error case,
 | |
| .Fa msg
 | |
| may be set but then points to a static string
 | |
| .Pq which must not be deallocated .
 | |
| .El
 | |
| .Sh ADVANCED FUNCTIONS
 | |
| The following functions are needed only in some special applications.
 | |
| .Bl -tag -width Ds
 | |
| .It Fa int Fn deflateInit2 "z_streamp strm" "int level" "int method" \
 | |
| "int windowBits" "int memLevel" "int strategy" ;
 | |
| .Pp
 | |
| This is another version of
 | |
| .Fn deflateInit
 | |
| with more compression options.
 | |
| The fields
 | |
| .Fa next_in ,
 | |
| .Fa zalloc ,
 | |
| .Fa zfree ,
 | |
| and
 | |
| .Fa opaque
 | |
| must be initialized before by the caller.
 | |
| .Pp
 | |
| The
 | |
| .Fa method
 | |
| parameter is the compression method.
 | |
| It must be
 | |
| .Dv Z_DEFLATED
 | |
| in this version of the library.
 | |
| .Pp
 | |
| The
 | |
| .Fa windowBits
 | |
| parameter is the base two logarithm of the window size
 | |
| .Pq 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
 | |
| .Fn deflateInit
 | |
| is used instead.
 | |
| .Pp
 | |
| The
 | |
| .Fa 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
 | |
| .In zconf.h
 | |
| for total memory usage as a function of
 | |
| .Fa windowBits
 | |
| and
 | |
| .Fa memLevel .
 | |
| .Pp
 | |
| The
 | |
| .Fa strategy
 | |
| parameter is used to tune the compression algorithm.
 | |
| Use the value
 | |
| .Dv Z_DEFAULT_STRATEGY
 | |
| for normal data;
 | |
| .Dv Z_FILTERED
 | |
| for data produced by a filter
 | |
| .Pq or predictor ;
 | |
| or
 | |
| .Dv Z_HUFFMAN_ONLY
 | |
| to force Huffman encoding only
 | |
| .Pq no string match .
 | |
| 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
 | |
| .Dv Z_FILTERED
 | |
| is to force more Huffman coding and less string matching;
 | |
| it is somewhat intermediate between
 | |
| .Dv Z_DEFAULT
 | |
| and
 | |
| .Dv Z_HUFFMAN_ONLY .
 | |
| The
 | |
| .Fa strategy
 | |
| parameter only affects the compression ratio but not the correctness of the
 | |
| compressed output, even if it is not set appropriately.
 | |
| .Pp
 | |
| .Fn deflateInit2
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if a parameter is invalid
 | |
| .Pq such as an invalid method .
 | |
| .Fa msg
 | |
| is set to null if there is no error message.
 | |
| .Fn deflateInit2
 | |
| does not perform any compression: this will be done by
 | |
| .Fn deflate .
 | |
| .It Fa int Fn deflateSetDictionary "z_streamp strm" \
 | |
| "const Bytef *dictionary" "uInt dictLength" ;
 | |
| .Pp
 | |
| Initializes the compression dictionary from the given byte sequence
 | |
| without producing any compressed output.
 | |
| This function must be called immediately after
 | |
| .Fn deflateInit ,
 | |
| .Fn deflateInit2 ,
 | |
| or
 | |
| .Fn deflateReset ,
 | |
| before any call to
 | |
| .Fn deflate .
 | |
| The compressor and decompressor must use exactly the same dictionary
 | |
| (see
 | |
| .Fn inflateSetDictionary ) .
 | |
| .Pp
 | |
| The dictionary should consist of strings
 | |
| .Pq 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.
 | |
| .Pp
 | |
| Depending on the size of the compression data structures selected by
 | |
| .Fn deflateInit
 | |
| or
 | |
| .Fn deflateInit2 ,
 | |
| a part of the dictionary may in effect be discarded,
 | |
| for example if the dictionary is larger than the window size in
 | |
| .Fn deflate
 | |
| or
 | |
| .Fn deflate2 .
 | |
| Thus the strings most likely to be useful should be
 | |
| put at the end of the dictionary, not at the front.
 | |
| .Pp
 | |
| Upon return of this function, strm-\*[Gt]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.)
 | |
| .Pp
 | |
| .Fn deflateSetDictionary
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if a parameter is invalid
 | |
| .Pq such as NULL dictionary
 | |
| or the stream state is inconsistent
 | |
| (for example if
 | |
| .Fn deflate
 | |
| has already been called for this stream or if the compression method is bsort).
 | |
| .Fn deflateSetDictionary
 | |
| does not perform any compression: this will be done by
 | |
| .Fn deflate .
 | |
| .It Fa int Fn deflateCopy "z_streamp dest" "z_streamp source" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn deflateCopy
 | |
| function sets the destination stream as a complete copy of the source stream.
 | |
| .Pp
 | |
| This function can be useful when several compression strategies will be
 | |
| tried, for example when there are several ways of pre-processing the input
 | |
| data with a filter.
 | |
| The streams that will be discarded should then be freed by calling
 | |
| .Fn deflateEnd .
 | |
| Note that
 | |
| .Fn deflateCopy
 | |
| duplicates the internal compression state which can be quite large,
 | |
| so this strategy is slow and can consume lots of memory.
 | |
| .Pp
 | |
| .Fn deflateCopy
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the source stream state was inconsistent
 | |
| (such as
 | |
| .Fa zalloc
 | |
| being NULL).
 | |
| .Fa msg
 | |
| is left unchanged in both source and destination.
 | |
| .It Fa int Fn deflateReset "z_streamp strm" ;
 | |
| .Pp
 | |
| This function is equivalent to
 | |
| .Fn deflateEnd
 | |
| followed by
 | |
| .Fn 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
 | |
| .Fn deflateInit2 .
 | |
| .Pp
 | |
| .Fn deflateReset
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful, or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the source stream state was inconsistent
 | |
| (such as
 | |
| .Fa zalloc
 | |
| or
 | |
| .Fa state
 | |
| being NULL).
 | |
| .It Fa int Fn deflateParams "z_streamp strm" "int level" "int strategy" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn deflateParams
 | |
| function dynamically updates the compression level and compression strategy.
 | |
| The interpretation of level and strategy is as in
 | |
| .Fn 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
 | |
| .Pq and may be flushed ;
 | |
| the new level will take effect only at the next call to
 | |
| .Fn deflate .
 | |
| .Pp
 | |
| Before the call to
 | |
| .Fn deflateParams ,
 | |
| the stream state must be set as for a call to
 | |
| .Fn deflate ,
 | |
| since the currently available input may have to be compressed and flushed.
 | |
| In particular, strm-\*[Gt]avail_out must be non-zero.
 | |
| .Pp
 | |
| .Fn deflateParams
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the source stream state was inconsistent or if a parameter was invalid, or
 | |
| .Dv Z_BUF_ERROR
 | |
| if strm-\*[Gt]avail_out was zero.
 | |
| .It Fa int Fn inflateInit2 "z_streamp strm" "int windowBits" ;
 | |
| .Pp
 | |
| This is another version of
 | |
| .Fn inflateInit
 | |
| with an extra parameter.
 | |
| The fields
 | |
| .Fa next_in ,
 | |
| .Fa avail_in ,
 | |
| .Fa zalloc ,
 | |
| .Fa zfree ,
 | |
| and
 | |
| .Fa opaque
 | |
| must be initialized before by the caller.
 | |
| .Pp
 | |
| The
 | |
| .Fa windowBits
 | |
| parameter is the base two logarithm of the maximum window size
 | |
| .Pq 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
 | |
| .Fn inflateInit
 | |
| is used instead.
 | |
| If a compressed stream with a larger window size is given as input,
 | |
| .Fn inflate
 | |
| will return with the error code
 | |
| .Dv Z_DATA_ERROR
 | |
| instead of trying to allocate a larger window.
 | |
| .Pp
 | |
| .Fn inflateInit2
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if a parameter is invalid
 | |
| (such as a negative
 | |
| .Fa memLevel ) .
 | |
| .Fa msg
 | |
| is set to null if there is no error message.
 | |
| .Fn inflateInit2
 | |
| does not perform any decompression apart from reading the
 | |
| .Nm
 | |
| header if present: this will be done by
 | |
| .Fn inflate .
 | |
| (So
 | |
| .Fa next_in
 | |
| and
 | |
| .Fa avail_in
 | |
| may be modified, but
 | |
| .Fa next_out
 | |
| and
 | |
| .Fa avail_out
 | |
| are unchanged.)
 | |
| .It Fa int Fn inflateSetDictionary "z_streamp strm" \
 | |
| "const Bytef *dictionary" "uInt dictLength" ;
 | |
| .Pp
 | |
| Initializes the decompression dictionary from the given uncompressed byte
 | |
| sequence.
 | |
| This function must be called immediately after a call to
 | |
| .Fn inflate
 | |
| if this call returned
 | |
| .Dv Z_NEED_DICT .
 | |
| The dictionary chosen by the compressor can be determined from the
 | |
| Adler-32 value returned by this call to
 | |
| .Fn inflate .
 | |
| The compressor and decompressor must use exactly the same dictionary
 | |
| (see
 | |
| .Fn deflateSetDictionary ) .
 | |
| .Pp
 | |
| .Fn inflateSetDictionary
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_STREAM_ERROR
 | |
| if a parameter is invalid
 | |
| .Pq such as NULL dictionary
 | |
| or the stream state is inconsistent,
 | |
| .Dv Z_DATA_ERROR
 | |
| if the given dictionary doesn't match the expected one
 | |
| .Pq incorrect Adler-32 value .
 | |
| .Fn inflateSetDictionary
 | |
| does not perform any decompression: this will be done by subsequent calls of
 | |
| .Fn inflate .
 | |
| .It Fa int Fn inflateSync "z_streamp strm" ;
 | |
| .Pp
 | |
| Skips invalid compressed data until a full flush point
 | |
| (see above the description of
 | |
| .Fn deflate
 | |
| with
 | |
| .Dv Z_FULL_FLUSH )
 | |
| can be found, or until all available input is skipped.
 | |
| No output is provided.
 | |
| .Pp
 | |
| .Fn inflateSync
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if a full flush point has been found,
 | |
| .Dv Z_BUF_ERROR
 | |
| if no more input was provided,
 | |
| .Dv Z_DATA_ERROR
 | |
| if no flush point has been found, or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the stream structure was inconsistent.
 | |
| In the success case, the application may save the current value of
 | |
| .Fa total_in
 | |
| which indicates where valid compressed data was found.
 | |
| In the error case, the application may repeatedly call
 | |
| .Fn inflateSync ,
 | |
| providing more input each time, until success or end of the input data.
 | |
| .It Fa int Fn inflateReset "z_streamp strm" ;
 | |
| .Pp
 | |
| This function is equivalent to
 | |
| .Fn inflateEnd
 | |
| followed by
 | |
| .Fn inflateInit ,
 | |
| but does not free and reallocate all the internal decompression state.
 | |
| The stream will keep attributes that may have been set by
 | |
| .Fn inflateInit2 .
 | |
| .Pp
 | |
| .Fn inflateReset
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful, or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the source stream state was inconsistent
 | |
| (such as
 | |
| .Fa zalloc
 | |
| or
 | |
| .Fa state
 | |
| being NULL).
 | |
| .El
 | |
| .Sh UTILITY FUNCTIONS
 | |
| 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.
 | |
| .Bl -tag -width Ds
 | |
| .It Fa int Fn compress "Bytef *dest" "uLongf *destLen" \
 | |
| "const Bytef *source" "uLong sourceLen" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn compress
 | |
| function compresses the source buffer into the destination buffer.
 | |
| .Fa sourceLen
 | |
| is the byte length of the source buffer.
 | |
| Upon entry,
 | |
| .Fa destLen
 | |
| is the total size of the destination buffer,
 | |
| which must be at least 0.1% larger than
 | |
| .Fa sourceLen
 | |
| plus 12 bytes.
 | |
| Upon exit,
 | |
| .Fa 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.
 | |
| .Pp
 | |
| .Fn compress
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory, or
 | |
| .Dv Z_BUF_ERROR
 | |
| if there was not enough room in the output buffer.
 | |
| .It Fa int Fn compress2 "Bytef *dest" "uLongf *destLen" \
 | |
| "const Bytef *source" "uLong sourceLen" "int level" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn compress2
 | |
| function compresses the source buffer into the destination buffer.
 | |
| The
 | |
| .Fa level
 | |
| parameter has the same meaning as in
 | |
| .Fn deflateInit .
 | |
| .Fa sourceLen
 | |
| is the byte length of the source buffer.
 | |
| Upon entry,
 | |
| .Fa destLen
 | |
| is the total size of the destination buffer,
 | |
| which must be at least 0.1% larger than
 | |
| .Fa sourceLen
 | |
| plus 12 bytes.
 | |
| Upon exit,
 | |
| .Fa destLen
 | |
| is the actual size of the compressed buffer.
 | |
| .Pp
 | |
| .Fn compress2
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_BUF_ERROR
 | |
| if there was not enough room in the output buffer, or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the level parameter is invalid.
 | |
| .It Fa int Fn uncompress "Bytef *dest" "uLongf *destLen" \
 | |
| "const Bytef *source" "uLong sourceLen" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn uncompress
 | |
| function decompresses the source buffer into the destination buffer.
 | |
| .Fa sourceLen
 | |
| is the byte length of the source buffer.
 | |
| Upon entry,
 | |
| .Fa 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,
 | |
| .Fa 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.
 | |
| .Pp
 | |
| .Fn uncompress
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful,
 | |
| .Dv Z_MEM_ERROR
 | |
| if there was not enough memory,
 | |
| .Dv Z_BUF_ERROR
 | |
| if there was not enough room in the output buffer, or
 | |
| .Dv Z_DATA_ERROR
 | |
| if the input data was corrupted.
 | |
| .It Fa gzFile Fn gzopen "const char *path" "const char *mode" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzopen
 | |
| function opens a gzip
 | |
| .Pq .gz
 | |
| file for reading or writing.
 | |
| The mode parameter is as in
 | |
| .Xr fopen 3
 | |
| .Po
 | |
| .Qq rb
 | |
| or
 | |
| .Qq wb
 | |
| .Pc
 | |
| but can also include a compression level
 | |
| .Pq Qq wb9
 | |
| or a strategy:
 | |
| .Sq f
 | |
| for filtered data, as in
 | |
| .Qq wb6f ;
 | |
| .Sq h
 | |
| for Huffman only compression, as in
 | |
| .Qq wb1h .
 | |
| (See the description of
 | |
| .Fn deflateInit2
 | |
| for more information about the strategy parameter.)
 | |
| .Pp
 | |
| .Fn gzopen
 | |
| can be used to read a file which is not in gzip format;
 | |
| in this case
 | |
| .Fn gzread
 | |
| will directly read from the file without decompression.
 | |
| .Pp
 | |
| .Fn gzopen
 | |
| returns
 | |
| .Dv 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
 | |
| .Nm
 | |
| error is
 | |
| .Dv Z_MEM_ERROR ) .
 | |
| .It Fa gzFile Fn gzdopen "int fd" "const char *mode" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzdopen
 | |
| function associates a gzFile with the file descriptor
 | |
| .Fa fd .
 | |
| File descriptors are obtained from calls like
 | |
| .Xr open 2 ,
 | |
| .Xr dup 2 ,
 | |
| .Xr creat 3 ,
 | |
| .Xr pipe 2 ,
 | |
| or
 | |
| .Xr fileno 3
 | |
| (if the file has been previously opened with
 | |
| .Xr fopen 3 ) .
 | |
| The
 | |
| .Fa mode
 | |
| parameter is as in
 | |
| .Fn gzopen .
 | |
| .Pp
 | |
| The next call to
 | |
| .Fn 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).
 | |
| .Pp
 | |
| .Fn gzdopen
 | |
| returns
 | |
| .Dv NULL
 | |
| if there was insufficient memory to allocate the (de)compression state.
 | |
| .It Fa int Fn gzsetparams "gzFile file" "int level" "int strategy" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzsetparams
 | |
| function dynamically updates the compression level or strategy.
 | |
| See the description of
 | |
| .Fn deflateInit2
 | |
| for the meaning of these parameters.
 | |
| .Pp
 | |
| .Fn gzsetparams
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if successful, or
 | |
| .Dv Z_STREAM_ERROR
 | |
| if the file was not opened for writing.
 | |
| .It Fa int Fn gzread "gzFile file" "voidp buf" "unsigned len" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzread
 | |
| function reads the given number of uncompressed bytes from the compressed file.
 | |
| If the input file was not in gzip format,
 | |
| .Fn gzread
 | |
| copies the given number of bytes into the buffer.
 | |
| .Pp
 | |
| .Fn gzread
 | |
| returns the number of uncompressed bytes actually read
 | |
| (0 for end of file, \-1 for error).
 | |
| .It Fa int Fn gzwrite "gzFile file" "const voidp buf" "unsigned len" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzwrite
 | |
| function writes the given number of uncompressed bytes into the compressed file.
 | |
| .Fn gzwrite
 | |
| returns the number of uncompressed bytes actually written
 | |
| .Pq 0 in case of error .
 | |
| .It Fa int Fn gzprintf "gzFile file" "const char *format" "..." ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzprintf
 | |
| function converts, formats, and writes the args to the compressed file
 | |
| under control of the format string, as in
 | |
| .Xr fprintf 3 .
 | |
| .Fn gzprintf
 | |
| returns the number of uncompressed bytes actually written
 | |
| .Pq 0 in case of error .
 | |
| .It Fa int Fn gzputs "gzFile file" "const char *s" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzputs
 | |
| function writes the given null-terminated string to the compressed file,
 | |
| excluding the terminating null character.
 | |
| .Pp
 | |
| .Fn gzputs
 | |
| returns the number of characters written, or \-1 in case of error.
 | |
| .It Fa char * Fn gzgets "gzFile file" "char *buf" "int len" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzgets
 | |
| function reads bytes from the compressed file until len\-1 characters are read,
 | |
| or a newline character is read and transferred to
 | |
| .Fa buf ,
 | |
| or an end-of-file condition is encountered.
 | |
| The string is then terminated with a null character.
 | |
| .Pp
 | |
| .Fn gzgets
 | |
| returns
 | |
| .Fa buf ,
 | |
| or
 | |
| .Dv Z_NULL
 | |
| in case of error.
 | |
| .It Fa int Fn gzputc "gzFile file" "int c" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzputc
 | |
| function writes
 | |
| .Fa c ,
 | |
| converted to an unsigned char, into the compressed file.
 | |
| .Fn gzputc
 | |
| returns the value that was written, or \-1 in case of error.
 | |
| .It Fa int Fn gzgetc "gzFile file" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzgetc
 | |
| function reads one byte from the compressed file.
 | |
| .Fn gzgetc
 | |
| returns this byte or \-1 in case of end of file or error.
 | |
| .It Fa int Fn gzflush "gzFile file" "int flush" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzflush
 | |
| function flushes all pending output into the compressed file.
 | |
| The parameter
 | |
| .Fa flush
 | |
| is as in the
 | |
| .Fn deflate
 | |
| function.
 | |
| The return value is the
 | |
| .Nm
 | |
| error number (see function
 | |
| .Fn gzerror
 | |
| below).
 | |
| .Fn gzflush
 | |
| returns
 | |
| .Dv Z_OK
 | |
| if the flush parameter is
 | |
| .Dv Z_FINISH
 | |
| and all output could be flushed.
 | |
| .Pp
 | |
| .Fn gzflush
 | |
| should be called only when strictly necessary because it can
 | |
| degrade compression.
 | |
| .It Fa z_off_t Fn gzseek "gzFile file" "z_off_t offset" "int whence" ;
 | |
| .Pp
 | |
| Sets the starting position for the next
 | |
| .Fn gzread
 | |
| or
 | |
| .Fn gzwrite
 | |
| on the given compressed file.
 | |
| The offset represents a number of bytes in the uncompressed data stream.
 | |
| The whence parameter is defined as in
 | |
| .Xr lseek 2 ;
 | |
| the value
 | |
| .Dv SEEK_END
 | |
| is not supported.
 | |
| .Pp
 | |
| If the file is opened for reading, this function is emulated but can be
 | |
| extremely slow.
 | |
| If the file is opened for writing, only forward seeks are supported;
 | |
| .Fn gzseek
 | |
| then compresses a sequence of zeroes up to the new starting position.
 | |
| .Pp
 | |
| .Fn gzseek
 | |
| returns the resulting offset location as measured in bytes from
 | |
| the beginning of the uncompressed stream, or \-1 in case of error,
 | |
| in particular if the file is opened for writing and the new starting position
 | |
| would be before the current position.
 | |
| .It Fa int Fn gzrewind "gzFile file" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzrewind
 | |
| function rewinds the given
 | |
| .Fa file .
 | |
| This function is supported only for reading.
 | |
| .Pp
 | |
| gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET).
 | |
| .It Fa z_off_t Fn gztell "gzFile file" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gztell
 | |
| function returns the starting position for the next
 | |
| .Fn gzread
 | |
| or
 | |
| .Fn gzwrite
 | |
| on the given compressed file.
 | |
| This position represents a number of bytes in the uncompressed data stream.
 | |
| .Pp
 | |
| gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR).
 | |
| .It Fa int Fn gzeof "gzFile file" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzeof
 | |
| function returns 1 when
 | |
| .Dv EOF
 | |
| has previously been detected reading the given input stream, otherwise zero.
 | |
| .It Fa int Fn gzclose "gzFile file" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzclose
 | |
| function flushes all pending output if necessary, closes the compressed file
 | |
| and deallocates all the (de)compression state.
 | |
| The return value is the
 | |
| .Nm
 | |
| error number (see function
 | |
| .Fn gzerror
 | |
| below).
 | |
| .It Fa const char * Fn gzerror "gzFile file" "int *errnum" ;
 | |
| .Pp
 | |
| The
 | |
| .Fn gzerror
 | |
| function returns the error message for the last error which occurred on the
 | |
| given compressed
 | |
| .Fa file .
 | |
| .Fa errnum
 | |
| is set to the
 | |
| .Nm
 | |
| error number.
 | |
| If an error occurred in the file system and not in the compression library,
 | |
| .Fa errnum
 | |
| is set to
 | |
| .Dv Z_ERRNO
 | |
| and the application may consult errno to get the exact error code.
 | |
| .El
 | |
| .Sh CHECKSUM FUNCTIONS
 | |
| These functions are not related to compression but are exported
 | |
| anyway because they might be useful in applications using the
 | |
| compression library.
 | |
| .Bl -tag -width Ds
 | |
| .It Fa uLong Fn adler32 "uLong adler" "const Bytef *buf" "uInt len" ;
 | |
| The
 | |
| .Fn adler32
 | |
| function updates a running Adler-32 checksum with the bytes buf[0..len-1]
 | |
| and returns the updated checksum.
 | |
| If
 | |
| .Fa buf
 | |
| is
 | |
| .Dv NULL ,
 | |
| this function returns the required initial value for the checksum.
 | |
| .Pp
 | |
| An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
 | |
| much faster.
 | |
| Usage example:
 | |
| .Bd -literal -offset indent
 | |
| uLong adler = adler32(0L, Z_NULL, 0);
 | |
| 
 | |
| while (read_buffer(buffer, length) != EOF) {
 | |
| adler = adler32(adler, buffer, length);
 | |
| }
 | |
| if (adler != original_adler) error();
 | |
| .Ed
 | |
| .It Fa uLong Fn crc32 "uLong crc" "const Bytef *buf" "uInt len" ;
 | |
| The
 | |
| .Fn crc32
 | |
| function updates a running CRC with the bytes buf[0..len-1]
 | |
| and returns the updated CRC.
 | |
| If
 | |
| .Fa buf
 | |
| is
 | |
| .Dv NULL ,
 | |
| this function returns the required initial value for the CRC.
 | |
| Pre- and post-conditioning
 | |
| .Pq one's complement
 | |
| is performed within this function so it shouldn't be done by the application.
 | |
| Usage example:
 | |
| .Bd -literal -offset indent
 | |
| uLong crc = crc32(0L, Z_NULL, 0);
 | |
| 
 | |
| while (read_buffer(buffer, length) != EOF) {
 | |
| crc = crc32(crc, buffer, length);
 | |
| }
 | |
| if (crc != original_crc) error();
 | |
| .Ed
 | |
| .El
 | |
| .Sh STRUCTURES
 | |
| .Bd -literal
 | |
| struct internal_state;
 | |
| 
 | |
| typedef struct z_stream_s {
 | |
|     Bytef    *next_in;  /* next input byte */
 | |
|     uInt     avail_in;  /* number of bytes available at next_in */
 | |
|     uLong    total_in;  /* total nb of input bytes read so far */
 | |
| 
 | |
|     Bytef    *next_out; /* next output byte should be put there */
 | |
|     uInt     avail_out; /* remaining free space at next_out */
 | |
|     uLong    total_out; /* total nb of bytes output so far */
 | |
| 
 | |
|     char     *msg;      /* last error message, NULL if no error */
 | |
|     struct internal_state FAR *state; /* not visible by applications */
 | |
| 
 | |
|     alloc_func zalloc;  /* used to allocate the internal state */
 | |
|     free_func  zfree;   /* used to free the internal state */
 | |
|     voidpf     opaque;  /* private data object passed to zalloc and zfree*/
 | |
| 
 | |
|     int     data_type;  /*best guess about the data type: ascii or binary*/
 | |
|     uLong   adler;      /* Adler-32 value of the uncompressed data */
 | |
|     uLong   reserved;   /* reserved for future use */
 | |
| } z_stream;
 | |
| 
 | |
| typedef z_stream FAR * z_streamp;
 | |
| .Ed
 | |
| .Pp
 | |
| The application must update
 | |
| .Fa next_in
 | |
| and
 | |
| .Fa avail_in
 | |
| when
 | |
| .Fa avail_in
 | |
| has dropped to zero.
 | |
| It must update
 | |
| .Fa next_out
 | |
| and
 | |
| .Fa avail_out
 | |
| when
 | |
| .Fa avail_out
 | |
| has dropped to zero.
 | |
| The application must initialize
 | |
| .Fa zalloc ,
 | |
| .Fa zfree ,
 | |
| and
 | |
| .Fa opaque
 | |
| before calling the init function.
 | |
| All other fields are set by the compression library
 | |
| and must not be updated by the application.
 | |
| .Pp
 | |
| The
 | |
| .Fa opaque
 | |
| value provided by the application will be passed as the first
 | |
| parameter for calls to
 | |
| .Fn zalloc
 | |
| and
 | |
| .Fn zfree .
 | |
| This can be useful for custom memory management.
 | |
| The compression library attaches no meaning to the
 | |
| .Fa opaque
 | |
| value.
 | |
| .Pp
 | |
| .Fa zalloc
 | |
| must return
 | |
| .Dv Z_NULL
 | |
| if there is not enough memory for the object.
 | |
| If
 | |
| .Nm
 | |
| is used in a multi-threaded application,
 | |
| .Fa zalloc
 | |
| and
 | |
| .Fa zfree
 | |
| must be thread safe.
 | |
| .Pp
 | |
| On 16-bit systems, the functions
 | |
| .Fa zalloc
 | |
| and
 | |
| .Fa zfree
 | |
| must be able to allocate exactly 65536 bytes,
 | |
| but will not be required to allocate more than this if the symbol MAXSEG_64K
 | |
| is defined (see
 | |
| .In zconf.h ) .
 | |
| .Pp
 | |
| WARNING: On MSDOS, pointers returned by
 | |
| .Fa zalloc
 | |
| for objects of exactly 65536 bytes *must* have their offset normalized to zero.
 | |
| The default allocation function provided by this library ensures this (see
 | |
| .Pa zutil.c ) .
 | |
| To reduce memory requirements and avoid any allocation of 64K objects,
 | |
| at the expense of compression ratio,
 | |
| compile the library with -DMAX_WBITS=14 (see
 | |
| .In zconf.h ) .
 | |
| .Pp
 | |
| The fields
 | |
| .Fa total_in
 | |
| and
 | |
| .Fa total_out
 | |
| can be used for statistics or progress reports.
 | |
| After compression,
 | |
| .Fa total_in
 | |
| holds the total size of the uncompressed data and may be saved for use
 | |
| in the decompressor
 | |
| (particularly if the decompressor wants to decompress everything
 | |
| in a single step).
 | |
| .Sh CONSTANTS
 | |
| .Bd -literal
 | |
| #define Z_NO_FLUSH      0
 | |
| #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
 | |
| #define Z_SYNC_FLUSH    2
 | |
| #define Z_FULL_FLUSH    3
 | |
| #define Z_FINISH        4
 | |
| /* Allowed flush values; see deflate() below for details */
 | |
| 
 | |
| #define Z_OK            0
 | |
| #define Z_STREAM_END    1
 | |
| #define Z_NEED_DICT     2
 | |
| #define Z_ERRNO        (-1)
 | |
| #define Z_STREAM_ERROR (-2)
 | |
| #define Z_DATA_ERROR   (-3)
 | |
| #define Z_MEM_ERROR    (-4)
 | |
| #define Z_BUF_ERROR    (-5)
 | |
| #define Z_VERSION_ERROR (-6)
 | |
| /* Return codes for the compression/decompression functions.
 | |
|  * Negative values are errors,
 | |
|  * positive values are used for special but normal events.
 | |
|  */
 | |
| 
 | |
| #define Z_NO_COMPRESSION         0
 | |
| #define Z_BEST_SPEED             1
 | |
| #define Z_BEST_COMPRESSION       9
 | |
| #define Z_DEFAULT_COMPRESSION  (-1)
 | |
| /* compression levels */
 | |
| 
 | |
| #define Z_FILTERED            1
 | |
| #define Z_HUFFMAN_ONLY        2
 | |
| #define Z_DEFAULT_STRATEGY    0
 | |
| /* compression strategy; see deflateInit2() below for details */
 | |
| 
 | |
| #define Z_BINARY   0
 | |
| #define Z_ASCII    1
 | |
| #define Z_UNKNOWN  2
 | |
| /* Possible values of the data_type field */
 | |
| 
 | |
| #define Z_DEFLATED   8
 | |
| /* The deflate compression method
 | |
|  * (the only one supported in this version)
 | |
| */
 | |
| 
 | |
| #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
 | |
| 
 | |
| #define zlib_version zlibVersion()
 | |
| /* for compatibility with versions \*[Lt] 1.0.2 */
 | |
| .Ed
 | |
| .Sh VARIOUS HACKS
 | |
| deflateInit and inflateInit are macros to allow checking the
 | |
| .Nm
 | |
| version and the compiler's view of
 | |
| .Fa z_stream .
 | |
| .Bl -tag -width Ds
 | |
| .It Fa int Fn deflateInit_ "z_stream strm" "int level" \
 | |
| "const char *version" "int stream_size" ;
 | |
| .It Fa int Fn inflateInit_ "z_stream strm" "const char *version" \
 | |
| "int stream_size" ;
 | |
| .It Fa int Fn deflateInit2_ "z_stream strm" "int level" "int method" \
 | |
| "int windowBits" "int memLevel" "int strategy" "const char *version" \
 | |
| "int stream_size" ;
 | |
| .It Fa int Fn inflateInit2_ "z_stream strm" "int windowBits" \
 | |
| "const char *version" "int stream_size" ;
 | |
| .It Fa const char * Fn zError "int err" ;
 | |
| .It Fa int Fn inflateSyncPoint "z_streamp z" ;
 | |
| .It Fa const uLongf * Fn "get_crc_table" "void" ;
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Bl -tag -width 12n -compact
 | |
| .It RFC 1950
 | |
| ZLIB Compressed Data Format Specification.
 | |
| .It RFC 1951
 | |
| DEFLATE Compressed Data Format Specification.
 | |
| .It RFC 1952
 | |
| GZIP File Format Specification.
 | |
| .El
 | |
| .Pp
 | |
| .Lk http://www.gzip.org/zlib/ "zlib"
 | |
| .Sh HISTORY
 | |
| This manual page is based on an HTML version of
 | |
| .In zlib.h
 | |
| converted by
 | |
| .An piaip Aq Mt piaip@csie.ntu.edu.tw
 | |
| and was converted to mdoc format by the
 | |
| .Ox
 | |
| project.
 | |
| .Sh AUTHORS
 | |
| .An Jean-loup Gailly Aq Mt jloup@gzip.org
 | |
| .An Mark Adler Aq Mt madler@alumni.caltech.edu
 |