/* * zlib wrappers to make sure we don't silently miss errors * at init time. */ #include "cache.h" static const char *zerr_to_string(int status) { switch (status) { case Z_MEM_ERROR: return "out of memory"; case Z_VERSION_ERROR: 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: return "unknown error"; } } void git_inflate_init(z_streamp strm) { int status = inflateInit(strm); if (status == Z_OK) return; die("inflateInit: %s (%s)", zerr_to_string(status), strm->msg ? strm->msg : "no message"); } void git_inflate_end(z_streamp strm) { int status = inflateEnd(strm); if (status == Z_OK) return; error("inflateEnd: %s (%s)", zerr_to_string(status), strm->msg ? strm->msg : "no message"); } 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 status; case Z_MEM_ERROR: die("inflate: out of memory"); default: break; } error("inflate: %s (%s)", zerr_to_string(status), strm->msg ? strm->msg : "no message"); return status; }