Skip to content

Commit

Permalink
zlib wrapper: refactor error message formatter
Browse files Browse the repository at this point in the history
Before refactoring the main part of the wrappers, first move the
logic to convert error status that come back from zlib to string
to a helper function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Jun 10, 2011
1 parent e5af0de commit 1a507fc
Showing 1 changed file with 38 additions and 35 deletions.
73 changes: 38 additions & 35 deletions zlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,58 +4,61 @@
*/
#include "cache.h"

void git_inflate_init(z_streamp strm)
static const char *zerr_to_string(int status)
{
const char *err;

switch (inflateInit(strm)) {
case Z_OK:
return;

switch (status) {
case Z_MEM_ERROR:
err = "out of memory";
break;
return "out of memory";
case Z_VERSION_ERROR:
err = "wrong version";
break;
return "wrong version";
case Z_NEED_DICT:
return "needs dictionary";
case Z_DATA_ERROR:
return "data stream error";
case Z_STREAM_ERROR:
return "stream consistency error";
default:
err = "error";
return "unknown error";
}
die("inflateInit: %s (%s)", err, strm->msg ? strm->msg : "no message");
}

void git_inflate_end(z_streamp strm)
void git_inflate_init(z_streamp strm)
{
if (inflateEnd(strm) != Z_OK)
error("inflateEnd: %s", strm->msg ? strm->msg : "failed");
int status = inflateInit(strm);

if (status == Z_OK)
return;
die("inflateInit: %s (%s)", zerr_to_string(status),
strm->msg ? strm->msg : "no message");
}

int git_inflate(z_streamp strm, int flush)
void git_inflate_end(z_streamp strm)
{
int ret = inflate(strm, flush);
const char *err;
int status = inflateEnd(strm);

switch (ret) {
/* Out of memory is fatal. */
case Z_MEM_ERROR:
die("inflate: out of memory");
if (status == Z_OK)
return;
error("inflateEnd: %s (%s)", zerr_to_string(status),
strm->msg ? strm->msg : "no message");
}

/* Data corruption errors: we may want to recover from them (fsck) */
case Z_NEED_DICT:
err = "needs dictionary"; break;
case Z_DATA_ERROR:
err = "data stream error"; break;
case Z_STREAM_ERROR:
err = "stream consistency error"; break;
default:
err = "unknown error"; break;
int git_inflate(z_streamp strm, int flush)
{
int status = inflate(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 ret;
return status;

case Z_MEM_ERROR:
die("inflate: out of memory");
default:
break;
}
error("inflate: %s (%s)", err, strm->msg ? strm->msg : "no message");
return ret;
error("inflate: %s (%s)", zerr_to_string(status),
strm->msg ? strm->msg : "no message");
return status;
}

0 comments on commit 1a507fc

Please sign in to comment.