aboutsummaryrefslogtreecommitdiff
path: root/inflate.c
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2011-09-09 23:08:07 -0700
committerMark Adler <madler@alumni.caltech.edu>2011-09-09 23:08:07 -0700
commitbdde4e09d21edff02ea5093b7f6eccbf166b272f (patch)
treea64632a98a6bea6e5df864d6e5b6f2e51ea69c1c /inflate.c
parent1c71d8b13b54f91ddec361d3053ecce26e6ff761 (diff)
downloadzlib-bdde4e09d21edff02ea5093b7f6eccbf166b272f.tar.gz
zlib-bdde4e09d21edff02ea5093b7f6eccbf166b272f.tar.bz2
zlib-bdde4e09d21edff02ea5093b7f6eccbf166b272f.zip
zlib 0.92v0.92
Diffstat (limited to 'inflate.c')
-rw-r--r--inflate.c80
1 files changed, 40 insertions, 40 deletions
diff --git a/inflate.c b/inflate.c
index 0b0ee87..1c58d98 100644
--- a/inflate.c
+++ b/inflate.c
@@ -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)
135z_stream *z; 135z_stream *z;
136int f; 136int 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;
234int inflateSync(z) 234int inflateSync(z)
235z_stream *z; 235z_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)