MySQL 5.6.14 Source Code Document
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
inflate.h
1
/* inflate.h -- internal inflate state definition
2
* Copyright (C) 1995-2004 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
/* define NO_GZIP when compiling if you want to disable gzip header and
12
trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
13
the crc code when it is not needed. For shared libraries, gzip decoding
14
should be left enabled. */
15
#ifndef NO_GZIP
16
# define GUNZIP
17
#endif
18
19
/* Possible inflate modes between inflate() calls */
20
typedef
enum
{
21
HEAD,
/* i: waiting for magic header */
22
FLAGS,
/* i: waiting for method and flags (gzip) */
23
TIME,
/* i: waiting for modification time (gzip) */
24
OS,
/* i: waiting for extra flags and operating system (gzip) */
25
EXLEN,
/* i: waiting for extra length (gzip) */
26
EXTRA,
/* i: waiting for extra bytes (gzip) */
27
NAME,
/* i: waiting for end of file name (gzip) */
28
COMMENT,
/* i: waiting for end of comment (gzip) */
29
HCRC,
/* i: waiting for header crc (gzip) */
30
DICTID,
/* i: waiting for dictionary check value */
31
DICT,
/* waiting for inflateSetDictionary() call */
32
TYPE,
/* i: waiting for type bits, including last-flag bit */
33
TYPEDO,
/* i: same, but skip check to exit inflate on new block */
34
STORED,
/* i: waiting for stored size (length and complement) */
35
COPY,
/* i/o: waiting for input or output to copy stored block */
36
TABLE
,
/* i: waiting for dynamic block table lengths */
37
LENLENS,
/* i: waiting for code length code lengths */
38
CODELENS,
/* i: waiting for length/lit and distance code lengths */
39
LEN,
/* i: waiting for length/lit code */
40
LENEXT,
/* i: waiting for length extra bits */
41
DIST,
/* i: waiting for distance code */
42
DISTEXT,
/* i: waiting for distance extra bits */
43
MATCH,
/* o: waiting for output space to copy string */
44
LIT,
/* o: waiting for output space to write literal */
45
CHECK,
/* i: waiting for 32-bit check value */
46
LENGTH,
/* i: waiting for 32-bit length (gzip) */
47
DONE,
/* finished check, done -- remain here until reset */
48
BAD,
/* got a data error -- remain here until reset */
49
MEM,
/* got an inflate() memory error -- remain here until reset */
50
SYNC
/* looking for synchronization bytes to restart inflate() */
51
} inflate_mode;
52
53
/*
54
State transitions between above modes -
55
56
(most modes can go to the BAD or MEM mode -- not shown for clarity)
57
58
Process header:
59
HEAD -> (gzip) or (zlib)
60
(gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME
61
NAME -> COMMENT -> HCRC -> TYPE
62
(zlib) -> DICTID or TYPE
63
DICTID -> DICT -> TYPE
64
Read deflate blocks:
65
TYPE -> STORED or TABLE or LEN or CHECK
66
STORED -> COPY -> TYPE
67
TABLE -> LENLENS -> CODELENS -> LEN
68
Read deflate codes:
69
LEN -> LENEXT or LIT or TYPE
70
LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
71
LIT -> LEN
72
Process trailer:
73
CHECK -> LENGTH -> DONE
74
*/
75
76
/* state maintained between inflate() calls. Approximately 7K bytes. */
77
struct
inflate_state
{
78
inflate_mode mode;
/* current inflate mode */
79
int
last;
/* true if processing last block */
80
int
wrap;
/* bit 0 true for zlib, bit 1 true for gzip */
81
int
havedict;
/* true if dictionary provided */
82
int
flags;
/* gzip header method and flags (0 if zlib) */
83
unsigned
dmax;
/* zlib header max distance (INFLATE_STRICT) */
84
unsigned
long
check;
/* protected copy of check value */
85
unsigned
long
total;
/* protected copy of output count */
86
gz_headerp head;
/* where to save gzip header information */
87
/* sliding window */
88
unsigned
wbits;
/* log base 2 of requested window size */
89
unsigned
wsize;
/* window size or zero if not using window */
90
unsigned
whave;
/* valid bytes in the window */
91
unsigned
write;
/* window write index */
92
unsigned
char
FAR *window;
/* allocated sliding window, if needed */
93
/* bit accumulator */
94
unsigned
long
hold;
/* input bit accumulator */
95
unsigned
bits;
/* number of bits in "in" */
96
/* for string and stored block copying */
97
unsigned
length;
/* literal or length of data to copy */
98
unsigned
offset;
/* distance back to copy string from */
99
/* for table and code decoding */
100
unsigned
extra
;
/* extra bits needed */
101
/* fixed and dynamic code tables */
102
code
const
FAR *lencode;
/* starting table for length/literal codes */
103
code
const
FAR *distcode;
/* starting table for distance codes */
104
unsigned
lenbits;
/* index bits for lencode */
105
unsigned
distbits;
/* index bits for distcode */
106
/* dynamic table building */
107
unsigned
ncode;
/* number of code length code lengths */
108
unsigned
nlen;
/* number of length code lengths */
109
unsigned
ndist;
/* number of distance code lengths */
110
unsigned
have;
/* number of code lengths in lens[] */
111
code
FAR *next;
/* next available space in codes[] */
112
unsigned
short
lens[320];
/* temporary storage for code lengths */
113
unsigned
short
work[288];
/* work area for code table building */
114
code
codes[ENOUGH];
/* space for code tables */
115
};
zlib
inflate.h
Generated on Sat Nov 9 2013 01:29:01 for MySQL 5.6.14 Source Code Document by
1.8.1.2