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