diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:08:07 -0700 |
---|---|---|
committer | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:08:07 -0700 |
commit | bdde4e09d21edff02ea5093b7f6eccbf166b272f (patch) | |
tree | a64632a98a6bea6e5df864d6e5b6f2e51ea69c1c /inflate.c | |
parent | 1c71d8b13b54f91ddec361d3053ecce26e6ff761 (diff) | |
download | zlib-bdde4e09d21edff02ea5093b7f6eccbf166b272f.tar.gz zlib-bdde4e09d21edff02ea5093b7f6eccbf166b272f.tar.bz2 zlib-bdde4e09d21edff02ea5093b7f6eccbf166b272f.zip |
zlib 0.92v0.92
Diffstat (limited to 'inflate.c')
-rw-r--r-- | inflate.c | 80 |
1 files changed, 40 insertions, 40 deletions
@@ -13,32 +13,32 @@ struct internal_state { | |||
13 | 13 | ||
14 | /* mode */ | 14 | /* mode */ |
15 | enum { | 15 | enum { |
16 | METHOD, /* waiting for method byte */ | 16 | METHOD, /* waiting for method byte */ |
17 | FLAG, /* waiting for flag byte */ | 17 | FLAG, /* waiting for flag byte */ |
18 | BLOCKS, /* decompressing blocks */ | 18 | BLOCKS, /* decompressing blocks */ |
19 | CHECK4, /* four check bytes to go */ | 19 | CHECK4, /* four check bytes to go */ |
20 | CHECK3, /* three check bytes to go */ | 20 | CHECK3, /* three check bytes to go */ |
21 | CHECK2, /* two check bytes to go */ | 21 | CHECK2, /* two check bytes to go */ |
22 | CHECK1, /* one check byte to go */ | 22 | CHECK1, /* one check byte to go */ |
23 | DONE, /* finished check, done */ | 23 | DONE, /* finished check, done */ |
24 | BAD} /* got an error--stay here */ | 24 | BAD} /* got an error--stay here */ |
25 | mode; /* current inflate mode */ | 25 | mode; /* current inflate mode */ |
26 | 26 | ||
27 | /* mode dependent information */ | 27 | /* mode dependent information */ |
28 | union { | 28 | union { |
29 | uInt method; /* if FLAGS, method byte */ | 29 | uInt method; /* if FLAGS, method byte */ |
30 | struct { | 30 | struct { |
31 | uLong was; /* computed check value */ | 31 | uLong was; /* computed check value */ |
32 | uLong need; /* stream check value */ | 32 | uLong need; /* stream check value */ |
33 | } check; /* if CHECK, check values to compare */ | 33 | } check; /* if CHECK, check values to compare */ |
34 | uInt marker; /* if BAD, inflateSync's marker bytes count */ | 34 | uInt marker; /* if BAD, inflateSync's marker bytes count */ |
35 | } sub; /* submode */ | 35 | } sub; /* submode */ |
36 | 36 | ||
37 | /* mode independent information */ | 37 | /* mode independent information */ |
38 | int nowrap; /* flag for no wrapper */ | 38 | int nowrap; /* flag for no wrapper */ |
39 | uInt wbits; /* log2(window size) (8..15, defaults to 15) */ | 39 | uInt wbits; /* log2(window size) (8..15, defaults to 15) */ |
40 | struct inflate_blocks_state | 40 | struct inflate_blocks_state |
41 | *blocks; /* current inflate_blocks state */ | 41 | *blocks; /* current inflate_blocks state */ |
42 | 42 | ||
43 | }; | 43 | }; |
44 | 44 | ||
@@ -135,7 +135,7 @@ int inflate(z, f) | |||
135 | z_stream *z; | 135 | z_stream *z; |
136 | int f; | 136 | int f; |
137 | { | 137 | { |
138 | int r = f; /* to avoid warning about unused f */ | 138 | int r = f; /* to avoid warning about unused f */ |
139 | uInt b; | 139 | uInt b; |
140 | 140 | ||
141 | if (z == Z_NULL || z->next_in == Z_NULL) | 141 | if (z == Z_NULL || z->next_in == Z_NULL) |
@@ -148,16 +148,16 @@ int f; | |||
148 | if (((z->state->sub.method = NEXTBYTE) & 0xf) != DEFLATED) | 148 | if (((z->state->sub.method = NEXTBYTE) & 0xf) != DEFLATED) |
149 | { | 149 | { |
150 | z->state->mode = BAD; | 150 | z->state->mode = BAD; |
151 | z->msg = "unknown compression method"; | 151 | z->msg = "unknown compression method"; |
152 | z->state->sub.marker = 5; /* can't try inflateSync */ | 152 | z->state->sub.marker = 5; /* can't try inflateSync */ |
153 | break; | 153 | break; |
154 | } | 154 | } |
155 | if ((z->state->sub.method >> 4) + 8 > z->state->wbits) | 155 | if ((z->state->sub.method >> 4) + 8 > z->state->wbits) |
156 | { | 156 | { |
157 | z->state->mode = BAD; | 157 | z->state->mode = BAD; |
158 | z->msg = "invalid window size"; | 158 | z->msg = "invalid window size"; |
159 | z->state->sub.marker = 5; /* can't try inflateSync */ | 159 | z->state->sub.marker = 5; /* can't try inflateSync */ |
160 | break; | 160 | break; |
161 | } | 161 | } |
162 | z->state->mode = FLAG; | 162 | z->state->mode = FLAG; |
163 | case FLAG: | 163 | case FLAG: |
@@ -165,16 +165,16 @@ int f; | |||
165 | if ((b = NEXTBYTE) & 0x20) | 165 | if ((b = NEXTBYTE) & 0x20) |
166 | { | 166 | { |
167 | z->state->mode = BAD; | 167 | z->state->mode = BAD; |
168 | z->msg = "invalid reserved bit"; | 168 | z->msg = "invalid reserved bit"; |
169 | z->state->sub.marker = 5; /* can't try inflateSync */ | 169 | z->state->sub.marker = 5; /* can't try inflateSync */ |
170 | break; | 170 | break; |
171 | } | 171 | } |
172 | if (((z->state->sub.method << 8) + b) % 31) | 172 | if (((z->state->sub.method << 8) + b) % 31) |
173 | { | 173 | { |
174 | z->state->mode = BAD; | 174 | z->state->mode = BAD; |
175 | z->msg = "incorrect header check"; | 175 | z->msg = "incorrect header check"; |
176 | z->state->sub.marker = 5; /* can't try inflateSync */ | 176 | z->state->sub.marker = 5; /* can't try inflateSync */ |
177 | break; | 177 | break; |
178 | } | 178 | } |
179 | Trace((stderr, "inflate: zlib header ok\n")); | 179 | Trace((stderr, "inflate: zlib header ok\n")); |
180 | z->state->mode = BLOCKS; | 180 | z->state->mode = BLOCKS; |
@@ -183,17 +183,17 @@ int f; | |||
183 | if (r == Z_DATA_ERROR) | 183 | if (r == Z_DATA_ERROR) |
184 | { | 184 | { |
185 | z->state->mode = BAD; | 185 | z->state->mode = BAD; |
186 | z->state->sub.marker = 0; /* can try inflateSync */ | 186 | z->state->sub.marker = 0; /* can try inflateSync */ |
187 | break; | 187 | break; |
188 | } | 188 | } |
189 | if (r != Z_STREAM_END) | 189 | if (r != Z_STREAM_END) |
190 | return r; | 190 | return r; |
191 | r = Z_OK; | 191 | r = Z_OK; |
192 | inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); | 192 | inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); |
193 | if (z->state->nowrap) | 193 | if (z->state->nowrap) |
194 | { | 194 | { |
195 | z->state->mode = DONE; | 195 | z->state->mode = DONE; |
196 | break; | 196 | break; |
197 | } | 197 | } |
198 | z->state->mode = CHECK4; | 198 | z->state->mode = CHECK4; |
199 | case CHECK4: | 199 | case CHECK4: |
@@ -216,8 +216,8 @@ int f; | |||
216 | { | 216 | { |
217 | z->state->mode = BAD; | 217 | z->state->mode = BAD; |
218 | z->msg = "incorrect data check"; | 218 | z->msg = "incorrect data check"; |
219 | z->state->sub.marker = 5; /* can't try inflateSync */ | 219 | z->state->sub.marker = 5; /* can't try inflateSync */ |
220 | break; | 220 | break; |
221 | } | 221 | } |
222 | Trace((stderr, "inflate: zlib check ok\n")); | 222 | Trace((stderr, "inflate: zlib check ok\n")); |
223 | z->state->mode = DONE; | 223 | z->state->mode = DONE; |
@@ -234,10 +234,10 @@ int f; | |||
234 | int inflateSync(z) | 234 | int inflateSync(z) |
235 | z_stream *z; | 235 | z_stream *z; |
236 | { | 236 | { |
237 | uInt n; /* number of bytes to look at */ | 237 | uInt n; /* number of bytes to look at */ |
238 | Byte *p; /* pointer to bytes */ | 238 | Byte *p; /* pointer to bytes */ |
239 | uInt m; /* number of marker bytes found in a row */ | 239 | uInt m; /* number of marker bytes found in a row */ |
240 | uLong r, w; /* temporaries to save total_in and total_out */ | 240 | uLong r, w; /* temporaries to save total_in and total_out */ |
241 | 241 | ||
242 | /* set up */ | 242 | /* set up */ |
243 | if (z == Z_NULL || z->state == Z_NULL) | 243 | if (z == Z_NULL || z->state == Z_NULL) |