mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
240 lines
9.6 KiB
C
240 lines
9.6 KiB
C
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
|
version 1.2.3, July 18th, 2005
|
|
|
|
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
warranty. In no event will the authors be held liable for any damages
|
|
arising from the use of this software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
including commercial applications, and to alter it and redistribute it
|
|
freely, subject to the following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not
|
|
claim that you wrote the original software. If you use this software
|
|
in a product, an acknowledgment in the product documentation would be
|
|
appreciated but is not required.
|
|
2. Altered source versions must be plainly marked as such, and must not be
|
|
misrepresented as being the original software.
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
|
|
Jean-loup Gailly Mark Adler
|
|
jloup@gzip.org madler@alumni.caltech.edu
|
|
|
|
|
|
The data format used by the zlib library is described by RFCs (Request for
|
|
Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
|
|
(zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
|
|
*/
|
|
|
|
#ifndef GZIO_H
|
|
#define GZIO_H
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
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 default 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 (.gz) format
|
|
with an interface similar to that of stdio 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.
|
|
|
|
This library can optionally read and write gzip streams in memory as well.
|
|
|
|
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.
|
|
|
|
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.
|
|
*/
|
|
|
|
#ifdef STDC
|
|
typedef void const *voidpc;
|
|
#else
|
|
typedef Byte const *voidpc;
|
|
#endif
|
|
|
|
|
|
/*
|
|
gzip header information passed to and from zlib routines. See RFC 1952
|
|
for more details on the meanings of these fields.
|
|
*/
|
|
typedef struct gz_header_s {
|
|
int text; /* true if compressed data believed to be text */
|
|
uLong time; /* modification time */
|
|
int xflags; /* extra flags (not used when writing a gzip file) */
|
|
int os; /* operating system */
|
|
Bytef *extra; /* pointer to extra field or Z_NULL if none */
|
|
uInt extra_len; /* extra field length (valid if extra != Z_NULL) */
|
|
uInt extra_max; /* space at extra (only when reading header) */
|
|
Bytef *name; /* pointer to zero-terminated file name or Z_NULL */
|
|
uInt name_max; /* space at name (only when reading header) */
|
|
Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */
|
|
uInt comm_max; /* space at comment (only when reading header) */
|
|
int hcrc; /* true if there was or will be a header crc */
|
|
int done; /* true when done reading gzip header (not used
|
|
when writing a gzip file) */
|
|
} gz_header;
|
|
|
|
typedef gz_header FAR *gz_headerp;
|
|
|
|
/*
|
|
The application must update next_in and avail_in when avail_in has
|
|
dropped to zero. It must update next_out and avail_out when avail_out
|
|
has dropped to zero. The application must initialize zalloc, zfree and
|
|
opaque before calling the init function. All other fields are set by the
|
|
compression library and must not be updated by the application.
|
|
|
|
The opaque value provided by the application will be passed as the first
|
|
parameter for calls of zalloc and zfree. This can be useful for custom
|
|
memory management. The compression library attaches no meaning to the
|
|
opaque value.
|
|
|
|
zalloc must return Z_NULL if there is not enough memory for the object.
|
|
If zlib is used in a multi-threaded application, zalloc and zfree must be
|
|
thread safe.
|
|
|
|
On 16-bit systems, the functions zalloc and 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 zconf.h). WARNING: On MSDOS,
|
|
pointers returned by 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 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 zconf.h).
|
|
|
|
The fields total_in and total_out can be used for statistics or
|
|
progress reports. After compression, 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).
|
|
*/
|
|
|
|
/* constants */
|
|
|
|
#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
|
|
#define Z_BLOCK 5
|
|
/* Allowed flush values; see deflate() and inflate() 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_RLE 3
|
|
#define Z_FIXED 4
|
|
#define Z_DEFAULT_STRATEGY 0
|
|
/* compression strategy; see deflateInit2() below for details */
|
|
|
|
#define Z_BINARY 0
|
|
#define Z_TEXT 1
|
|
//#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
|
|
#define Z_UNKNOWN 2
|
|
/* Possible values of the data_type field (though see inflate()) */
|
|
|
|
#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 < 1.0.2 */
|
|
|
|
|
|
typedef voidp gzFile;
|
|
|
|
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
|
|
/*
|
|
Opens a gzip (.gz) file for reading or writing. The mode parameter
|
|
is as in fopen ("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). */
|
|
|
|
ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
|
|
/*
|
|
Dynamically update the compression level or strategy. See the description
|
|
of deflateInit2 for the meaning of these parameters.
|
|
gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
|
|
opened for writing.
|
|
*/
|
|
|
|
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
|
|
/*
|
|
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). */
|
|
|
|
ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
|
|
voidpc buf, unsigned len));
|
|
/*
|
|
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).
|
|
*/
|
|
|
|
ZEXTERN int ZEXPORT gzclose OF((gzFile file));
|
|
/*
|
|
Flushes all pending output if necessary, closes the compressed file
|
|
and deallocates all the (de)compression state. The return value is the zlib
|
|
error number (see function gzerror below).
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif /* GZIO_H */
|