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 '')
| -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) |
