1/* inflate.h -- internal inflate state definition
2 * Copyright (C) 1995-2016 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/* WARNING: this file should *not* be used by applications. It is
7 part of the implementation of the compression library and is
8 subject to change. Applications should only use zlib.h.
9 */
10
11#ifndef INFLATE_H_
12#define INFLATE_H_
13
14/* define NO_GZIP when compiling if you want to disable gzip header and trailer decoding by inflate().
15 NO_GZIP would be used to avoid linking in the crc code when it is not needed.
16 For shared libraries, gzip decoding should be left enabled. */
17#ifndef NO_GZIP
18# define GUNZIP
19#endif
20
21/* Possible inflate modes between inflate() calls */
22typedef enum {
23 HEAD = 16180, /* i: waiting for magic header */
24 FLAGS, /* i: waiting for method and flags (gzip) */
25 TIME, /* i: waiting for modification time (gzip) */
26 OS, /* i: waiting for extra flags and operating system (gzip) */
27 EXLEN, /* i: waiting for extra length (gzip) */
28 EXTRA, /* i: waiting for extra bytes (gzip) */
29 NAME, /* i: waiting for end of file name (gzip) */
30 COMMENT, /* i: waiting for end of comment (gzip) */
31 HCRC, /* i: waiting for header crc (gzip) */
32 DICTID, /* i: waiting for dictionary check value */
33 DICT, /* waiting for inflateSetDictionary() call */
34 TYPE, /* i: waiting for type bits, including last-flag bit */
35 TYPEDO, /* i: same, but skip check to exit inflate on new block */
36 STORED, /* i: waiting for stored size (length and complement) */
37 COPY_, /* i/o: same as COPY below, but only first time in */
38 COPY, /* i/o: waiting for input or output to copy stored block */
39 TABLE, /* i: waiting for dynamic block table lengths */
40 LENLENS, /* i: waiting for code length code lengths */
41 CODELENS, /* i: waiting for length/lit and distance code lengths */
42 LEN_, /* i: same as LEN below, but only first time in */
43 LEN, /* i: waiting for length/lit/eob code */
44 LENEXT, /* i: waiting for length extra bits */
45 DIST, /* i: waiting for distance code */
46 DISTEXT, /* i: waiting for distance extra bits */
47 MATCH, /* o: waiting for output space to copy string */
48 LIT, /* o: waiting for output space to write literal */
49 CHECK, /* i: waiting for 32-bit check value */
50 LENGTH, /* i: waiting for 32-bit length (gzip) */
51 DONE, /* finished check, done -- remain here until reset */
52 BAD, /* got a data error -- remain here until reset */
53 MEM, /* got an inflate() memory error -- remain here until reset */
54 SYNC /* looking for synchronization bytes to restart inflate() */
55} inflate_mode;
56
57/*
58 State transitions between above modes -
59
60 (most modes can go to BAD or MEM on error -- not shown for clarity)
61
62 Process header:
63 HEAD -> (gzip) or (zlib) or (raw)
64 (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
65 HCRC -> TYPE
66 (zlib) -> DICTID or TYPE
67 DICTID -> DICT -> TYPE
68 (raw) -> TYPEDO
69 Read deflate blocks:
70 TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
71 STORED -> COPY_ -> COPY -> TYPE
72 TABLE -> LENLENS -> CODELENS -> LEN_
73 LEN_ -> LEN
74 Read deflate codes in fixed or dynamic block:
75 LEN -> LENEXT or LIT or TYPE
76 LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
77 LIT -> LEN
78 Process trailer:
79 CHECK -> LENGTH -> DONE
80 */
81
82/* State maintained between inflate() calls -- approximately 7K bytes, not
83 including the allocated sliding window, which is up to 32K bytes. */
84struct inflate_state {
85 PREFIX3(stream) *strm; /* pointer back to this zlib stream */
86 inflate_mode mode; /* current inflate mode */
87 int last; /* true if processing last block */
88 int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
89 bit 2 true to validate check value */
90 int havedict; /* true if dictionary provided */
91 int flags; /* gzip header method and flags, 0 if zlib, or
92 -1 if raw or no header yet */
93 unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
94 unsigned long check; /* protected copy of check value */
95 unsigned long total; /* protected copy of output count */
96 PREFIX(gz_headerp) head; /* where to save gzip header information */
97 /* sliding window */
98 unsigned wbits; /* log base 2 of requested window size */
99 uint32_t wsize; /* window size or zero if not using window */
100 uint32_t whave; /* valid bytes in the window */
101 uint32_t wnext; /* window write index */
102 unsigned char *window; /* allocated sliding window, if needed */
103 /* bit accumulator */
104 uint32_t hold; /* input bit accumulator */
105 unsigned bits; /* number of bits in "in" */
106 /* for string and stored block copying */
107 uint32_t length; /* literal or length of data to copy */
108 unsigned offset; /* distance back to copy string from */
109 /* for table and code decoding */
110 unsigned extra; /* extra bits needed */
111 /* fixed and dynamic code tables */
112 code const *lencode; /* starting table for length/literal codes */
113 code const *distcode; /* starting table for distance codes */
114 unsigned lenbits; /* index bits for lencode */
115 unsigned distbits; /* index bits for distcode */
116 /* dynamic table building */
117 unsigned ncode; /* number of code length code lengths */
118 unsigned nlen; /* number of length code lengths */
119 unsigned ndist; /* number of distance code lengths */
120 uint32_t have; /* number of code lengths in lens[] */
121 code *next; /* next available space in codes[] */
122 uint16_t lens[320]; /* temporary storage for code lengths */
123 uint16_t work[288]; /* work area for code table building */
124 code codes[ENOUGH]; /* space for code tables */
125 int sane; /* if false, allow invalid distance too far */
126 int back; /* bits back of last unprocessed length/lit */
127 unsigned was; /* initial length of match */
128 uint32_t chunksize; /* size of memory copying chunk */
129};
130
131int Z_INTERNAL inflate_ensure_window(struct inflate_state *state);
132void Z_INTERNAL fixedtables(struct inflate_state *state);
133
134#endif /* INFLATE_H_ */
135