Code

zlib wrapper: refactor error message formatter
[git.git] / zlib.c
1 /*
2  * zlib wrappers to make sure we don't silently miss errors
3  * at init time.
4  */
5 #include "cache.h"
7 static const char *zerr_to_string(int status)
8 {
9         switch (status) {
10         case Z_MEM_ERROR:
11                 return "out of memory";
12         case Z_VERSION_ERROR:
13                 return "wrong version";
14         case Z_NEED_DICT:
15                 return "needs dictionary";
16         case Z_DATA_ERROR:
17                 return "data stream error";
18         case Z_STREAM_ERROR:
19                 return "stream consistency error";
20         default:
21                 return "unknown error";
22         }
23 }
25 void git_inflate_init(z_streamp strm)
26 {
27         int status = inflateInit(strm);
29         if (status == Z_OK)
30                 return;
31         die("inflateInit: %s (%s)", zerr_to_string(status),
32             strm->msg ? strm->msg : "no message");
33 }
35 void git_inflate_end(z_streamp strm)
36 {
37         int status = inflateEnd(strm);
39         if (status == Z_OK)
40                 return;
41         error("inflateEnd: %s (%s)", zerr_to_string(status),
42               strm->msg ? strm->msg : "no message");
43 }
45 int git_inflate(z_streamp strm, int flush)
46 {
47         int status = inflate(strm, flush);
49         switch (status) {
50         /* Z_BUF_ERROR: normal, needs more space in the output buffer */
51         case Z_BUF_ERROR:
52         case Z_OK:
53         case Z_STREAM_END:
54                 return status;
56         case Z_MEM_ERROR:
57                 die("inflate: out of memory");
58         default:
59                 break;
60         }
61         error("inflate: %s (%s)", zerr_to_string(status),
62               strm->msg ? strm->msg : "no message");
63         return status;
64 }