RHEL4/lib/inflate.c
<<
>>
Prefs
   1#define DEBG(x)
   2#define DEBG1(x)
   3/* inflate.c -- Not copyrighted 1992 by Mark Adler
   4   version c10p1, 10 January 1993 */
   5
   6/* 
   7 * Adapted for booting Linux by Hannu Savolainen 1993
   8 * based on gzip-1.0.3 
   9 *
  10 * Nicolas Pitre <nico@cam.org>, 1999/04/14 :
  11 *   Little mods for all variable to reside either into rodata or bss segments
  12 *   by marking constant variables with 'const' and initializing all the others
  13 *   at run-time only.  This allows for the kernel uncompressor to run
  14 *   directly from Flash or ROM memory on embedded systems.
  15 */
  16
  17/*
  18   Inflate deflated (PKZIP's method 8 compressed) data.  The compression
  19   method searches for as much of the current string of bytes (up to a
  20   length of 258) in the previous 32 K bytes.  If it doesn't find any
  21   matches (of at least length 3), it codes the next byte.  Otherwise, it
  22   codes the length of the matched string and its distance backwards from
  23   the current position.  There is a single Huffman code that codes both
  24   single bytes (called "literals") and match lengths.  A second Huffman
  25   code codes the distance information, which follows a length code.  Each
  26   length or distance code actually represents a base value and a number
  27   of "extra" (sometimes zero) bits to get to add to the base value.  At
  28   the end of each deflated block is a special end-of-block (EOB) literal/
  29   length code.  The decoding process is basically: get a literal/length
  30   code; if EOB then done; if a literal, emit the decoded byte; if a
  31   length then get the distance and emit the referred-to bytes from the
  32   sliding window of previously emitted data.
  33
  34   There are (currently) three kinds of inflate blocks: stored, fixed, and
  35   dynamic.  The compressor deals with some chunk of data at a time, and
  36   decides which method to use on a chunk-by-chunk basis.  A chunk might
  37   typically be 32 K or 64 K.  If the chunk is incompressible, then the
  38   "stored" method is used.  In this case, the bytes are simply stored as
  39   is, eight bits per byte, with none of the above coding.  The bytes are
  40   preceded by a count, since there is no longer an EOB code.
  41
  42   If the data is compressible, then either the fixed or dynamic methods
  43   are used.  In the dynamic method, the compressed data is preceded by
  44   an encoding of the literal/length and distance Huffman codes that are
  45   to be used to decode this block.  The representation is itself Huffman
  46   coded, and so is preceded by a description of that code.  These code
  47   descriptions take up a little space, and so for small blocks, there is
  48   a predefined set of codes, called the fixed codes.  The fixed method is
  49   used if the block codes up smaller that way (usually for quite small
  50   chunks), otherwise the dynamic method is used.  In the latter case, the
  51   codes are customized to the probabilities in the current block, and so
  52   can code it much better than the pre-determined fixed codes.
  53 
  54   The Huffman codes themselves are decoded using a multi-level table
  55   lookup, in order to maximize the speed of decoding plus the speed of
  56   building the decoding tables.  See the comments below that precede the
  57   lbits and dbits tuning parameters.
  58 */
  59
  60
  61/*
  62   Notes beyond the 1.93a appnote.txt:
  63
  64   1. Distance pointers never point before the beginning of the output
  65      stream.
  66   2. Distance pointers can point back across blocks, up to 32k away.
  67   3. There is an implied maximum of 7 bits for the bit length table and
  68      15 bits for the actual data.
  69   4. If only one code exists, then it is encoded using one bit.  (Zero
  70      would be more efficient, but perhaps a little confusing.)  If two
  71      codes exist, they are coded using one bit each (0 and 1).
  72   5. There is no way of sending zero distance codes--a dummy must be
  73      sent if there are none.  (History: a pre 2.0 version of PKZIP would
  74      store blocks with no distance codes, but this was discovered to be
  75      too harsh a criterion.)  Valid only for 1.93a.  2.04c does allow
  76      zero distance codes, which is sent as one code of zero bits in
  77      length.
  78   6. There are up to 286 literal/length codes.  Code 256 represents the
  79      end-of-block.  Note however that the static length tree defines
  80      288 codes just to fill out the Huffman codes.  Codes 286 and 287
  81      cannot be used though, since there is no length base or extra bits
  82      defined for them.  Similarly, there are up to 30 distance codes.
  83      However, static trees define 32 codes (all 5 bits) to fill out the
  84      Huffman codes, but the last two had better not show up in the data.
  85   7. Unzip can check dynamic Huffman blocks for complete code sets.
  86      The exception is that a single code would not be complete (see #4).
  87   8. The five bits following the block type is really the number of
  88      literal codes sent minus 257.
  89   9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
  90      (1+6+6).  Therefore, to output three times the length, you output
  91      three codes (1+1+1), whereas to output four times the same length,
  92      you only need two codes (1+3).  Hmm.
  93  10. In the tree reconstruction algorithm, Code = Code + Increment
  94      only if BitLength(i) is not zero.  (Pretty obvious.)
  95  11. Correction: 4 Bits: # of Bit Length codes - 4     (4 - 19)
  96  12. Note: length code 284 can represent 227-258, but length code 285
  97      really is 258.  The last length deserves its own, short code
  98      since it gets used a lot in very redundant files.  The length
  99      258 is special since 258 - 3 (the min match length) is 255.
 100  13. The literal/length and distance code bit lengths are read as a
 101      single stream of lengths.  It is possible (and advantageous) for
 102      a repeat code (16, 17, or 18) to go across the boundary between
 103      the two sets of lengths.
 104 */
 105#include <linux/compiler.h>
 106
 107#ifdef RCSID
 108static char rcsid[] = "#Id: inflate.c,v 0.14 1993/06/10 13:27:04 jloup Exp #";
 109#endif
 110
 111#ifndef STATIC
 112
 113#if defined(STDC_HEADERS) || defined(HAVE_STDLIB_H)
 114#  include <sys/types.h>
 115#  include <stdlib.h>
 116#endif
 117
 118#include "gzip.h"
 119#define STATIC
 120#endif /* !STATIC */
 121        
 122#define slide window
 123
 124/* Huffman code lookup table entry--this entry is four bytes for machines
 125   that have 16-bit pointers (e.g. PC's in the small or medium model).
 126   Valid extra bits are 0..13.  e == 15 is EOB (end of block), e == 16
 127   means that v is a literal, 16 < e < 32 means that v is a pointer to
 128   the next table, which codes e - 16 bits, and lastly e == 99 indicates
 129   an unused code.  If a code with e == 99 is looked up, this implies an
 130   error in the data. */
 131struct huft {
 132  uch e;                /* number of extra bits or operation */
 133  uch b;                /* number of bits in this code or subcode */
 134  union {
 135    ush n;              /* literal, length base, or distance base */
 136    struct huft *t;     /* pointer to next level of table */
 137  } v;
 138};
 139
 140
 141/* Function prototypes */
 142STATIC int huft_build OF((unsigned *, unsigned, unsigned, 
 143                const ush *, const ush *, struct huft **, int *));
 144STATIC int huft_free OF((struct huft *));
 145STATIC int inflate_codes OF((struct huft *, struct huft *, int, int));
 146STATIC int inflate_stored OF((void));
 147STATIC int inflate_fixed OF((void));
 148STATIC int inflate_dynamic OF((void));
 149STATIC int inflate_block OF((int *));
 150STATIC int inflate OF((void));
 151
 152
 153/* The inflate algorithm uses a sliding 32 K byte window on the uncompressed
 154   stream to find repeated byte strings.  This is implemented here as a
 155   circular buffer.  The index is updated simply by incrementing and then
 156   ANDing with 0x7fff (32K-1). */
 157/* It is left to other modules to supply the 32 K area.  It is assumed
 158   to be usable as if it were declared "uch slide[32768];" or as just
 159   "uch *slide;" and then malloc'ed in the latter case.  The definition
 160   must be in unzip.h, included above. */
 161/* unsigned wp;             current position in slide */
 162#define wp outcnt
 163#define flush_output(w) (wp=(w),flush_window())
 164
 165/* Tables for deflate from PKZIP's appnote.txt. */
 166static const unsigned border[] = {    /* Order of the bit length code lengths */
 167        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
 168static const ush cplens[] = {         /* Copy lengths for literal codes 257..285 */
 169        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
 170        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
 171        /* note: see note #13 above about the 258 in this list. */
 172static const ush cplext[] = {         /* Extra bits for literal codes 257..285 */
 173        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
 174        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
 175static const ush cpdist[] = {         /* Copy offsets for distance codes 0..29 */
 176        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 177        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
 178        8193, 12289, 16385, 24577};
 179static const ush cpdext[] = {         /* Extra bits for distance codes */
 180        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
 181        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
 182        12, 12, 13, 13};
 183
 184
 185
 186/* Macros for inflate() bit peeking and grabbing.
 187   The usage is:
 188   
 189        NEEDBITS(j)
 190        x = b & mask_bits[j];
 191        DUMPBITS(j)
 192
 193   where NEEDBITS makes sure that b has at least j bits in it, and
 194   DUMPBITS removes the bits from b.  The macros use the variable k
 195   for the number of bits in b.  Normally, b and k are register
 196   variables for speed, and are initialized at the beginning of a
 197   routine that uses these macros from a global bit buffer and count.
 198
 199   If we assume that EOB will be the longest code, then we will never
 200   ask for bits with NEEDBITS that are beyond the end of the stream.
 201   So, NEEDBITS should not read any more bytes than are needed to
 202   meet the request.  Then no bytes need to be "returned" to the buffer
 203   at the end of the last block.
 204
 205   However, this assumption is not true for fixed blocks--the EOB code
 206   is 7 bits, but the other literal/length codes can be 8 or 9 bits.
 207   (The EOB code is shorter than other codes because fixed blocks are
 208   generally short.  So, while a block always has an EOB, many other
 209   literal/length codes have a significantly lower probability of
 210   showing up at all.)  However, by making the first table have a
 211   lookup of seven bits, the EOB code will be found in that first
 212   lookup, and so will not require that too many bits be pulled from
 213   the stream.
 214 */
 215
 216STATIC ulg bb;                         /* bit buffer */
 217STATIC unsigned bk;                    /* bits in bit buffer */
 218
 219STATIC const ush mask_bits[] = {
 220    0x0000,
 221    0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
 222    0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
 223};
 224
 225#define NEXTBYTE()  ({ int v = get_byte(); if (v < 0) goto underrun; (uch)v; })
 226#define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE())<<k;k+=8;}}
 227#define DUMPBITS(n) {b>>=(n);k-=(n);}
 228
 229
 230/*
 231   Huffman code decoding is performed using a multi-level table lookup.
 232   The fastest way to decode is to simply build a lookup table whose
 233   size is determined by the longest code.  However, the time it takes
 234   to build this table can also be a factor if the data being decoded
 235   is not very long.  The most common codes are necessarily the
 236   shortest codes, so those codes dominate the decoding time, and hence
 237   the speed.  The idea is you can have a shorter table that decodes the
 238   shorter, more probable codes, and then point to subsidiary tables for
 239   the longer codes.  The time it costs to decode the longer codes is
 240   then traded against the time it takes to make longer tables.
 241
 242   This results of this trade are in the variables lbits and dbits
 243   below.  lbits is the number of bits the first level table for literal/
 244   length codes can decode in one step, and dbits is the same thing for
 245   the distance codes.  Subsequent tables are also less than or equal to
 246   those sizes.  These values may be adjusted either when all of the
 247   codes are shorter than that, in which case the longest code length in
 248   bits is used, or when the shortest code is *longer* than the requested
 249   table size, in which case the length of the shortest code in bits is
 250   used.
 251
 252   There are two different values for the two tables, since they code a
 253   different number of possibilities each.  The literal/length table
 254   codes 286 possible values, or in a flat code, a little over eight
 255   bits.  The distance table codes 30 possible values, or a little less
 256   than five bits, flat.  The optimum values for speed end up being
 257   about one bit more than those, so lbits is 8+1 and dbits is 5+1.
 258   The optimum values may differ though from machine to machine, and
 259   possibly even between compilers.  Your mileage may vary.
 260 */
 261
 262
 263STATIC const int lbits = 9;          /* bits in base literal/length lookup table */
 264STATIC const int dbits = 6;          /* bits in base distance lookup table */
 265
 266
 267/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
 268#define BMAX 16         /* maximum bit length of any code (16 for explode) */
 269#define N_MAX 288       /* maximum number of codes in any set */
 270
 271
 272STATIC unsigned hufts;         /* track memory usage */
 273
 274
 275STATIC int huft_build(
 276        unsigned *b,            /* code lengths in bits (all assumed <= BMAX) */
 277        unsigned n,             /* number of codes (assumed <= N_MAX) */
 278        unsigned s,             /* number of simple-valued codes (0..s-1) */
 279        const ush *d,           /* list of base values for non-simple codes */
 280        const ush *e,           /* list of extra bits for non-simple codes */
 281        struct huft **t,        /* result: starting table */
 282        int *m                  /* maximum lookup bits, returns actual */
 283        )
 284/* Given a list of code lengths and a maximum table size, make a set of
 285   tables to decode that set of codes.  Return zero on success, one if
 286   the given code set is incomplete (the tables are still built in this
 287   case), two if the input is invalid (all zero length codes or an
 288   oversubscribed set of lengths), and three if not enough memory. */
 289{
 290  unsigned a;                   /* counter for codes of length k */
 291  unsigned c[BMAX+1];           /* bit length count table */
 292  unsigned f;                   /* i repeats in table every f entries */
 293  int g;                        /* maximum code length */
 294  int h;                        /* table level */
 295  register unsigned i;          /* counter, current code */
 296  register unsigned j;          /* counter */
 297  register int k;               /* number of bits in current code */
 298  int l;                        /* bits per table (returned in m) */
 299  register unsigned *p;         /* pointer into c[], b[], or v[] */
 300  register struct huft *q;      /* points to current table */
 301  struct huft r;                /* table entry for structure assignment */
 302  struct huft *u[BMAX];         /* table stack */
 303  unsigned v[N_MAX];            /* values in order of bit length */
 304  register int w;               /* bits before this table == (l * h) */
 305  unsigned x[BMAX+1];           /* bit offsets, then code stack */
 306  unsigned *xp;                 /* pointer into x */
 307  int y;                        /* number of dummy codes added */
 308  unsigned z;                   /* number of entries in current table */
 309
 310DEBG("huft1 ");
 311
 312  /* Generate counts for each bit length */
 313  memzero(c, sizeof(c));
 314  p = b;  i = n;
 315  do {
 316    Tracecv(*p, (stderr, (n-i >= ' ' && n-i <= '~' ? "%c %d\n" : "0x%x %d\n"), 
 317            n-i, *p));
 318    c[*p]++;                    /* assume all entries <= BMAX */
 319    p++;                      /* Can't combine with above line (Solaris bug) */
 320  } while (--i);
 321  if (c[0] == n)                /* null input--all zero length codes */
 322  {
 323    *t = (struct huft *)NULL;
 324    *m = 0;
 325    return 0;
 326  }
 327
 328DEBG("huft2 ");
 329
 330  /* Find minimum and maximum length, bound *m by those */
 331  l = *m;
 332  for (j = 1; j <= BMAX; j++)
 333    if (c[j])
 334      break;
 335  k = j;                        /* minimum code length */
 336  if ((unsigned)l < j)
 337    l = j;
 338  for (i = BMAX; i; i--)
 339    if (c[i])
 340      break;
 341  g = i;                        /* maximum code length */
 342  if ((unsigned)l > i)
 343    l = i;
 344  *m = l;
 345
 346DEBG("huft3 ");
 347
 348  /* Adjust last length count to fill out codes, if needed */
 349  for (y = 1 << j; j < i; j++, y <<= 1)
 350    if ((y -= c[j]) < 0)
 351      return 2;                 /* bad input: more codes than bits */
 352  if ((y -= c[i]) < 0)
 353    return 2;
 354  c[i] += y;
 355
 356DEBG("huft4 ");
 357
 358  /* Generate starting offsets into the value table for each length */
 359  x[1] = j = 0;
 360  p = c + 1;  xp = x + 2;
 361  while (--i) {                 /* note that i == g from above */
 362    *xp++ = (j += *p++);
 363  }
 364
 365DEBG("huft5 ");
 366
 367  /* Make a table of values in order of bit lengths */
 368  p = b;  i = 0;
 369  do {
 370    if ((j = *p++) != 0)
 371      v[x[j]++] = i;
 372  } while (++i < n);
 373  n = x[g];                     /* set n to length of v */
 374
 375DEBG("h6 ");
 376
 377  /* Generate the Huffman codes and for each, make the table entries */
 378  x[0] = i = 0;                 /* first Huffman code is zero */
 379  p = v;                        /* grab values in bit order */
 380  h = -1;                       /* no tables yet--level -1 */
 381  w = -l;                       /* bits decoded == (l * h) */
 382  u[0] = (struct huft *)NULL;   /* just to keep compilers happy */
 383  q = (struct huft *)NULL;      /* ditto */
 384  z = 0;                        /* ditto */
 385DEBG("h6a ");
 386
 387  /* go through the bit lengths (k already is bits in shortest code) */
 388  for (; k <= g; k++)
 389  {
 390DEBG("h6b ");
 391    a = c[k];
 392    while (a--)
 393    {
 394DEBG("h6b1 ");
 395      /* here i is the Huffman code of length k bits for value *p */
 396      /* make tables up to required level */
 397      while (k > w + l)
 398      {
 399DEBG1("1 ");
 400        h++;
 401        w += l;                 /* previous table always l bits */
 402
 403        /* compute minimum size table less than or equal to l bits */
 404        z = (z = g - w) > (unsigned)l ? l : z;  /* upper limit on table size */
 405        if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
 406        {                       /* too few codes for k-w bit table */
 407DEBG1("2 ");
 408          f -= a + 1;           /* deduct codes from patterns left */
 409          xp = c + k;
 410          if (j < z)
 411            while (++j < z)       /* try smaller tables up to z bits */
 412            {
 413              if ((f <<= 1) <= *++xp)
 414                break;            /* enough codes to use up j bits */
 415              f -= *xp;           /* else deduct codes from patterns */
 416            }
 417        }
 418DEBG1("3 ");
 419        z = 1 << j;             /* table entries for j-bit table */
 420
 421        /* allocate and link in new table */
 422        if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) ==
 423            (struct huft *)NULL)
 424        {
 425          if (h)
 426            huft_free(u[0]);
 427          return 3;             /* not enough memory */
 428        }
 429DEBG1("4 ");
 430        hufts += z + 1;         /* track memory usage */
 431        *t = q + 1;             /* link to list for huft_free() */
 432        *(t = &(q->v.t)) = (struct huft *)NULL;
 433        u[h] = ++q;             /* table starts after link */
 434
 435DEBG1("5 ");
 436        /* connect to last table, if there is one */
 437        if (h)
 438        {
 439          x[h] = i;             /* save pattern for backing up */
 440          r.b = (uch)l;         /* bits to dump before this table */
 441          r.e = (uch)(16 + j);  /* bits in this table */
 442          r.v.t = q;            /* pointer to this table */
 443          j = i >> (w - l);     /* (get around Turbo C bug) */
 444          u[h-1][j] = r;        /* connect to last table */
 445        }
 446DEBG1("6 ");
 447      }
 448DEBG("h6c ");
 449
 450      /* set up table entry in r */
 451      r.b = (uch)(k - w);
 452      if (p >= v + n)
 453        r.e = 99;               /* out of values--invalid code */
 454      else if (*p < s)
 455      {
 456        r.e = (uch)(*p < 256 ? 16 : 15);    /* 256 is end-of-block code */
 457        r.v.n = (ush)(*p);             /* simple code is just the value */
 458        p++;                           /* one compiler does not like *p++ */
 459      }
 460      else
 461      {
 462        r.e = (uch)e[*p - s];   /* non-simple--look up in lists */
 463        r.v.n = d[*p++ - s];
 464      }
 465DEBG("h6d ");
 466
 467      /* fill code-like entries with r */
 468      f = 1 << (k - w);
 469      for (j = i >> w; j < z; j += f)
 470        q[j] = r;
 471
 472      /* backwards increment the k-bit code i */
 473      for (j = 1 << (k - 1); i & j; j >>= 1)
 474        i ^= j;
 475      i ^= j;
 476
 477      /* backup over finished tables */
 478      while ((i & ((1 << w) - 1)) != x[h])
 479      {
 480        h--;                    /* don't need to update q */
 481        w -= l;
 482      }
 483DEBG("h6e ");
 484    }
 485DEBG("h6f ");
 486  }
 487
 488DEBG("huft7 ");
 489
 490  /* Return true (1) if we were given an incomplete table */
 491  return y != 0 && g != 1;
 492}
 493
 494
 495
 496STATIC int huft_free(
 497        struct huft *t         /* table to free */
 498        )
 499/* Free the malloc'ed tables built by huft_build(), which makes a linked
 500   list of the tables it made, with the links in a dummy first entry of
 501   each table. */
 502{
 503  register struct huft *p, *q;
 504
 505
 506  /* Go through linked list, freeing from the malloced (t[-1]) address. */
 507  p = t;
 508  while (p != (struct huft *)NULL)
 509  {
 510    q = (--p)->v.t;
 511    free((char*)p);
 512    p = q;
 513  } 
 514  return 0;
 515}
 516
 517
 518STATIC int inflate_codes(
 519        struct huft *tl,    /* literal/length decoder tables */
 520        struct huft *td,    /* distance decoder tables */
 521        int bl,             /* number of bits decoded by tl[] */
 522        int bd              /* number of bits decoded by td[] */
 523        )
 524/* inflate (decompress) the codes in a deflated (compressed) block.
 525   Return an error code or zero if it all goes ok. */
 526{
 527  register unsigned e;  /* table entry flag/number of extra bits */
 528  unsigned n, d;        /* length and index for copy */
 529  unsigned w;           /* current window position */
 530  struct huft *t;       /* pointer to table entry */
 531  unsigned ml, md;      /* masks for bl and bd bits */
 532  register ulg b;       /* bit buffer */
 533  register unsigned k;  /* number of bits in bit buffer */
 534
 535
 536  /* make local copies of globals */
 537  b = bb;                       /* initialize bit buffer */
 538  k = bk;
 539  w = wp;                       /* initialize window position */
 540
 541  /* inflate the coded data */
 542  ml = mask_bits[bl];           /* precompute masks for speed */
 543  md = mask_bits[bd];
 544  for (;;)                      /* do until end of block */
 545  {
 546    NEEDBITS((unsigned)bl)
 547    if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
 548      do {
 549        if (e == 99)
 550          return 1;
 551        DUMPBITS(t->b)
 552        e -= 16;
 553        NEEDBITS(e)
 554      } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
 555    DUMPBITS(t->b)
 556    if (e == 16)                /* then it's a literal */
 557    {
 558      slide[w++] = (uch)t->v.n;
 559      Tracevv((stderr, "%c", slide[w-1]));
 560      if (w == WSIZE)
 561      {
 562        flush_output(w);
 563        w = 0;
 564      }
 565    }
 566    else                        /* it's an EOB or a length */
 567    {
 568      /* exit if end of block */
 569      if (e == 15)
 570        break;
 571
 572      /* get length of block to copy */
 573      NEEDBITS(e)
 574      n = t->v.n + ((unsigned)b & mask_bits[e]);
 575      DUMPBITS(e);
 576
 577      /* decode distance of block to copy */
 578      NEEDBITS((unsigned)bd)
 579      if ((e = (t = td + ((unsigned)b & md))->e) > 16)
 580        do {
 581          if (e == 99)
 582            return 1;
 583          DUMPBITS(t->b)
 584          e -= 16;
 585          NEEDBITS(e)
 586        } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16);
 587      DUMPBITS(t->b)
 588      NEEDBITS(e)
 589      d = w - t->v.n - ((unsigned)b & mask_bits[e]);
 590      DUMPBITS(e)
 591      Tracevv((stderr,"\\[%d,%d]", w-d, n));
 592
 593      /* do the copy */
 594      do {
 595        n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e);
 596#if !defined(NOMEMCPY) && !defined(DEBUG)
 597        if (w - d >= e)         /* (this test assumes unsigned comparison) */
 598        {
 599          memcpy(slide + w, slide + d, e);
 600          w += e;
 601          d += e;
 602        }
 603        else                      /* do it slow to avoid memcpy() overlap */
 604#endif /* !NOMEMCPY */
 605          do {
 606            slide[w++] = slide[d++];
 607            Tracevv((stderr, "%c", slide[w-1]));
 608          } while (--e);
 609        if (w == WSIZE)
 610        {
 611          flush_output(w);
 612          w = 0;
 613        }
 614      } while (n);
 615    }
 616  }
 617
 618
 619  /* restore the globals from the locals */
 620  wp = w;                       /* restore global window pointer */
 621  bb = b;                       /* restore global bit buffer */
 622  bk = k;
 623
 624  /* done */
 625  return 0;
 626
 627 underrun:
 628  return 4;                     /* Input underrun */
 629}
 630
 631
 632
 633STATIC int inflate_stored(void)
 634/* "decompress" an inflated type 0 (stored) block. */
 635{
 636  unsigned n;           /* number of bytes in block */
 637  unsigned w;           /* current window position */
 638  register ulg b;       /* bit buffer */
 639  register unsigned k;  /* number of bits in bit buffer */
 640
 641DEBG("<stor");
 642
 643  /* make local copies of globals */
 644  b = bb;                       /* initialize bit buffer */
 645  k = bk;
 646  w = wp;                       /* initialize window position */
 647
 648
 649  /* go to byte boundary */
 650  n = k & 7;
 651  DUMPBITS(n);
 652
 653
 654  /* get the length and its complement */
 655  NEEDBITS(16)
 656  n = ((unsigned)b & 0xffff);
 657  DUMPBITS(16)
 658  NEEDBITS(16)
 659  if (n != (unsigned)((~b) & 0xffff))
 660    return 1;                   /* error in compressed data */
 661  DUMPBITS(16)
 662
 663
 664  /* read and output the compressed data */
 665  while (n--)
 666  {
 667    NEEDBITS(8)
 668    slide[w++] = (uch)b;
 669    if (w == WSIZE)
 670    {
 671      flush_output(w);
 672      w = 0;
 673    }
 674    DUMPBITS(8)
 675  }
 676
 677
 678  /* restore the globals from the locals */
 679  wp = w;                       /* restore global window pointer */
 680  bb = b;                       /* restore global bit buffer */
 681  bk = k;
 682
 683  DEBG(">");
 684  return 0;
 685
 686 underrun:
 687  return 4;                     /* Input underrun */
 688}
 689
 690
 691/*
 692 * We use `noinline' here to prevent gcc-3.5 from using too much stack space
 693 */
 694STATIC int noinline inflate_fixed(void)
 695/* decompress an inflated type 1 (fixed Huffman codes) block.  We should
 696   either replace this with a custom decoder, or at least precompute the
 697   Huffman tables. */
 698{
 699  int i;                /* temporary variable */
 700  struct huft *tl;      /* literal/length code table */
 701  struct huft *td;      /* distance code table */
 702  int bl;               /* lookup bits for tl */
 703  int bd;               /* lookup bits for td */
 704  unsigned l[288];      /* length list for huft_build */
 705
 706DEBG("<fix");
 707
 708  /* set up literal table */
 709  for (i = 0; i < 144; i++)
 710    l[i] = 8;
 711  for (; i < 256; i++)
 712    l[i] = 9;
 713  for (; i < 280; i++)
 714    l[i] = 7;
 715  for (; i < 288; i++)          /* make a complete, but wrong code set */
 716    l[i] = 8;
 717  bl = 7;
 718  if ((i = huft_build(l, 288, 257, cplens, cplext, &tl, &bl)) != 0)
 719    return i;
 720
 721
 722  /* set up distance table */
 723  for (i = 0; i < 30; i++)      /* make an incomplete code set */
 724    l[i] = 5;
 725  bd = 5;
 726  if ((i = huft_build(l, 30, 0, cpdist, cpdext, &td, &bd)) > 1)
 727  {
 728    huft_free(tl);
 729
 730    DEBG(">");
 731    return i;
 732  }
 733
 734
 735  /* decompress until an end-of-block code */
 736  if (inflate_codes(tl, td, bl, bd))
 737    return 1;
 738
 739
 740  /* free the decoding tables, return */
 741  huft_free(tl);
 742  huft_free(td);
 743  return 0;
 744}
 745
 746
 747/*
 748 * We use `noinline' here to prevent gcc-3.5 from using too much stack space
 749 */
 750STATIC int noinline inflate_dynamic(void)
 751/* decompress an inflated type 2 (dynamic Huffman codes) block. */
 752{
 753  int i;                /* temporary variables */
 754  unsigned j;
 755  unsigned l;           /* last length */
 756  unsigned m;           /* mask for bit lengths table */
 757  unsigned n;           /* number of lengths to get */
 758  struct huft *tl;      /* literal/length code table */
 759  struct huft *td;      /* distance code table */
 760  int bl;               /* lookup bits for tl */
 761  int bd;               /* lookup bits for td */
 762  unsigned nb;          /* number of bit length codes */
 763  unsigned nl;          /* number of literal/length codes */
 764  unsigned nd;          /* number of distance codes */
 765#ifdef PKZIP_BUG_WORKAROUND
 766  unsigned ll[288+32];  /* literal/length and distance code lengths */
 767#else
 768  unsigned ll[286+30];  /* literal/length and distance code lengths */
 769#endif
 770  register ulg b;       /* bit buffer */
 771  register unsigned k;  /* number of bits in bit buffer */
 772
 773DEBG("<dyn");
 774
 775  /* make local bit buffer */
 776  b = bb;
 777  k = bk;
 778
 779
 780  /* read in table lengths */
 781  NEEDBITS(5)
 782  nl = 257 + ((unsigned)b & 0x1f);      /* number of literal/length codes */
 783  DUMPBITS(5)
 784  NEEDBITS(5)
 785  nd = 1 + ((unsigned)b & 0x1f);        /* number of distance codes */
 786  DUMPBITS(5)
 787  NEEDBITS(4)
 788  nb = 4 + ((unsigned)b & 0xf);         /* number of bit length codes */
 789  DUMPBITS(4)
 790#ifdef PKZIP_BUG_WORKAROUND
 791  if (nl > 288 || nd > 32)
 792#else
 793  if (nl > 286 || nd > 30)
 794#endif
 795    return 1;                   /* bad lengths */
 796
 797DEBG("dyn1 ");
 798
 799  /* read in bit-length-code lengths */
 800  for (j = 0; j < nb; j++)
 801  {
 802    NEEDBITS(3)
 803    ll[border[j]] = (unsigned)b & 7;
 804    DUMPBITS(3)
 805  }
 806  for (; j < 19; j++)
 807    ll[border[j]] = 0;
 808
 809DEBG("dyn2 ");
 810
 811  /* build decoding table for trees--single level, 7 bit lookup */
 812  bl = 7;
 813  if ((i = huft_build(ll, 19, 19, NULL, NULL, &tl, &bl)) != 0)
 814  {
 815    if (i == 1)
 816      huft_free(tl);
 817    return i;                   /* incomplete code set */
 818  }
 819
 820DEBG("dyn3 ");
 821
 822  /* read in literal and distance code lengths */
 823  n = nl + nd;
 824  m = mask_bits[bl];
 825  i = l = 0;
 826  while ((unsigned)i < n)
 827  {
 828    NEEDBITS((unsigned)bl)
 829    j = (td = tl + ((unsigned)b & m))->b;
 830    DUMPBITS(j)
 831    j = td->v.n;
 832    if (j < 16)                 /* length of code in bits (0..15) */
 833      ll[i++] = l = j;          /* save last length in l */
 834    else if (j == 16)           /* repeat last length 3 to 6 times */
 835    {
 836      NEEDBITS(2)
 837      j = 3 + ((unsigned)b & 3);
 838      DUMPBITS(2)
 839      if ((unsigned)i + j > n)
 840        return 1;
 841      while (j--)
 842        ll[i++] = l;
 843    }
 844    else if (j == 17)           /* 3 to 10 zero length codes */
 845    {
 846      NEEDBITS(3)
 847      j = 3 + ((unsigned)b & 7);
 848      DUMPBITS(3)
 849      if ((unsigned)i + j > n)
 850        return 1;
 851      while (j--)
 852        ll[i++] = 0;
 853      l = 0;
 854    }
 855    else                        /* j == 18: 11 to 138 zero length codes */
 856    {
 857      NEEDBITS(7)
 858      j = 11 + ((unsigned)b & 0x7f);
 859      DUMPBITS(7)
 860      if ((unsigned)i + j > n)
 861        return 1;
 862      while (j--)
 863        ll[i++] = 0;
 864      l = 0;
 865    }
 866  }
 867
 868DEBG("dyn4 ");
 869
 870  /* free decoding table for trees */
 871  huft_free(tl);
 872
 873DEBG("dyn5 ");
 874
 875  /* restore the global bit buffer */
 876  bb = b;
 877  bk = k;
 878
 879DEBG("dyn5a ");
 880
 881  /* build the decoding tables for literal/length and distance codes */
 882  bl = lbits;
 883  if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0)
 884  {
 885DEBG("dyn5b ");
 886    if (i == 1) {
 887      error("incomplete literal tree");
 888      huft_free(tl);
 889    }
 890    return i;                   /* incomplete code set */
 891  }
 892DEBG("dyn5c ");
 893  bd = dbits;
 894  if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0)
 895  {
 896DEBG("dyn5d ");
 897    if (i == 1) {
 898      error("incomplete distance tree");
 899#ifdef PKZIP_BUG_WORKAROUND
 900      i = 0;
 901    }
 902#else
 903      huft_free(td);
 904    }
 905    huft_free(tl);
 906    return i;                   /* incomplete code set */
 907#endif
 908  }
 909
 910DEBG("dyn6 ");
 911
 912  /* decompress until an end-of-block code */
 913  if (inflate_codes(tl, td, bl, bd))
 914    return 1;
 915
 916DEBG("dyn7 ");
 917
 918  /* free the decoding tables, return */
 919  huft_free(tl);
 920  huft_free(td);
 921
 922  DEBG(">");
 923  return 0;
 924
 925 underrun:
 926  return 4;                     /* Input underrun */
 927}
 928
 929
 930
 931STATIC int inflate_block(
 932        int *e                  /* last block flag */
 933        )
 934/* decompress an inflated block */
 935{
 936  unsigned t;           /* block type */
 937  register ulg b;       /* bit buffer */
 938  register unsigned k;  /* number of bits in bit buffer */
 939
 940  DEBG("<blk");
 941
 942  /* make local bit buffer */
 943  b = bb;
 944  k = bk;
 945
 946
 947  /* read in last block bit */
 948  NEEDBITS(1)
 949  *e = (int)b & 1;
 950  DUMPBITS(1)
 951
 952
 953  /* read in block type */
 954  NEEDBITS(2)
 955  t = (unsigned)b & 3;
 956  DUMPBITS(2)
 957
 958
 959  /* restore the global bit buffer */
 960  bb = b;
 961  bk = k;
 962
 963  /* inflate that block type */
 964  if (t == 2)
 965    return inflate_dynamic();
 966  if (t == 0)
 967    return inflate_stored();
 968  if (t == 1)
 969    return inflate_fixed();
 970
 971  DEBG(">");
 972
 973  /* bad block type */
 974  return 2;
 975
 976 underrun:
 977  return 4;                     /* Input underrun */
 978}
 979
 980
 981
 982STATIC int inflate(void)
 983/* decompress an inflated entry */
 984{
 985  int e;                /* last block flag */
 986  int r;                /* result code */
 987  unsigned h;           /* maximum struct huft's malloc'ed */
 988  void *ptr;
 989
 990  /* initialize window, bit buffer */
 991  wp = 0;
 992  bk = 0;
 993  bb = 0;
 994
 995
 996  /* decompress until the last block */
 997  h = 0;
 998  do {
 999    hufts = 0;
1000    gzip_mark(&ptr);
1001    if ((r = inflate_block(&e)) != 0) {
1002      gzip_release(&ptr);           
1003      return r;
1004    }
1005    gzip_release(&ptr);
1006    if (hufts > h)
1007      h = hufts;
1008  } while (!e);
1009
1010  /* Undo too much lookahead. The next read will be byte aligned so we
1011   * can discard unused bits in the last meaningful byte.
1012   */
1013  while (bk >= 8) {
1014    bk -= 8;
1015    inptr--;
1016  }
1017
1018  /* flush out slide */
1019  flush_output(wp);
1020
1021
1022  /* return success */
1023#ifdef DEBUG
1024  fprintf(stderr, "<%u> ", h);
1025#endif /* DEBUG */
1026  return 0;
1027}
1028
1029/**********************************************************************
1030 *
1031 * The following are support routines for inflate.c
1032 *
1033 **********************************************************************/
1034
1035static ulg crc_32_tab[256];
1036static ulg crc;         /* initialized in makecrc() so it'll reside in bss */
1037#define CRC_VALUE (crc ^ 0xffffffffUL)
1038
1039/*
1040 * Code to compute the CRC-32 table. Borrowed from 
1041 * gzip-1.0.3/makecrc.c.
1042 */
1043
1044static void
1045makecrc(void)
1046{
1047/* Not copyrighted 1990 Mark Adler      */
1048
1049  unsigned long c;      /* crc shift register */
1050  unsigned long e;      /* polynomial exclusive-or pattern */
1051  int i;                /* counter for all possible eight bit values */
1052  int k;                /* byte being shifted into crc apparatus */
1053
1054  /* terms of polynomial defining this crc (except x^32): */
1055  static const int p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
1056
1057  /* Make exclusive-or pattern from polynomial */
1058  e = 0;
1059  for (i = 0; i < sizeof(p)/sizeof(int); i++)
1060    e |= 1L << (31 - p[i]);
1061
1062  crc_32_tab[0] = 0;
1063
1064  for (i = 1; i < 256; i++)
1065  {
1066    c = 0;
1067    for (k = i | 256; k != 1; k >>= 1)
1068    {
1069      c = c & 1 ? (c >> 1) ^ e : c >> 1;
1070      if (k & 1)
1071        c ^= e;
1072    }
1073    crc_32_tab[i] = c;
1074  }
1075
1076  /* this is initialized here so this code could reside in ROM */
1077  crc = (ulg)0xffffffffUL; /* shift register contents */
1078}
1079
1080/* gzip flag byte */
1081#define ASCII_FLAG   0x01 /* bit 0 set: file probably ASCII text */
1082#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
1083#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
1084#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
1085#define COMMENT      0x10 /* bit 4 set: file comment present */
1086#define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */
1087#define RESERVED     0xC0 /* bit 6,7:   reserved */
1088
1089/*
1090 * Do the uncompression!
1091 */
1092static int gunzip(void)
1093{
1094    uch flags;
1095    unsigned char magic[2]; /* magic header */
1096    char method;
1097    ulg orig_crc = 0;       /* original crc */
1098    ulg orig_len = 0;       /* original uncompressed length */
1099    int res;
1100
1101    magic[0] = NEXTBYTE();
1102    magic[1] = NEXTBYTE();
1103    method   = NEXTBYTE();
1104
1105    if (magic[0] != 037 ||
1106        ((magic[1] != 0213) && (magic[1] != 0236))) {
1107            error("bad gzip magic numbers");
1108            return -1;
1109    }
1110
1111    /* We only support method #8, DEFLATED */
1112    if (method != 8)  {
1113            error("internal error, invalid method");
1114            return -1;
1115    }
1116
1117    flags  = (uch)get_byte();
1118    if ((flags & ENCRYPTED) != 0) {
1119            error("Input is encrypted");
1120            return -1;
1121    }
1122    if ((flags & CONTINUATION) != 0) {
1123            error("Multi part input");
1124            return -1;
1125    }
1126    if ((flags & RESERVED) != 0) {
1127            error("Input has invalid flags");
1128            return -1;
1129    }
1130    NEXTBYTE(); /* Get timestamp */
1131    NEXTBYTE();
1132    NEXTBYTE();
1133    NEXTBYTE();
1134
1135    (void)NEXTBYTE();  /* Ignore extra flags for the moment */
1136    (void)NEXTBYTE();  /* Ignore OS type for the moment */
1137
1138    if ((flags & EXTRA_FIELD) != 0) {
1139            unsigned len = (unsigned)NEXTBYTE();
1140            len |= ((unsigned)NEXTBYTE())<<8;
1141            while (len--) (void)NEXTBYTE();
1142    }
1143
1144    /* Get original file name if it was truncated */
1145    if ((flags & ORIG_NAME) != 0) {
1146            /* Discard the old name */
1147            while (NEXTBYTE() != 0) /* null */ ;
1148    } 
1149
1150    /* Discard file comment if any */
1151    if ((flags & COMMENT) != 0) {
1152            while (NEXTBYTE() != 0) /* null */ ;
1153    }
1154
1155    /* Decompress */
1156    if ((res = inflate())) {
1157            switch (res) {
1158            case 0:
1159                    break;
1160            case 1:
1161                    error("invalid compressed format (err=1)");
1162                    break;
1163            case 2:
1164                    error("invalid compressed format (err=2)");
1165                    break;
1166            case 3:
1167                    error("out of memory");
1168                    break;
1169            case 4:
1170                    error("out of input data");
1171                    break;
1172            default:
1173                    error("invalid compressed format (other)");
1174            }
1175            return -1;
1176    }
1177            
1178    /* Get the crc and original length */
1179    /* crc32  (see algorithm.doc)
1180     * uncompressed input size modulo 2^32
1181     */
1182    orig_crc = (ulg) NEXTBYTE();
1183    orig_crc |= (ulg) NEXTBYTE() << 8;
1184    orig_crc |= (ulg) NEXTBYTE() << 16;
1185    orig_crc |= (ulg) NEXTBYTE() << 24;
1186    
1187    orig_len = (ulg) NEXTBYTE();
1188    orig_len |= (ulg) NEXTBYTE() << 8;
1189    orig_len |= (ulg) NEXTBYTE() << 16;
1190    orig_len |= (ulg) NEXTBYTE() << 24;
1191    
1192    /* Validate decompression */
1193    if (orig_crc != CRC_VALUE) {
1194            error("crc error");
1195            return -1;
1196    }
1197    if (orig_len != bytes_out) {
1198            error("length error");
1199            return -1;
1200    }
1201    return 0;
1202
1203 underrun:                      /* NEXTBYTE() goto's here if needed */
1204    error("out of input data");
1205    return -1;
1206}
1207
1208
1209