2011-03-30 13:49:47 +00:00
|
|
|
.TH FLATE 2
|
|
|
|
.SH NAME
|
|
|
|
deflateinit, deflate, deflatezlib, deflateblock, deflatezlibblock, inflateinit, inflate, inflatezlib, inflateblock, inflatezlibblock, flateerr, mkcrctab, blockcrc, adler32 \- deflate compression
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.B #include <u.h>
|
|
|
|
.br
|
|
|
|
.B #include <libc.h>
|
|
|
|
.br
|
|
|
|
.B #include <flate.h>
|
|
|
|
.PP
|
|
|
|
.ta \w'ulongmm'u
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int deflateinit(void)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int deflate(void *wr, int (*w)(void*,void*,int),
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
void *rr, int (*r)(void*,void*,int),
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
int level, int debug)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int deflatezlib(void *wr, int (*w)(void*,void*,int),
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
void *rr, int (*r)(void*,void*,int),
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
int level, int debug)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int deflateblock(uchar *dst, int dsize,
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
uchar *src, int ssize,
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
int level, int debug)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int deflatezlibblock(uchar *dst, int dsize,
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
uchar *src, int ssize,
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
int level, int debug)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int inflateinit(void)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int inflate(void *wr, int (*w)(void*, void*, int),
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
void *getr, int (*get)(void*))
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int inflatezlib(void *wr, int (*w)(void*, void*, int),
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
void *getr, int (*get)(void*))
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int inflateblock(uchar *dst, int dsize,
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
uchar *src, int ssize)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
int inflatezlibblock(uchar *dst, int dsize,
|
|
|
|
.br
|
|
|
|
.B
|
|
|
|
uchar *src, int ssize)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
char *flateerr(int error)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
ulong *mkcrctab(ulong poly)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
ulong blockcrc(ulong *tab, ulong crc, void *buf, int n)
|
|
|
|
.PP
|
|
|
|
.B
|
|
|
|
ulong adler32(ulong adler, void *buf, int n)
|
|
|
|
.SH DESCRIPTION
|
|
|
|
These routines compress and decompress data using the deflate compression algorithm,
|
|
|
|
which is used for most gzip, zip, and zlib files.
|
|
|
|
.PP
|
|
|
|
.I Deflate
|
|
|
|
compresses input data retrieved by calls to
|
|
|
|
.I r
|
|
|
|
with arguments
|
|
|
|
.IR rr ,
|
|
|
|
an input buffer, and a count of bytes to read.
|
|
|
|
.I R
|
|
|
|
should return the number of bytes read;
|
|
|
|
end of input is signaled by returning zero, an input error by
|
|
|
|
returning a negative number.
|
|
|
|
The compressed output is written to
|
|
|
|
.I w
|
|
|
|
with arguments
|
|
|
|
.IR wr ,
|
|
|
|
the output data, and the number of bytes to write.
|
|
|
|
.I W
|
|
|
|
should return the number of bytes written;
|
|
|
|
writing fewer than the requested number of bytes is an error.
|
|
|
|
.I Level
|
|
|
|
indicates the amount of computation deflate should do while compressing the data.
|
|
|
|
Higher
|
|
|
|
.I levels
|
|
|
|
usually take more time and produce smaller outputs.
|
|
|
|
Valid values are 1 to 9, inclusive; 6 is a good compromise.
|
|
|
|
If
|
|
|
|
.I debug
|
|
|
|
is non-zero, cryptic debugging information is produced on standard error.
|
|
|
|
.PP
|
|
|
|
.I Inflate
|
|
|
|
reverses the process, converting compressed data into uncompressed output.
|
|
|
|
Input is retrieved one byte at a time by calling
|
|
|
|
.I get
|
|
|
|
with the argument
|
|
|
|
.IR getr .
|
2019-12-17 22:31:38 +00:00
|
|
|
End of input is signaled by returning a negative value.
|
2011-03-30 13:49:47 +00:00
|
|
|
The uncompressed output is written to
|
|
|
|
.IR w ,
|
|
|
|
which has the same interface as for
|
|
|
|
.IR deflate .
|
|
|
|
.PP
|
|
|
|
.I
|
|
|
|
Deflateblock
|
|
|
|
and
|
|
|
|
.I inflateblock
|
|
|
|
operate on blocks of memory but are otherwise similar to
|
|
|
|
.I deflate
|
|
|
|
and
|
|
|
|
.IR inflate .
|
|
|
|
.PP
|
|
|
|
The zlib functions are similar, but operate on files with a zlib header and trailer.
|
|
|
|
.PP
|
|
|
|
.I Deflateinit
|
|
|
|
or
|
|
|
|
.I inflateinit
|
|
|
|
must be called once before any call to the corresponding routines.
|
|
|
|
.PP
|
|
|
|
If the above routines fail,
|
|
|
|
they return a negative number indicating the problem.
|
|
|
|
The possible values are
|
|
|
|
.IR FlateNoMem ,
|
|
|
|
.IR FlateInputFail ,
|
|
|
|
.IR FlateOutputFail ,
|
|
|
|
.IR FlateCorrupted ,
|
|
|
|
and
|
|
|
|
.IR FlateInternal .
|
|
|
|
.I Flateerr
|
|
|
|
converts the number into a printable message.
|
|
|
|
.I FlateOk
|
|
|
|
is defined to be zero,
|
|
|
|
the successful return value for
|
|
|
|
.IR deflateinit ,
|
|
|
|
.IR deflate ,
|
|
|
|
.IR deflatezlib ,
|
|
|
|
.IR inflateinit ,
|
|
|
|
.IR inflate ,
|
|
|
|
and
|
|
|
|
.IR inflatezlib .
|
|
|
|
The block functions return the number of bytes produced when they succeed.
|
|
|
|
.PP
|
|
|
|
.I Mkcrctab
|
|
|
|
allocates
|
|
|
|
(using
|
|
|
|
.IR malloc (2)),
|
|
|
|
initializes, and returns a table for rapid computation of 32 bit CRC values using the polynomial
|
|
|
|
.IR poly .
|
|
|
|
.I Blockcrc
|
|
|
|
uses
|
|
|
|
.IR tab ,
|
|
|
|
a table returned by
|
|
|
|
.IR mkcrctab ,
|
|
|
|
to update
|
|
|
|
.I crc
|
|
|
|
for the
|
|
|
|
.I n
|
|
|
|
bytes of data in
|
|
|
|
.IR buf ,
|
|
|
|
and returns the new value.
|
|
|
|
.I Crc
|
|
|
|
should initially be zero.
|
|
|
|
.I Blockcrc
|
|
|
|
pre-conditions and post-conditions
|
|
|
|
.I crc
|
|
|
|
by ones complementation.
|
|
|
|
.PP
|
|
|
|
.I Adler32
|
|
|
|
updates the Adler 32-bit checksum of the
|
|
|
|
.I n
|
2019-12-17 22:31:38 +00:00
|
|
|
bytes of data in
|
2011-03-30 13:49:47 +00:00
|
|
|
.IR buf.
|
|
|
|
The initial value of
|
|
|
|
.I adler
|
|
|
|
(that is, its value after seeing zero bytes) should be 1.
|
|
|
|
.SH SOURCE
|
|
|
|
.B /sys/src/libflate
|