]>
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 | } |
55bb5c91 JH |
80 | |
81 | void git_deflate_init(z_streamp strm, int level) | |
82 | { | |
83 | int status = deflateInit(strm, level); | |
84 | ||
85 | if (status == Z_OK) | |
86 | return; | |
87 | die("deflateInit: %s (%s)", zerr_to_string(status), | |
88 | strm->msg ? strm->msg : "no message"); | |
89 | } | |
90 | ||
91 | void git_deflate_init_gzip(z_streamp strm, int level) | |
92 | { | |
93 | /* | |
94 | * Use default 15 bits, +16 is to generate gzip header/trailer | |
95 | * instead of the zlib wrapper. | |
96 | */ | |
97 | const int windowBits = 15 + 16; | |
98 | int status = deflateInit2(strm, level, | |
99 | Z_DEFLATED, windowBits, | |
100 | 8, Z_DEFAULT_STRATEGY); | |
101 | if (status == Z_OK) | |
102 | return; | |
103 | die("deflateInit2: %s (%s)", zerr_to_string(status), | |
104 | strm->msg ? strm->msg : "no message"); | |
105 | } | |
106 | ||
107 | void git_deflate_end(z_streamp strm) | |
108 | { | |
109 | int status = deflateEnd(strm); | |
110 | ||
111 | if (status == Z_OK) | |
112 | return; | |
113 | error("deflateEnd: %s (%s)", zerr_to_string(status), | |
114 | strm->msg ? strm->msg : "no message"); | |
115 | } | |
116 | ||
117 | int git_deflate_end_gently(z_streamp strm) | |
118 | { | |
119 | return deflateEnd(strm); | |
120 | } | |
121 | ||
122 | int git_deflate(z_streamp strm, int flush) | |
123 | { | |
124 | int status = deflate(strm, flush); | |
125 | ||
126 | switch (status) { | |
127 | /* Z_BUF_ERROR: normal, needs more space in the output buffer */ | |
128 | case Z_BUF_ERROR: | |
129 | case Z_OK: | |
130 | case Z_STREAM_END: | |
131 | return status; | |
132 | ||
133 | case Z_MEM_ERROR: | |
134 | die("deflate: out of memory"); | |
135 | default: | |
136 | break; | |
137 | } | |
138 | error("deflate: %s (%s)", zerr_to_string(status), | |
139 | strm->msg ? strm->msg : "no message"); | |
140 | return status; | |
141 | } |