/* * zlib wrappers to make sure we don't silently miss errors * at init time. */ #include "cache.h" void git_inflate_init(z_streamp strm) { const char *err; switch (inflateInit(strm)) { case Z_OK: return; case Z_MEM_ERROR: err = "out of memory"; break; case Z_VERSION_ERROR: err = "wrong version"; break; default: err = "error"; } die("inflateInit: %s (%s)", err, strm->msg ? strm->msg : "no message"); } void git_inflate_end(z_streamp strm) { if (inflateEnd(strm) != Z_OK) error("inflateEnd: %s", strm->msg ? strm->msg : "failed"); } int git_inflate(z_streamp strm, int flush) { int ret = inflate(strm, flush); const char *err; switch (ret) { /* Out of memory is fatal. */ case Z_MEM_ERROR: die("inflate: out of memory"); /* 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; /* Z_BUF_ERROR: normal, needs more space in the output buffer */ case Z_BUF_ERROR: case Z_OK: case Z_STREAM_END: return ret; } error("inflate: %s (%s)", err, strm->msg ? strm->msg : "no message"); return ret; }