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