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 */ 22 typedef 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. */ 84 struct 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 131 int Z_INTERNAL inflate_ensure_window(struct inflate_state *state); 132 void Z_INTERNAL fixedtables(struct inflate_state *state); 133 134 #endif /* INFLATE_H_ */ 135