Changeset 8c05550 in rtems for cpukit/zlib/infback.c


Ignore:
Timestamp:
Mar 18, 2011, 10:11:07 AM (9 years ago)
Author:
Ralf Corsepius <ralf.corsepius@…>
Branches:
4.11, master
Children:
a96fad0, d159dd8
Parents:
9f5ede0
Message:

Import from zlib-1.2.4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/zlib/infback.c

    r9f5ede0 r8c05550  
    11/* infback.c -- inflate using a call-back interface
    2  * Copyright (C) 1995-2005 Mark Adler
     2 * Copyright (C) 1995-2009 Mark Adler
    33 * For conditions of distribution and use, see copyright notice in zlib.h
    44 */
     
    5656    state->wsize = 1U << windowBits;
    5757    state->window = window;
    58     state->write = 0;
     58    state->wnext = 0;
    5959    state->whave = 0;
    6060    return Z_OK;
     
    254254    unsigned copy;              /* number of stored or match bytes to copy */
    255255    unsigned char FAR *from;    /* where to copy match bytes from */
    256     code this;                  /* current decoding table entry */
     256    code here;                  /* current decoding table entry */
    257257    code last;                  /* parent table entry */
    258258    unsigned len;               /* length to copy for repeats, bits to drop */
     
    390390            while (state->have < state->nlen + state->ndist) {
    391391                for (;;) {
    392                     this = state->lencode[BITS(state->lenbits)];
    393                     if ((unsigned)(this.bits) <= bits) break;
     392                    here = state->lencode[BITS(state->lenbits)];
     393                    if ((unsigned)(here.bits) <= bits) break;
    394394                    PULLBYTE();
    395395                }
    396                 if (this.val < 16) {
    397                     NEEDBITS(this.bits);
    398                     DROPBITS(this.bits);
    399                     state->lens[state->have++] = this.val;
     396                if (here.val < 16) {
     397                    NEEDBITS(here.bits);
     398                    DROPBITS(here.bits);
     399                    state->lens[state->have++] = here.val;
    400400                }
    401401                else {
    402                     if (this.val == 16) {
    403                         NEEDBITS(this.bits + 2);
    404                         DROPBITS(this.bits);
     402                    if (here.val == 16) {
     403                        NEEDBITS(here.bits + 2);
     404                        DROPBITS(here.bits);
    405405                        if (state->have == 0) {
    406406                            strm->msg = (char *)"invalid bit length repeat";
     
    412412                        DROPBITS(2);
    413413                    }
    414                     else if (this.val == 17) {
    415                         NEEDBITS(this.bits + 3);
    416                         DROPBITS(this.bits);
     414                    else if (here.val == 17) {
     415                        NEEDBITS(here.bits + 3);
     416                        DROPBITS(here.bits);
    417417                        len = 0;
    418418                        copy = 3 + BITS(3);
     
    420420                    }
    421421                    else {
    422                         NEEDBITS(this.bits + 7);
    423                         DROPBITS(this.bits);
     422                        NEEDBITS(here.bits + 7);
     423                        DROPBITS(here.bits);
    424424                        len = 0;
    425425                        copy = 11 + BITS(7);
     
    439439            if (state->mode == BAD) break;
    440440
    441             /* build code tables */
     441            /* check for end-of-block code (better have one) */
     442            if (state->lens[256] == 0) {
     443                strm->msg = (char *)"invalid code -- missing end-of-block";
     444                state->mode = BAD;
     445                break;
     446            }
     447
     448            /* build code tables -- note: do not change the lenbits or distbits
     449               values here (9 and 6) without reading the comments in inftrees.h
     450               concerning the ENOUGH constants, which depend on those values */
    442451            state->next = state->codes;
    443452            state->lencode = (code const FAR *)(state->next);
     
    475484            /* get a literal, length, or end-of-block code */
    476485            for (;;) {
    477                 this = state->lencode[BITS(state->lenbits)];
    478                 if ((unsigned)(this.bits) <= bits) break;
     486                here = state->lencode[BITS(state->lenbits)];
     487                if ((unsigned)(here.bits) <= bits) break;
    479488                PULLBYTE();
    480489            }
    481             if (this.op && (this.op & 0xf0) == 0) {
    482                 last = this;
     490            if (here.op && (here.op & 0xf0) == 0) {
     491                last = here;
    483492                for (;;) {
    484                     this = state->lencode[last.val +
     493                    here = state->lencode[last.val +
    485494                            (BITS(last.bits + last.op) >> last.bits)];
    486                     if ((unsigned)(last.bits + this.bits) <= bits) break;
     495                    if ((unsigned)(last.bits + here.bits) <= bits) break;
    487496                    PULLBYTE();
    488497                }
    489498                DROPBITS(last.bits);
    490499            }
    491             DROPBITS(this.bits);
    492             state->length = (unsigned)this.val;
     500            DROPBITS(here.bits);
     501            state->length = (unsigned)here.val;
    493502
    494503            /* process literal */
    495             if (this.op == 0) {
    496                 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
     504            if (here.op == 0) {
     505                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
    497506                        "inflate:         literal '%c'\n" :
    498                         "inflate:         literal 0x%02x\n", this.val));
     507                        "inflate:         literal 0x%02x\n", here.val));
    499508                ROOM();
    500509                *put++ = (unsigned char)(state->length);
     
    505514
    506515            /* process end of block */
    507             if (this.op & 32) {
     516            if (here.op & 32) {
    508517                Tracevv((stderr, "inflate:         end of block\n"));
    509518                state->mode = TYPE;
     
    512521
    513522            /* invalid code */
    514             if (this.op & 64) {
     523            if (here.op & 64) {
    515524                strm->msg = (char *)"invalid literal/length code";
    516525                state->mode = BAD;
     
    519528
    520529            /* length code -- get extra bits, if any */
    521             state->extra = (unsigned)(this.op) & 15;
     530            state->extra = (unsigned)(here.op) & 15;
    522531            if (state->extra != 0) {
    523532                NEEDBITS(state->extra);
     
    529538            /* get distance code */
    530539            for (;;) {
    531                 this = state->distcode[BITS(state->distbits)];
    532                 if ((unsigned)(this.bits) <= bits) break;
     540                here = state->distcode[BITS(state->distbits)];
     541                if ((unsigned)(here.bits) <= bits) break;
    533542                PULLBYTE();
    534543            }
    535             if ((this.op & 0xf0) == 0) {
    536                 last = this;
     544            if ((here.op & 0xf0) == 0) {
     545                last = here;
    537546                for (;;) {
    538                     this = state->distcode[last.val +
     547                    here = state->distcode[last.val +
    539548                            (BITS(last.bits + last.op) >> last.bits)];
    540                     if ((unsigned)(last.bits + this.bits) <= bits) break;
     549                    if ((unsigned)(last.bits + here.bits) <= bits) break;
    541550                    PULLBYTE();
    542551                }
    543552                DROPBITS(last.bits);
    544553            }
    545             DROPBITS(this.bits);
    546             if (this.op & 64) {
     554            DROPBITS(here.bits);
     555            if (here.op & 64) {
    547556                strm->msg = (char *)"invalid distance code";
    548557                state->mode = BAD;
    549558                break;
    550559            }
    551             state->offset = (unsigned)this.val;
     560            state->offset = (unsigned)here.val;
    552561
    553562            /* get distance extra bits, if any */
    554             state->extra = (unsigned)(this.op) & 15;
     563            state->extra = (unsigned)(here.op) & 15;
    555564            if (state->extra != 0) {
    556565                NEEDBITS(state->extra);
Note: See TracChangeset for help on using the changeset viewer.