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