zlib: wrap deflate side of the API
Wrap deflateInit, deflate, and deflateEnd for everybody, and the sole use of deflateInit2 in remote-curl.c to tell the library to use gzip header and trailer in git_deflate_init_gzip(). There is only one caller that cares about the status from deflateEnd(). Introduce git_deflate_end_gently() to let that sole caller retrieve the status and act on it (i.e. die) for now, but we would probably want to make inflate_end/deflate_end die when they ran out of memory and get rid of the _gently() kind. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
62
zlib.c
62
zlib.c
@ -77,3 +77,65 @@ int git_inflate(z_streamp strm, int flush)
|
||||
strm->msg ? strm->msg : "no message");
|
||||
return status;
|
||||
}
|
||||
|
||||
void git_deflate_init(z_streamp strm, int level)
|
||||
{
|
||||
int status = deflateInit(strm, level);
|
||||
|
||||
if (status == Z_OK)
|
||||
return;
|
||||
die("deflateInit: %s (%s)", zerr_to_string(status),
|
||||
strm->msg ? strm->msg : "no message");
|
||||
}
|
||||
|
||||
void git_deflate_init_gzip(z_streamp strm, int level)
|
||||
{
|
||||
/*
|
||||
* Use default 15 bits, +16 is to generate gzip header/trailer
|
||||
* instead of the zlib wrapper.
|
||||
*/
|
||||
const int windowBits = 15 + 16;
|
||||
int status = deflateInit2(strm, level,
|
||||
Z_DEFLATED, windowBits,
|
||||
8, Z_DEFAULT_STRATEGY);
|
||||
if (status == Z_OK)
|
||||
return;
|
||||
die("deflateInit2: %s (%s)", zerr_to_string(status),
|
||||
strm->msg ? strm->msg : "no message");
|
||||
}
|
||||
|
||||
void git_deflate_end(z_streamp strm)
|
||||
{
|
||||
int status = deflateEnd(strm);
|
||||
|
||||
if (status == Z_OK)
|
||||
return;
|
||||
error("deflateEnd: %s (%s)", zerr_to_string(status),
|
||||
strm->msg ? strm->msg : "no message");
|
||||
}
|
||||
|
||||
int git_deflate_end_gently(z_streamp strm)
|
||||
{
|
||||
return deflateEnd(strm);
|
||||
}
|
||||
|
||||
int git_deflate(z_streamp strm, int flush)
|
||||
{
|
||||
int status = deflate(strm, flush);
|
||||
|
||||
switch (status) {
|
||||
/* Z_BUF_ERROR: normal, needs more space in the output buffer */
|
||||
case Z_BUF_ERROR:
|
||||
case Z_OK:
|
||||
case Z_STREAM_END:
|
||||
return status;
|
||||
|
||||
case Z_MEM_ERROR:
|
||||
die("deflate: out of memory");
|
||||
default:
|
||||
break;
|
||||
}
|
||||
error("deflate: %s (%s)", zerr_to_string(status),
|
||||
strm->msg ? strm->msg : "no message");
|
||||
return status;
|
||||
}
|
||||
|
Reference in New Issue
Block a user