]>
Commit | Line | Data |
---|---|---|
b0613ce0 JN |
1 | /* |
2 | * zlib wrappers to make sure we don't silently miss errors | |
3 | * at init time. | |
4 | */ | |
5 | #include "cache.h" | |
6 | ||
1a507fc1 | 7 | static const char *zerr_to_string(int status) |
b0613ce0 | 8 | { |
1a507fc1 | 9 | switch (status) { |
b0613ce0 | 10 | case Z_MEM_ERROR: |
1a507fc1 | 11 | return "out of memory"; |
b0613ce0 | 12 | case Z_VERSION_ERROR: |
1a507fc1 JH |
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"; | |
b0613ce0 | 20 | default: |
1a507fc1 | 21 | return "unknown error"; |
b0613ce0 | 22 | } |
b0613ce0 JN |
23 | } |
24 | ||
1a507fc1 | 25 | void git_inflate_init(z_streamp strm) |
b0613ce0 | 26 | { |
1a507fc1 JH |
27 | int status = inflateInit(strm); |
28 | ||
29 | if (status == Z_OK) | |
30 | return; | |
31 | die("inflateInit: %s (%s)", zerr_to_string(status), | |
32 | strm->msg ? strm->msg : "no message"); | |
b0613ce0 JN |
33 | } |
34 | ||
5e86c1fb JH |
35 | void git_inflate_init_gzip_only(z_streamp strm) |
36 | { | |
37 | /* | |
38 | * Use default 15 bits, +16 is to accept only gzip and to | |
39 | * yield Z_DATA_ERROR when fed zlib format. | |
40 | */ | |
41 | const int windowBits = 15 + 16; | |
42 | int status = inflateInit2(strm, windowBits); | |
43 | ||
44 | if (status == Z_OK) | |
45 | return; | |
46 | die("inflateInit2: %s (%s)", zerr_to_string(status), | |
47 | strm->msg ? strm->msg : "no message"); | |
48 | } | |
49 | ||
1a507fc1 | 50 | void git_inflate_end(z_streamp strm) |
b0613ce0 | 51 | { |
1a507fc1 | 52 | int status = inflateEnd(strm); |
b0613ce0 | 53 | |
1a507fc1 JH |
54 | if (status == Z_OK) |
55 | return; | |
56 | error("inflateEnd: %s (%s)", zerr_to_string(status), | |
57 | strm->msg ? strm->msg : "no message"); | |
58 | } | |
b0613ce0 | 59 | |
1a507fc1 JH |
60 | int git_inflate(z_streamp strm, int flush) |
61 | { | |
62 | int status = inflate(strm, flush); | |
b0613ce0 | 63 | |
1a507fc1 | 64 | switch (status) { |
b0613ce0 JN |
65 | /* Z_BUF_ERROR: normal, needs more space in the output buffer */ |
66 | case Z_BUF_ERROR: | |
67 | case Z_OK: | |
68 | case Z_STREAM_END: | |
1a507fc1 JH |
69 | return status; |
70 | ||
71 | case Z_MEM_ERROR: | |
72 | die("inflate: out of memory"); | |
73 | default: | |
74 | break; | |
b0613ce0 | 75 | } |
1a507fc1 JH |
76 | error("inflate: %s (%s)", zerr_to_string(status), |
77 | strm->msg ? strm->msg : "no message"); | |
78 | return status; | |
b0613ce0 | 79 | } |