Changeset d0d8706 in rtems


Ignore:
Timestamp:
Feb 17, 2008, 6:53:34 PM (12 years ago)
Author:
Ralf Corsepius <ralf.corsepius@…>
Branches:
4.10, 4.11, 4.9, master
Children:
13d404a
Parents:
d556e81
Message:

Import from zlib-1.2.4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/zlib/contrib/infback9/infback9.c

    rd556e81 rd0d8706  
    11/* infback9.c -- inflate deflate64 data using a call-back interface
    2  * Copyright (C) 1995-2003 Mark Adler
     2 * Copyright (C) 1995-2008 Mark Adler
    33 * For conditions of distribution and use, see copyright notice in zlib.h
    44 */
     
    243243    unsigned lenbits;           /* index bits for lencode */
    244244    unsigned distbits;          /* index bits for distcode */
    245     code this;                  /* current decoding table entry */
     245    code here;                  /* current decoding table entry */
    246246    code last;                  /* parent table entry */
    247247    unsigned len;               /* length to copy for repeats, bits to drop */
     
    385385            while (state->have < state->nlen + state->ndist) {
    386386                for (;;) {
    387                     this = lencode[BITS(lenbits)];
    388                     if ((unsigned)(this.bits) <= bits) break;
     387                    here = lencode[BITS(lenbits)];
     388                    if ((unsigned)(here.bits) <= bits) break;
    389389                    PULLBYTE();
    390390                }
    391                 if (this.val < 16) {
    392                     NEEDBITS(this.bits);
    393                     DROPBITS(this.bits);
    394                     state->lens[state->have++] = this.val;
     391                if (here.val < 16) {
     392                    NEEDBITS(here.bits);
     393                    DROPBITS(here.bits);
     394                    state->lens[state->have++] = here.val;
    395395                }
    396396                else {
    397                     if (this.val == 16) {
    398                         NEEDBITS(this.bits + 2);
    399                         DROPBITS(this.bits);
     397                    if (here.val == 16) {
     398                        NEEDBITS(here.bits + 2);
     399                        DROPBITS(here.bits);
    400400                        if (state->have == 0) {
    401401                            strm->msg = (char *)"invalid bit length repeat";
     
    407407                        DROPBITS(2);
    408408                    }
    409                     else if (this.val == 17) {
    410                         NEEDBITS(this.bits + 3);
    411                         DROPBITS(this.bits);
     409                    else if (here.val == 17) {
     410                        NEEDBITS(here.bits + 3);
     411                        DROPBITS(here.bits);
    412412                        len = 0;
    413413                        copy = 3 + BITS(3);
     
    415415                    }
    416416                    else {
    417                         NEEDBITS(this.bits + 7);
    418                         DROPBITS(this.bits);
     417                        NEEDBITS(here.bits + 7);
     418                        DROPBITS(here.bits);
    419419                        len = 0;
    420420                        copy = 11 + BITS(7);
     
    434434            if (mode == BAD) break;
    435435
    436             /* build code tables */
     436            /* check for end-of-block code (better have one) */
     437            if (state->lens[256] == 0) {
     438                strm->msg = (char *)"invalid code -- missing end-of-block";
     439                mode = BAD;
     440                break;
     441            }
     442
     443            /* build code tables -- note: do not change the lenbits or distbits
     444               values here (9 and 6) without reading the comments in inftree9.h
     445               concerning the ENOUGH constants, which depend on those values */
    437446            state->next = state->codes;
    438447            lencode = (code const FAR *)(state->next);
     
    461470            /* get a literal, length, or end-of-block code */
    462471            for (;;) {
    463                 this = lencode[BITS(lenbits)];
    464                 if ((unsigned)(this.bits) <= bits) break;
     472                here = lencode[BITS(lenbits)];
     473                if ((unsigned)(here.bits) <= bits) break;
    465474                PULLBYTE();
    466475            }
    467             if (this.op && (this.op & 0xf0) == 0) {
    468                 last = this;
     476            if (here.op && (here.op & 0xf0) == 0) {
     477                last = here;
    469478                for (;;) {
    470                     this = lencode[last.val +
     479                    here = lencode[last.val +
    471480                            (BITS(last.bits + last.op) >> last.bits)];
    472                     if ((unsigned)(last.bits + this.bits) <= bits) break;
     481                    if ((unsigned)(last.bits + here.bits) <= bits) break;
    473482                    PULLBYTE();
    474483                }
    475484                DROPBITS(last.bits);
    476485            }
    477             DROPBITS(this.bits);
    478             length = (unsigned)this.val;
     486            DROPBITS(here.bits);
     487            length = (unsigned)here.val;
    479488
    480489            /* process literal */
    481             if (this.op == 0) {
    482                 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
     490            if (here.op == 0) {
     491                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
    483492                        "inflate:         literal '%c'\n" :
    484                         "inflate:         literal 0x%02x\n", this.val));
     493                        "inflate:         literal 0x%02x\n", here.val));
    485494                ROOM();
    486495                *put++ = (unsigned char)(length);
     
    491500
    492501            /* process end of block */
    493             if (this.op & 32) {
     502            if (here.op & 32) {
    494503                Tracevv((stderr, "inflate:         end of block\n"));
    495504                mode = TYPE;
     
    498507
    499508            /* invalid code */
    500             if (this.op & 64) {
     509            if (here.op & 64) {
    501510                strm->msg = (char *)"invalid literal/length code";
    502511                mode = BAD;
     
    505514
    506515            /* length code -- get extra bits, if any */
    507             extra = (unsigned)(this.op) & 31;
     516            extra = (unsigned)(here.op) & 31;
    508517            if (extra != 0) {
    509518                NEEDBITS(extra);
     
    515524            /* get distance code */
    516525            for (;;) {
    517                 this = distcode[BITS(distbits)];
    518                 if ((unsigned)(this.bits) <= bits) break;
     526                here = distcode[BITS(distbits)];
     527                if ((unsigned)(here.bits) <= bits) break;
    519528                PULLBYTE();
    520529            }
    521             if ((this.op & 0xf0) == 0) {
    522                 last = this;
     530            if ((here.op & 0xf0) == 0) {
     531                last = here;
    523532                for (;;) {
    524                     this = distcode[last.val +
     533                    here = distcode[last.val +
    525534                            (BITS(last.bits + last.op) >> last.bits)];
    526                     if ((unsigned)(last.bits + this.bits) <= bits) break;
     535                    if ((unsigned)(last.bits + here.bits) <= bits) break;
    527536                    PULLBYTE();
    528537                }
    529538                DROPBITS(last.bits);
    530539            }
    531             DROPBITS(this.bits);
    532             if (this.op & 64) {
     540            DROPBITS(here.bits);
     541            if (here.op & 64) {
    533542                strm->msg = (char *)"invalid distance code";
    534543                mode = BAD;
    535544                break;
    536545            }
    537             offset = (unsigned)this.val;
     546            offset = (unsigned)here.val;
    538547
    539548            /* get distance extra bits, if any */
    540             extra = (unsigned)(this.op) & 15;
     549            extra = (unsigned)(here.op) & 15;
    541550            if (extra != 0) {
    542551                NEEDBITS(extra);
Note: See TracChangeset for help on using the changeset viewer.