OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [lib/] [inflate.c] - Blame information for rev 62

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.