int ZEXPORT inflateBack(z_streamp strm, in_func in, void *in_desc,
out_func out, void *out_desc);
inflateBack()
does a
raw inflate with a single call using a call-back
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 non-zero,
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()
is 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.
|
stream of data |
|
input function pointer |
void *in_desc |
input parameters for in_func |
|
output function pointer |
void *out_desc |
output parameters for out_func |
int ZEXPORT |
Refer to the above description for detailed explanation |
© 2008-2009 Nokia Corporation. All rights reserved. This documentation can be used in the connection with this Product to help and support the user. |