From bdde4e09d21edff02ea5093b7f6eccbf166b272f Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Fri, 9 Sep 2011 23:08:07 -0700 Subject: zlib 0.92 --- infcodes.c | 184 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 92 insertions(+), 92 deletions(-) (limited to 'infcodes.c') diff --git a/infcodes.c b/infcodes.c index fc56547..87e661b 100644 --- a/infcodes.c +++ b/infcodes.c @@ -19,38 +19,38 @@ struct inflate_codes_state { /* mode */ - enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ - START, /* x: set up for LEN */ - LEN, /* i: get length/literal/eob next */ - LENEXT, /* i: getting length extra (have base) */ - DIST, /* i: get distance next */ - DISTEXT, /* i: getting distance extra */ - COPY, /* o: copying bytes in window, waiting for space */ - LIT, /* o: got literal, waiting for output space */ - WASH, /* o: got eob, possibly still output waiting */ - END, /* x: got eob and all data flushed */ - BADCODE} /* x: got error */ - mode; /* current inflate_codes mode */ + enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + START, /* x: set up for LEN */ + LEN, /* i: get length/literal/eob next */ + LENEXT, /* i: getting length extra (have base) */ + DIST, /* i: get distance next */ + DISTEXT, /* i: getting distance extra */ + COPY, /* o: copying bytes in window, waiting for space */ + LIT, /* o: got literal, waiting for output space */ + WASH, /* o: got eob, possibly still output waiting */ + END, /* x: got eob and all data flushed */ + BADCODE} /* x: got error */ + mode; /* current inflate_codes mode */ /* mode dependent information */ uInt len; union { struct { - inflate_huft *tree; /* pointer into tree */ - uInt need; /* bits needed */ - } code; /* if LEN or DIST, where in tree */ - uInt lit; /* if LIT, literal */ + inflate_huft *tree; /* pointer into tree */ + uInt need; /* bits needed */ + } code; /* if LEN or DIST, where in tree */ + uInt lit; /* if LIT, literal */ struct { - uInt get; /* bits to get for extra */ - uInt dist; /* distance back to copy from */ - } copy; /* if EXT or COPY, where and how much */ - } sub; /* submode */ + uInt get; /* bits to get for extra */ + uInt dist; /* distance back to copy from */ + } copy; /* if EXT or COPY, where and how much */ + } sub; /* submode */ /* mode independent information */ - Byte lbits; /* ltree bits decoded per branch */ - Byte dbits; /* dtree bits decoder per branch */ - inflate_huft *ltree; /* literal/length/eob tree */ - inflate_huft *dtree; /* distance tree */ + Byte lbits; /* ltree bits decoded per branch */ + Byte dbits; /* dtree bits decoder per branch */ + inflate_huft *ltree; /* literal/length/eob tree */ + inflate_huft *dtree; /* distance tree */ }; @@ -81,79 +81,79 @@ struct inflate_blocks_state *s; z_stream *z; int r; { - uInt j; /* temporary storage */ - inflate_huft *t; /* temporary pointer */ - int e; /* extra bits or operation */ - uLong b; /* bit buffer */ - uInt k; /* bits in bit buffer */ - Byte *p; /* input data pointer */ - uInt n; /* bytes available there */ - Byte *q; /* output window write pointer */ - uInt m; /* bytes to end of window or read pointer */ - Byte *f; /* pointer to copy strings from */ - struct inflate_codes_state *c = s->sub.codes; /* codes state */ + uInt j; /* temporary storage */ + inflate_huft *t; /* temporary pointer */ + int e; /* extra bits or operation */ + uLong b; /* bit buffer */ + uInt k; /* bits in bit buffer */ + Byte *p; /* input data pointer */ + uInt n; /* bytes available there */ + Byte *q; /* output window write pointer */ + uInt m; /* bytes to end of window or read pointer */ + Byte *f; /* pointer to copy strings from */ + struct inflate_codes_state *c = s->sub.codes; /* codes state */ /* copy input/output information to locals (UPDATE macro restores) */ LOAD /* process input and output based on current state */ while (1) switch (c->mode) - { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ - case START: /* x: set up for LEN */ + { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ + case START: /* x: set up for LEN */ #ifndef SLOW if (m >= 258 && n >= 10) { UPDATE - r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); - LOAD - if (r != Z_OK) - { - c->mode = r == Z_STREAM_END ? WASH : BADCODE; - break; - } + r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); + LOAD + if (r != Z_OK) + { + c->mode = r == Z_STREAM_END ? WASH : BADCODE; + break; + } } #endif /* !SLOW */ c->sub.code.need = c->lbits; c->sub.code.tree = c->ltree; c->mode = LEN; - case LEN: /* i: get length/literal/eob next */ + case LEN: /* i: get length/literal/eob next */ j = c->sub.code.need; NEEDBITS(j) t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); DUMPBITS(t->bits) if ((e = (int)(t->exop)) < 0) { - if (e == -128) /* invalid code */ - { - c->mode = BADCODE; - z->msg = "invalid literal/length code"; - r = Z_DATA_ERROR; - LEAVE - } - e = -e; - if (e & 64) /* end of block */ - { - Tracevv((stderr, "inflate: end of block\n")); - c->mode = WASH; - break; - } - c->sub.code.need = e; - c->sub.code.tree = t->next; - break; + if (e == -128) /* invalid code */ + { + c->mode = BADCODE; + z->msg = "invalid literal/length code"; + r = Z_DATA_ERROR; + LEAVE + } + e = -e; + if (e & 64) /* end of block */ + { + Tracevv((stderr, "inflate: end of block\n")); + c->mode = WASH; + break; + } + c->sub.code.need = e; + c->sub.code.tree = t->next; + break; } - if (e & 16) /* literal */ + if (e & 16) /* literal */ { - c->sub.lit = t->base; - Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? - "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", t->base)); - c->mode = LIT; - break; + c->sub.lit = t->base; + Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", t->base)); + c->mode = LIT; + break; } c->sub.copy.get = e; c->len = t->base; c->mode = LENEXT; - case LENEXT: /* i: getting length extra (have base) */ + case LENEXT: /* i: getting length extra (have base) */ j = c->sub.copy.get; NEEDBITS(j) c->len += (uInt)b & inflate_mask[j]; @@ -162,7 +162,7 @@ int r; c->sub.code.tree = c->dtree; Tracevv((stderr, "inflate: length %u\n", c->len)); c->mode = DIST; - case DIST: /* i: get distance next */ + case DIST: /* i: get distance next */ j = c->sub.code.need; NEEDBITS(j) t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); @@ -170,46 +170,46 @@ int r; if ((e = (int)(t->exop)) < 0) { if (e == -128) - { - c->mode = BADCODE; - z->msg = "invalid distance code"; - r = Z_DATA_ERROR; - LEAVE - } - c->sub.code.need = -e; - c->sub.code.tree = t->next; - break; + { + c->mode = BADCODE; + z->msg = "invalid distance code"; + r = Z_DATA_ERROR; + LEAVE + } + c->sub.code.need = -e; + c->sub.code.tree = t->next; + break; } c->sub.copy.dist = t->base; c->sub.copy.get = e; c->mode = DISTEXT; - case DISTEXT: /* i: getting distance extra */ + case DISTEXT: /* i: getting distance extra */ j = c->sub.copy.get; NEEDBITS(j) c->sub.copy.dist += (uInt)b & inflate_mask[j]; DUMPBITS(j) Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist)); c->mode = COPY; - case COPY: /* o: copying bytes in window, waiting for space */ + case COPY: /* o: copying bytes in window, waiting for space */ f = (uInt)(q - s->window) < c->sub.copy.dist ? - s->end - (c->sub.copy.dist - (q - s->window)) : - q - c->sub.copy.dist; + s->end - (c->sub.copy.dist - (q - s->window)) : + q - c->sub.copy.dist; while (c->len) { - NEEDOUT - OUTBYTE(*f++) - if (f == s->end) - f = s->window; - c->len--; + NEEDOUT + OUTBYTE(*f++) + if (f == s->end) + f = s->window; + c->len--; } c->mode = START; break; - case LIT: /* o: got literal, waiting for output space */ + case LIT: /* o: got literal, waiting for output space */ NEEDOUT OUTBYTE(c->sub.lit) c->mode = START; break; - case WASH: /* o: got eob, possibly more output */ + case WASH: /* o: got eob, possibly more output */ FLUSH if (s->read != s->write) LEAVE @@ -217,7 +217,7 @@ int r; case END: r = Z_STREAM_END; LEAVE - case BADCODE: /* x: got error */ + case BADCODE: /* x: got error */ r = Z_DATA_ERROR; LEAVE default: -- cgit v1.2.3-55-g6feb