Zlib

zlib — свободная кроссплатформенная библиотека для сжатия данных, созданная Жан-лу Гайи (Jean-loup Gailly) и Марком Адлером (Mark Adler). Является обобщением алгоритма сжатия данных DEFLATE, используемого в компрессоре данных gzip. Первая публичная версия 0.9, выпущена 1 мая 1995 года для использования вместе с библиотекой libpng. Распространяется под лицензией zlib.

Введение
The zlib compression library provides in-memory compression and decompression functions, включая проверки целостности разархивированных данных. На данный момент библиотека поддерживает один метод сжатия (deflation) но другие алгоритмы будут добавлены позже и будут иметь такой же потоковый интерфейс.

Сжатие может быть произведено за один шаг, если буфферы имеют достаточный размер (например, входной файл отображён в память), или или последовательностью вызовов функций сжатия. 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.

Библиотека (опционально) может читать/писать gzip-потоки в/из памят(ь/и).

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 библиотека не должна падать в случае неправильного ввода.

Основы
Структуры для потоковой обработки

Константы и макросы

Базовые

 * 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);

С расширенным функционалом

 * 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);
 * int deflateTune(z_streamp strm, int good_length, int max_lazy, int nice_length, int max_chain);
 * uLong deflateBound(z_streamp strm, uLong sourceLen);
 * int deflatePrime(z_streamp strm, int bits, int value);
 * int deflateSetHeader(z_streamp strm, gz_headerp head);
 * 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 dest, z_streamp source);
 * int inflateReset(z_streamp strm);
 * int inflateReset2(z_streamp strm, int windowBits);
 * int inflatePrime(z_streamp strm, int bits, int value);
 * long inflateMark(z_streamp strm);
 * int inflateGetHeader(z_streamp strm, gz_headerp head);
 * int inflateBackInit(z_streamp strm, int windowBits, unsigned char FAR *window);

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


 * int inflateBackEnd(z_streamp strm);
 * uLong zlibCompileFlags(void);

Служебные

 * 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);

Для доступа к файлам gzip

 * gzFile gzopen(const char *path, const char *mode);
 * gzFile gzdopen(int fd, const char *mode);
 * int gzbuffer(gzFile file, unsigned size);
 * 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);
 * z_off_t gzoffset(gzFile file);
 * int gzeof(gzFile file);
 * int gzdirect(gzFile file);
 * int gzclose(gzFile file);
 * int gzclose_r(gzFile file);
 * int gzclose_w(gzFile file);
 * const char * gzerror (gzFile file, int *errnum);
 * void gzclearerr(gzFile file);

Подсчёт и сверка контрольных сумм

 * uLong adler32(uLong adler, const Bytef *buf, uInt len);
 * uLong adler32_combine(uLong adler1, uLong adler2, z_off_t len2);
 * uLong crc32(uLong crc, const Bytef *buf, uInt len);
 * uLong crc32_combine(uLong crc1, uLong crc2, z_off_t len2);