1 #ifndef INFLATE_H 1 2 #define INFLATE_H 3 4 /* inflate.h -- internal inflate state definit 5 * Copyright (C) 1995-2004 Mark Adler 6 * For conditions of distribution and use, see 7 */ 8 9 /* WARNING: this file should *not* be used by 10 part of the implementation of the compressi 11 subject to change. Applications should only 12 */ 13 14 #include "inftrees.h" 15 16 /* Possible inflate modes between inflate() ca 17 typedef enum { 18 HEAD, /* i: waiting for magic header 19 FLAGS, /* i: waiting for method and f 20 TIME, /* i: waiting for modification 21 OS, /* i: waiting for extra flags 22 EXLEN, /* i: waiting for extra length 23 EXTRA, /* i: waiting for extra bytes 24 NAME, /* i: waiting for end of file 25 COMMENT, /* i: waiting for end of comme 26 HCRC, /* i: waiting for header crc ( 27 DICTID, /* i: waiting for dictionary c 28 DICT, /* waiting for inflateSetDicti 29 TYPE, /* i: waiting for type bit 30 TYPEDO, /* i: same, but skip check 31 STORED, /* i: waiting for stored s 32 COPY, /* i/o: waiting for input 33 TABLE, /* i: waiting for dynamic 34 LENLENS, /* i: waiting for code len 35 CODELENS, /* i: waiting for length/l 36 LEN, /* i: waiting for leng 37 LENEXT, /* i: waiting for leng 38 DIST, /* i: waiting for dist 39 DISTEXT, /* i: waiting for dist 40 MATCH, /* o: waiting for outp 41 LIT, /* o: waiting for outp 42 CHECK, /* i: waiting for 32-bit check 43 LENGTH, /* i: waiting for 32-bit lengt 44 DONE, /* finished check, done -- rem 45 BAD, /* got a data error -- remain 46 MEM, /* got an inflate() memory err 47 SYNC /* looking for synchronization 48 } inflate_mode; 49 50 /* 51 State transitions between above modes - 52 53 (most modes can go to the BAD or MEM mode 54 55 Process header: 56 HEAD -> (gzip) or (zlib) 57 (gzip) -> FLAGS -> TIME -> OS -> EXLEN 58 NAME -> COMMENT -> HCRC -> TYPE 59 (zlib) -> DICTID or TYPE 60 DICTID -> DICT -> TYPE 61 Read deflate blocks: 62 TYPE -> STORED or TABLE or LEN or 63 STORED -> COPY -> TYPE 64 TABLE -> LENLENS -> CODELENS -> LE 65 Read deflate codes: 66 LEN -> LENEXT or LIT or TYPE 67 LENEXT -> DIST -> DISTEXT -> M 68 LIT -> LEN 69 Process trailer: 70 CHECK -> LENGTH -> DONE 71 */ 72 73 /* state maintained between inflate() calls. 74 struct inflate_state { 75 inflate_mode mode; /* current inf 76 int last; /* true if pro 77 int wrap; /* bit 0 true 78 int havedict; /* true if dic 79 int flags; /* gzip header 80 unsigned dmax; /* zlib header 81 unsigned long check; /* protected c 82 unsigned long total; /* protected c 83 /* gz_headerp head; */ /* where t 84 /* sliding window */ 85 unsigned wbits; /* log base 2 86 unsigned wsize; /* window size 87 unsigned whave; /* valid bytes 88 unsigned write; /* window writ 89 unsigned char *window; /* allocated slidi 90 /* bit accumulator */ 91 unsigned long hold; /* input bit a 92 unsigned bits; /* number of b 93 /* for string and stored block copying 94 unsigned length; /* literal or 95 unsigned offset; /* distance ba 96 /* for table and code decoding */ 97 unsigned extra; /* extra bits 98 /* fixed and dynamic code tables */ 99 code const *lencode; /* starting table 100 code const *distcode; /* starting table 101 unsigned lenbits; /* index bits 102 unsigned distbits; /* index bits 103 /* dynamic table building */ 104 unsigned ncode; /* number of c 105 unsigned nlen; /* number of l 106 unsigned ndist; /* number of d 107 unsigned have; /* number of c 108 code *next; /* next available 109 unsigned short lens[320]; /* temporary s 110 unsigned short work[288]; /* work area f 111 code codes[ENOUGH]; /* space for c 112 }; 113 114 /* Reverse the bytes in a 32-bit value */ 115 #define REVERSE(q) \ 116 ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff 117 (((q) & 0xff00) << 8) + (((q) & 0xff) << 118 119 #endif 120
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.