Subversion Repositories Kolibri OS

Rev

Rev 1896 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1896 Rev 3926
1
/* deflate.c -- compress data using the deflation algorithm
1
/* deflate.c -- compress data using the deflation algorithm
2
 * Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
2
 * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
3
 * For conditions of distribution and use, see copyright notice in zlib.h
3
 * For conditions of distribution and use, see copyright notice in zlib.h
4
 */
4
 */
5
 
5
 
6
/*
6
/*
7
 *  ALGORITHM
7
 *  ALGORITHM
8
 *
8
 *
9
 *      The "deflation" process depends on being able to identify portions
9
 *      The "deflation" process depends on being able to identify portions
10
 *      of the input text which are identical to earlier input (within a
10
 *      of the input text which are identical to earlier input (within a
11
 *      sliding window trailing behind the input currently being processed).
11
 *      sliding window trailing behind the input currently being processed).
12
 *
12
 *
13
 *      The most straightforward technique turns out to be the fastest for
13
 *      The most straightforward technique turns out to be the fastest for
14
 *      most input files: try all possible matches and select the longest.
14
 *      most input files: try all possible matches and select the longest.
15
 *      The key feature of this algorithm is that insertions into the string
15
 *      The key feature of this algorithm is that insertions into the string
16
 *      dictionary are very simple and thus fast, and deletions are avoided
16
 *      dictionary are very simple and thus fast, and deletions are avoided
17
 *      completely. Insertions are performed at each input character, whereas
17
 *      completely. Insertions are performed at each input character, whereas
18
 *      string matches are performed only when the previous match ends. So it
18
 *      string matches are performed only when the previous match ends. So it
19
 *      is preferable to spend more time in matches to allow very fast string
19
 *      is preferable to spend more time in matches to allow very fast string
20
 *      insertions and avoid deletions. The matching algorithm for small
20
 *      insertions and avoid deletions. The matching algorithm for small
21
 *      strings is inspired from that of Rabin & Karp. A brute force approach
21
 *      strings is inspired from that of Rabin & Karp. A brute force approach
22
 *      is used to find longer strings when a small match has been found.
22
 *      is used to find longer strings when a small match has been found.
23
 *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
23
 *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
24
 *      (by Leonid Broukhis).
24
 *      (by Leonid Broukhis).
25
 *         A previous version of this file used a more sophisticated algorithm
25
 *         A previous version of this file used a more sophisticated algorithm
26
 *      (by Fiala and Greene) which is guaranteed to run in linear amortized
26
 *      (by Fiala and Greene) which is guaranteed to run in linear amortized
27
 *      time, but has a larger average cost, uses more memory and is patented.
27
 *      time, but has a larger average cost, uses more memory and is patented.
28
 *      However the F&G algorithm may be faster for some highly redundant
28
 *      However the F&G algorithm may be faster for some highly redundant
29
 *      files if the parameter max_chain_length (described below) is too large.
29
 *      files if the parameter max_chain_length (described below) is too large.
30
 *
30
 *
31
 *  ACKNOWLEDGEMENTS
31
 *  ACKNOWLEDGEMENTS
32
 *
32
 *
33
 *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
33
 *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
34
 *      I found it in 'freeze' written by Leonid Broukhis.
34
 *      I found it in 'freeze' written by Leonid Broukhis.
35
 *      Thanks to many people for bug reports and testing.
35
 *      Thanks to many people for bug reports and testing.
36
 *
36
 *
37
 *  REFERENCES
37
 *  REFERENCES
38
 *
38
 *
39
 *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
39
 *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
40
 *      Available in http://www.ietf.org/rfc/rfc1951.txt
40
 *      Available in http://tools.ietf.org/html/rfc1951
41
 *
41
 *
42
 *      A description of the Rabin and Karp algorithm is given in the book
42
 *      A description of the Rabin and Karp algorithm is given in the book
43
 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
43
 *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
44
 *
44
 *
45
 *      Fiala,E.R., and Greene,D.H.
45
 *      Fiala,E.R., and Greene,D.H.
46
 *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
46
 *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
47
 *
47
 *
48
 */
48
 */
49
 
49
 
50
/* @(#) $Id$ */
50
/* @(#) $Id$ */
51
 
51
 
52
#include "deflate.h"
52
#include "deflate.h"
53
 
53
 
54
const char deflate_copyright[] =
54
const char deflate_copyright[] =
55
   " deflate 1.2.5 Copyright 1995-2010 Jean-loup Gailly and Mark Adler ";
55
   " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
56
/*
56
/*
57
  If you use the zlib library in a product, an acknowledgment is welcome
57
  If you use the zlib library in a product, an acknowledgment is welcome
58
  in the documentation of your product. If for some reason you cannot
58
  in the documentation of your product. If for some reason you cannot
59
  include such an acknowledgment, I would appreciate that you keep this
59
  include such an acknowledgment, I would appreciate that you keep this
60
  copyright string in the executable of your product.
60
  copyright string in the executable of your product.
61
 */
61
 */
62
 
62
 
63
/* ===========================================================================
63
/* ===========================================================================
64
 *  Function prototypes.
64
 *  Function prototypes.
65
 */
65
 */
66
typedef enum {
66
typedef enum {
67
    need_more,      /* block not completed, need more input or more output */
67
    need_more,      /* block not completed, need more input or more output */
68
    block_done,     /* block flush performed */
68
    block_done,     /* block flush performed */
69
    finish_started, /* finish started, need only more output at next deflate */
69
    finish_started, /* finish started, need only more output at next deflate */
70
    finish_done     /* finish done, accept no more input or output */
70
    finish_done     /* finish done, accept no more input or output */
71
} block_state;
71
} block_state;
72
 
72
 
73
typedef block_state (*compress_func) OF((deflate_state *s, int flush));
73
typedef block_state (*compress_func) OF((deflate_state *s, int flush));
74
/* Compression function. Returns the block state after the call. */
74
/* Compression function. Returns the block state after the call. */
75
 
75
 
76
local void fill_window    OF((deflate_state *s));
76
local void fill_window    OF((deflate_state *s));
77
local block_state deflate_stored OF((deflate_state *s, int flush));
77
local block_state deflate_stored OF((deflate_state *s, int flush));
78
local block_state deflate_fast   OF((deflate_state *s, int flush));
78
local block_state deflate_fast   OF((deflate_state *s, int flush));
79
#ifndef FASTEST
79
#ifndef FASTEST
80
local block_state deflate_slow   OF((deflate_state *s, int flush));
80
local block_state deflate_slow   OF((deflate_state *s, int flush));
81
#endif
81
#endif
82
local block_state deflate_rle    OF((deflate_state *s, int flush));
82
local block_state deflate_rle    OF((deflate_state *s, int flush));
83
local block_state deflate_huff   OF((deflate_state *s, int flush));
83
local block_state deflate_huff   OF((deflate_state *s, int flush));
84
local void lm_init        OF((deflate_state *s));
84
local void lm_init        OF((deflate_state *s));
85
local void putShortMSB    OF((deflate_state *s, uInt b));
85
local void putShortMSB    OF((deflate_state *s, uInt b));
86
local void flush_pending  OF((z_streamp strm));
86
local void flush_pending  OF((z_streamp strm));
87
local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
87
local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
88
#ifdef ASMV
88
#ifdef ASMV
89
      void match_init OF((void)); /* asm code initialization */
89
      void match_init OF((void)); /* asm code initialization */
90
      uInt longest_match  OF((deflate_state *s, IPos cur_match));
90
      uInt longest_match  OF((deflate_state *s, IPos cur_match));
91
#else
91
#else
92
local uInt longest_match  OF((deflate_state *s, IPos cur_match));
92
local uInt longest_match  OF((deflate_state *s, IPos cur_match));
93
#endif
93
#endif
94
 
94
 
95
#ifdef DEBUG
95
#ifdef DEBUG
96
local  void check_match OF((deflate_state *s, IPos start, IPos match,
96
local  void check_match OF((deflate_state *s, IPos start, IPos match,
97
                            int length));
97
                            int length));
98
#endif
98
#endif
99
 
99
 
100
/* ===========================================================================
100
/* ===========================================================================
101
 * Local data
101
 * Local data
102
 */
102
 */
103
 
103
 
104
#define NIL 0
104
#define NIL 0
105
/* Tail of hash chains */
105
/* Tail of hash chains */
106
 
106
 
107
#ifndef TOO_FAR
107
#ifndef TOO_FAR
108
#  define TOO_FAR 4096
108
#  define TOO_FAR 4096
109
#endif
109
#endif
110
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
110
/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
111
 
111
 
112
/* Values for max_lazy_match, good_match and max_chain_length, depending on
112
/* Values for max_lazy_match, good_match and max_chain_length, depending on
113
 * the desired pack level (0..9). The values given below have been tuned to
113
 * the desired pack level (0..9). The values given below have been tuned to
114
 * exclude worst case performance for pathological files. Better values may be
114
 * exclude worst case performance for pathological files. Better values may be
115
 * found for specific files.
115
 * found for specific files.
116
 */
116
 */
117
typedef struct config_s {
117
typedef struct config_s {
118
   ush good_length; /* reduce lazy search above this match length */
118
   ush good_length; /* reduce lazy search above this match length */
119
   ush max_lazy;    /* do not perform lazy search above this match length */
119
   ush max_lazy;    /* do not perform lazy search above this match length */
120
   ush nice_length; /* quit search above this match length */
120
   ush nice_length; /* quit search above this match length */
121
   ush max_chain;
121
   ush max_chain;
122
   compress_func func;
122
   compress_func func;
123
} config;
123
} config;
124
 
124
 
125
#ifdef FASTEST
125
#ifdef FASTEST
126
local const config configuration_table[2] = {
126
local const config configuration_table[2] = {
127
/*      good lazy nice chain */
127
/*      good lazy nice chain */
128
/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
128
/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
129
/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
129
/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
130
#else
130
#else
131
local const config configuration_table[10] = {
131
local const config configuration_table[10] = {
132
/*      good lazy nice chain */
132
/*      good lazy nice chain */
133
/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
133
/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
134
/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
134
/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
135
/* 2 */ {4,    5, 16,    8, deflate_fast},
135
/* 2 */ {4,    5, 16,    8, deflate_fast},
136
/* 3 */ {4,    6, 32,   32, deflate_fast},
136
/* 3 */ {4,    6, 32,   32, deflate_fast},
137
 
137
 
138
/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
138
/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
139
/* 5 */ {8,   16, 32,   32, deflate_slow},
139
/* 5 */ {8,   16, 32,   32, deflate_slow},
140
/* 6 */ {8,   16, 128, 128, deflate_slow},
140
/* 6 */ {8,   16, 128, 128, deflate_slow},
141
/* 7 */ {8,   32, 128, 256, deflate_slow},
141
/* 7 */ {8,   32, 128, 256, deflate_slow},
142
/* 8 */ {32, 128, 258, 1024, deflate_slow},
142
/* 8 */ {32, 128, 258, 1024, deflate_slow},
143
/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
143
/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
144
#endif
144
#endif
145
 
145
 
146
/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
146
/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
147
 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
147
 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
148
 * meaning.
148
 * meaning.
149
 */
149
 */
150
 
150
 
151
#define EQUAL 0
151
#define EQUAL 0
152
/* result of memcmp for equal strings */
152
/* result of memcmp for equal strings */
153
 
153
 
154
#ifndef NO_DUMMY_DECL
154
#ifndef NO_DUMMY_DECL
155
struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
155
struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
156
#endif
156
#endif
-
 
157
 
-
 
158
/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
-
 
159
#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
157
 
160
 
158
/* ===========================================================================
161
/* ===========================================================================
159
 * Update a hash value with the given input byte
162
 * Update a hash value with the given input byte
160
 * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
163
 * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
161
 *    input characters, so that a running hash key can be computed from the
164
 *    input characters, so that a running hash key can be computed from the
162
 *    previous key instead of complete recalculation each time.
165
 *    previous key instead of complete recalculation each time.
163
 */
166
 */
164
#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask)
167
#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask)
165
 
168
 
166
 
169
 
167
/* ===========================================================================
170
/* ===========================================================================
168
 * Insert string str in the dictionary and set match_head to the previous head
171
 * Insert string str in the dictionary and set match_head to the previous head
169
 * of the hash chain (the most recent string with same hash key). Return
172
 * of the hash chain (the most recent string with same hash key). Return
170
 * the previous length of the hash chain.
173
 * the previous length of the hash chain.
171
 * If this file is compiled with -DFASTEST, the compression level is forced
174
 * If this file is compiled with -DFASTEST, the compression level is forced
172
 * to 1, and no hash chains are maintained.
175
 * to 1, and no hash chains are maintained.
173
 * IN  assertion: all calls to to INSERT_STRING are made with consecutive
176
 * IN  assertion: all calls to to INSERT_STRING are made with consecutive
174
 *    input characters and the first MIN_MATCH bytes of str are valid
177
 *    input characters and the first MIN_MATCH bytes of str are valid
175
 *    (except for the last MIN_MATCH-1 bytes of the input file).
178
 *    (except for the last MIN_MATCH-1 bytes of the input file).
176
 */
179
 */
177
#ifdef FASTEST
180
#ifdef FASTEST
178
#define INSERT_STRING(s, str, match_head) \
181
#define INSERT_STRING(s, str, match_head) \
179
   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
182
   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
180
    match_head = s->head[s->ins_h], \
183
    match_head = s->head[s->ins_h], \
181
    s->head[s->ins_h] = (Pos)(str))
184
    s->head[s->ins_h] = (Pos)(str))
182
#else
185
#else
183
#define INSERT_STRING(s, str, match_head) \
186
#define INSERT_STRING(s, str, match_head) \
184
   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
187
   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
185
    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
188
    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
186
    s->head[s->ins_h] = (Pos)(str))
189
    s->head[s->ins_h] = (Pos)(str))
187
#endif
190
#endif
188
 
191
 
189
/* ===========================================================================
192
/* ===========================================================================
190
 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
193
 * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
191
 * prev[] will be initialized on the fly.
194
 * prev[] will be initialized on the fly.
192
 */
195
 */
193
#define CLEAR_HASH(s) \
196
#define CLEAR_HASH(s) \
194
    s->head[s->hash_size-1] = NIL; \
197
    s->head[s->hash_size-1] = NIL; \
195
    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
198
    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
196
 
199
 
197
/* ========================================================================= */
200
/* ========================================================================= */
198
int ZEXPORT deflateInit_(strm, level, version, stream_size)
201
int ZEXPORT deflateInit_(strm, level, version, stream_size)
199
    z_streamp strm;
202
    z_streamp strm;
200
    int level;
203
    int level;
201
    const char *version;
204
    const char *version;
202
    int stream_size;
205
    int stream_size;
203
{
206
{
204
    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
207
    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
205
                         Z_DEFAULT_STRATEGY, version, stream_size);
208
                         Z_DEFAULT_STRATEGY, version, stream_size);
206
    /* To do: ignore strm->next_in if we use it as window */
209
    /* To do: ignore strm->next_in if we use it as window */
207
}
210
}
208
 
211
 
209
/* ========================================================================= */
212
/* ========================================================================= */
210
int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
213
int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
211
                  version, stream_size)
214
                  version, stream_size)
212
    z_streamp strm;
215
    z_streamp strm;
213
    int  level;
216
    int  level;
214
    int  method;
217
    int  method;
215
    int  windowBits;
218
    int  windowBits;
216
    int  memLevel;
219
    int  memLevel;
217
    int  strategy;
220
    int  strategy;
218
    const char *version;
221
    const char *version;
219
    int stream_size;
222
    int stream_size;
220
{
223
{
221
    deflate_state *s;
224
    deflate_state *s;
222
    int wrap = 1;
225
    int wrap = 1;
223
    static const char my_version[] = ZLIB_VERSION;
226
    static const char my_version[] = ZLIB_VERSION;
224
 
227
 
225
    ushf *overlay;
228
    ushf *overlay;
226
    /* We overlay pending_buf and d_buf+l_buf. This works since the average
229
    /* We overlay pending_buf and d_buf+l_buf. This works since the average
227
     * output size for (length,distance) codes is <= 24 bits.
230
     * output size for (length,distance) codes is <= 24 bits.
228
     */
231
     */
229
 
232
 
230
    if (version == Z_NULL || version[0] != my_version[0] ||
233
    if (version == Z_NULL || version[0] != my_version[0] ||
231
        stream_size != sizeof(z_stream)) {
234
        stream_size != sizeof(z_stream)) {
232
        return Z_VERSION_ERROR;
235
        return Z_VERSION_ERROR;
233
    }
236
    }
234
    if (strm == Z_NULL) return Z_STREAM_ERROR;
237
    if (strm == Z_NULL) return Z_STREAM_ERROR;
235
 
238
 
236
    strm->msg = Z_NULL;
239
    strm->msg = Z_NULL;
237
    if (strm->zalloc == (alloc_func)0) {
240
    if (strm->zalloc == (alloc_func)0) {
-
 
241
#ifdef Z_SOLO
-
 
242
        return Z_STREAM_ERROR;
-
 
243
#else
238
        strm->zalloc = zcalloc;
244
        strm->zalloc = zcalloc;
239
        strm->opaque = (voidpf)0;
245
        strm->opaque = (voidpf)0;
-
 
246
#endif
240
    }
247
    }
241
    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
248
    if (strm->zfree == (free_func)0)
-
 
249
#ifdef Z_SOLO
-
 
250
        return Z_STREAM_ERROR;
-
 
251
#else
-
 
252
        strm->zfree = zcfree;
-
 
253
#endif
242
 
254
 
243
#ifdef FASTEST
255
#ifdef FASTEST
244
    if (level != 0) level = 1;
256
    if (level != 0) level = 1;
245
#else
257
#else
246
    if (level == Z_DEFAULT_COMPRESSION) level = 6;
258
    if (level == Z_DEFAULT_COMPRESSION) level = 6;
247
#endif
259
#endif
248
 
260
 
249
    if (windowBits < 0) { /* suppress zlib wrapper */
261
    if (windowBits < 0) { /* suppress zlib wrapper */
250
        wrap = 0;
262
        wrap = 0;
251
        windowBits = -windowBits;
263
        windowBits = -windowBits;
252
    }
264
    }
253
#ifdef GZIP
265
#ifdef GZIP
254
    else if (windowBits > 15) {
266
    else if (windowBits > 15) {
255
        wrap = 2;       /* write gzip wrapper instead */
267
        wrap = 2;       /* write gzip wrapper instead */
256
        windowBits -= 16;
268
        windowBits -= 16;
257
    }
269
    }
258
#endif
270
#endif
259
    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
271
    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
260
        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
272
        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
261
        strategy < 0 || strategy > Z_FIXED) {
273
        strategy < 0 || strategy > Z_FIXED) {
262
        return Z_STREAM_ERROR;
274
        return Z_STREAM_ERROR;
263
    }
275
    }
264
    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
276
    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
265
    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
277
    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
266
    if (s == Z_NULL) return Z_MEM_ERROR;
278
    if (s == Z_NULL) return Z_MEM_ERROR;
267
    strm->state = (struct internal_state FAR *)s;
279
    strm->state = (struct internal_state FAR *)s;
268
    s->strm = strm;
280
    s->strm = strm;
269
 
281
 
270
    s->wrap = wrap;
282
    s->wrap = wrap;
271
    s->gzhead = Z_NULL;
283
    s->gzhead = Z_NULL;
272
    s->w_bits = windowBits;
284
    s->w_bits = windowBits;
273
    s->w_size = 1 << s->w_bits;
285
    s->w_size = 1 << s->w_bits;
274
    s->w_mask = s->w_size - 1;
286
    s->w_mask = s->w_size - 1;
275
 
287
 
276
    s->hash_bits = memLevel + 7;
288
    s->hash_bits = memLevel + 7;
277
    s->hash_size = 1 << s->hash_bits;
289
    s->hash_size = 1 << s->hash_bits;
278
    s->hash_mask = s->hash_size - 1;
290
    s->hash_mask = s->hash_size - 1;
279
    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
291
    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
280
 
292
 
281
    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
293
    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
282
    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
294
    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
283
    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
295
    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
284
 
296
 
285
    s->high_water = 0;      /* nothing written to s->window yet */
297
    s->high_water = 0;      /* nothing written to s->window yet */
286
 
298
 
287
    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
299
    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
288
 
300
 
289
    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
301
    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
290
    s->pending_buf = (uchf *) overlay;
302
    s->pending_buf = (uchf *) overlay;
291
    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
303
    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
292
 
304
 
293
    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
305
    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
294
        s->pending_buf == Z_NULL) {
306
        s->pending_buf == Z_NULL) {
295
        s->status = FINISH_STATE;
307
        s->status = FINISH_STATE;
296
        strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
308
        strm->msg = ERR_MSG(Z_MEM_ERROR);
297
        deflateEnd (strm);
309
        deflateEnd (strm);
298
        return Z_MEM_ERROR;
310
        return Z_MEM_ERROR;
299
    }
311
    }
300
    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
312
    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
301
    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
313
    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
302
 
314
 
303
    s->level = level;
315
    s->level = level;
304
    s->strategy = strategy;
316
    s->strategy = strategy;
305
    s->method = (Byte)method;
317
    s->method = (Byte)method;
306
 
318
 
307
    return deflateReset(strm);
319
    return deflateReset(strm);
308
}
320
}
309
 
321
 
310
/* ========================================================================= */
322
/* ========================================================================= */
311
int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
323
int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
312
    z_streamp strm;
324
    z_streamp strm;
313
    const Bytef *dictionary;
325
    const Bytef *dictionary;
314
    uInt  dictLength;
326
    uInt  dictLength;
315
{
327
{
316
    deflate_state *s;
328
    deflate_state *s;
317
    uInt length = dictLength;
329
    uInt str, n;
318
    uInt n;
330
    int wrap;
319
    IPos hash_head = 0;
331
    unsigned avail;
320
 
-
 
321
    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
-
 
322
        strm->state->wrap == 2 ||
332
    z_const unsigned char *next;
323
        (strm->state->wrap == 1 && strm->state->status != INIT_STATE))
-
 
324
        return Z_STREAM_ERROR;
-
 
-
 
333
 
-
 
334
    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
325
 
335
        return Z_STREAM_ERROR;
326
    s = strm->state;
336
    s = strm->state;
-
 
337
    wrap = s->wrap;
-
 
338
    if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
-
 
339
        return Z_STREAM_ERROR;
-
 
340
 
-
 
341
    /* when using zlib wrappers, compute Adler-32 for provided dictionary */
327
    if (s->wrap)
342
    if (wrap == 1)
-
 
343
        strm->adler = adler32(strm->adler, dictionary, dictLength);
328
        strm->adler = adler32(strm->adler, dictionary, dictLength);
344
    s->wrap = 0;                    /* avoid computing Adler-32 in read_buf */
329
 
345
 
330
    if (length < MIN_MATCH) return Z_OK;
-
 
331
    if (length > s->w_size) {
346
    /* if dictionary would fill window, just replace the history */
332
        length = s->w_size;
-
 
333
        dictionary += dictLength - length; /* use the tail of the dictionary */
347
    if (dictLength >= s->w_size) {
334
    }
348
        if (wrap == 0) {            /* already empty otherwise */
335
    zmemcpy(s->window, dictionary, length);
349
            CLEAR_HASH(s);
336
    s->strstart = length;
-
 
337
    s->block_start = (long)length;
-
 
338
 
-
 
339
    /* Insert all strings in the hash table (except for the last two bytes).
-
 
340
     * s->lookahead stays null, so s->ins_h will be recomputed at the next
-
 
341
     * call of fill_window.
350
            s->strstart = 0;
342
     */
-
 
343
    s->ins_h = s->window[0];
-
 
344
    UPDATE_HASH(s, s->ins_h, s->window[1]);
-
 
345
    for (n = 0; n <= length - MIN_MATCH; n++) {
351
            s->block_start = 0L;
-
 
352
            s->insert = 0;
-
 
353
        }
-
 
354
        dictionary += dictLength - s->w_size;  /* use the tail */
-
 
355
        dictLength = s->w_size;
346
        INSERT_STRING(s, n, hash_head);
356
    }
-
 
357
 
-
 
358
    /* insert dictionary into window and hash */
-
 
359
    avail = strm->avail_in;
-
 
360
    next = strm->next_in;
-
 
361
    strm->avail_in = dictLength;
-
 
362
    strm->next_in = (z_const Bytef *)dictionary;
-
 
363
    fill_window(s);
-
 
364
    while (s->lookahead >= MIN_MATCH) {
-
 
365
        str = s->strstart;
-
 
366
        n = s->lookahead - (MIN_MATCH-1);
-
 
367
        do {
-
 
368
            UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
-
 
369
#ifndef FASTEST
-
 
370
            s->prev[str & s->w_mask] = s->head[s->ins_h];
-
 
371
#endif
-
 
372
            s->head[s->ins_h] = (Pos)str;
-
 
373
            str++;
-
 
374
        } while (--n);
-
 
375
        s->strstart = str;
-
 
376
        s->lookahead = MIN_MATCH-1;
-
 
377
        fill_window(s);
-
 
378
    }
-
 
379
    s->strstart += s->lookahead;
-
 
380
    s->block_start = (long)s->strstart;
-
 
381
    s->insert = s->lookahead;
-
 
382
    s->lookahead = 0;
-
 
383
    s->match_length = s->prev_length = MIN_MATCH-1;
-
 
384
    s->match_available = 0;
-
 
385
    strm->next_in = next;
347
    }
386
    strm->avail_in = avail;
348
    if (hash_head) hash_head = 0;  /* to make compiler happy */
387
    s->wrap = wrap;
349
    return Z_OK;
388
    return Z_OK;
350
}
389
}
351
 
390
 
352
/* ========================================================================= */
391
/* ========================================================================= */
353
int ZEXPORT deflateReset (strm)
392
int ZEXPORT deflateResetKeep (strm)
354
    z_streamp strm;
393
    z_streamp strm;
355
{
394
{
356
    deflate_state *s;
395
    deflate_state *s;
357
 
396
 
358
    if (strm == Z_NULL || strm->state == Z_NULL ||
397
    if (strm == Z_NULL || strm->state == Z_NULL ||
359
        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
398
        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
360
        return Z_STREAM_ERROR;
399
        return Z_STREAM_ERROR;
361
    }
400
    }
362
 
401
 
363
    strm->total_in = strm->total_out = 0;
402
    strm->total_in = strm->total_out = 0;
364
    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
403
    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
365
    strm->data_type = Z_UNKNOWN;
404
    strm->data_type = Z_UNKNOWN;
366
 
405
 
367
    s = (deflate_state *)strm->state;
406
    s = (deflate_state *)strm->state;
368
    s->pending = 0;
407
    s->pending = 0;
369
    s->pending_out = s->pending_buf;
408
    s->pending_out = s->pending_buf;
370
 
409
 
371
    if (s->wrap < 0) {
410
    if (s->wrap < 0) {
372
        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
411
        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
373
    }
412
    }
374
    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
413
    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
375
    strm->adler =
414
    strm->adler =
376
#ifdef GZIP
415
#ifdef GZIP
377
        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
416
        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
378
#endif
417
#endif
379
        adler32(0L, Z_NULL, 0);
418
        adler32(0L, Z_NULL, 0);
380
    s->last_flush = Z_NO_FLUSH;
419
    s->last_flush = Z_NO_FLUSH;
381
 
420
 
382
    _tr_init(s);
421
    _tr_init(s);
383
    lm_init(s);
-
 
384
 
422
 
385
    return Z_OK;
423
    return Z_OK;
386
}
424
}
387
 
425
 
388
/* ========================================================================= */
426
/* ========================================================================= */
-
 
427
int ZEXPORT deflateReset (strm)
-
 
428
    z_streamp strm;
-
 
429
{
-
 
430
    int ret;
-
 
431
 
-
 
432
    ret = deflateResetKeep(strm);
-
 
433
    if (ret == Z_OK)
-
 
434
        lm_init(strm->state);
-
 
435
    return ret;
-
 
436
}
-
 
437
 
-
 
438
/* ========================================================================= */
389
int ZEXPORT deflateSetHeader (strm, head)
439
int ZEXPORT deflateSetHeader (strm, head)
390
    z_streamp strm;
440
    z_streamp strm;
391
    gz_headerp head;
441
    gz_headerp head;
392
{
442
{
393
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
443
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
394
    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
444
    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
395
    strm->state->gzhead = head;
445
    strm->state->gzhead = head;
396
    return Z_OK;
446
    return Z_OK;
397
}
447
}
398
 
448
 
399
/* ========================================================================= */
449
/* ========================================================================= */
-
 
450
int ZEXPORT deflatePending (strm, pending, bits)
-
 
451
    unsigned *pending;
-
 
452
    int *bits;
-
 
453
    z_streamp strm;
-
 
454
{
-
 
455
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-
 
456
    if (pending != Z_NULL)
-
 
457
        *pending = strm->state->pending;
-
 
458
    if (bits != Z_NULL)
-
 
459
        *bits = strm->state->bi_valid;
-
 
460
    return Z_OK;
-
 
461
}
-
 
462
 
-
 
463
/* ========================================================================= */
400
int ZEXPORT deflatePrime (strm, bits, value)
464
int ZEXPORT deflatePrime (strm, bits, value)
401
    z_streamp strm;
465
    z_streamp strm;
402
    int bits;
466
    int bits;
403
    int value;
467
    int value;
404
{
468
{
-
 
469
    deflate_state *s;
-
 
470
    int put;
-
 
471
 
405
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
472
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-
 
473
    s = strm->state;
-
 
474
    if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
-
 
475
        return Z_BUF_ERROR;
-
 
476
    do {
-
 
477
        put = Buf_size - s->bi_valid;
-
 
478
        if (put > bits)
406
    strm->state->bi_valid = bits;
479
            put = bits;
407
    strm->state->bi_buf = (ush)(value & ((1 << bits) - 1));
480
        s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
-
 
481
        s->bi_valid += put;
-
 
482
        _tr_flush_bits(s);
-
 
483
        value >>= put;
-
 
484
        bits -= put;
-
 
485
    } while (bits);
408
    return Z_OK;
486
    return Z_OK;
409
}
487
}
410
 
488
 
411
/* ========================================================================= */
489
/* ========================================================================= */
412
int ZEXPORT deflateParams(strm, level, strategy)
490
int ZEXPORT deflateParams(strm, level, strategy)
413
    z_streamp strm;
491
    z_streamp strm;
414
    int level;
492
    int level;
415
    int strategy;
493
    int strategy;
416
{
494
{
417
    deflate_state *s;
495
    deflate_state *s;
418
    compress_func func;
496
    compress_func func;
419
    int err = Z_OK;
497
    int err = Z_OK;
420
 
498
 
421
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
499
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
422
    s = strm->state;
500
    s = strm->state;
423
 
501
 
424
#ifdef FASTEST
502
#ifdef FASTEST
425
    if (level != 0) level = 1;
503
    if (level != 0) level = 1;
426
#else
504
#else
427
    if (level == Z_DEFAULT_COMPRESSION) level = 6;
505
    if (level == Z_DEFAULT_COMPRESSION) level = 6;
428
#endif
506
#endif
429
    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
507
    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
430
        return Z_STREAM_ERROR;
508
        return Z_STREAM_ERROR;
431
    }
509
    }
432
    func = configuration_table[s->level].func;
510
    func = configuration_table[s->level].func;
433
 
511
 
434
    if ((strategy != s->strategy || func != configuration_table[level].func) &&
512
    if ((strategy != s->strategy || func != configuration_table[level].func) &&
435
        strm->total_in != 0) {
513
        strm->total_in != 0) {
436
        /* Flush the last buffer: */
514
        /* Flush the last buffer: */
437
        err = deflate(strm, Z_BLOCK);
515
        err = deflate(strm, Z_BLOCK);
-
 
516
        if (err == Z_BUF_ERROR && s->pending == 0)
-
 
517
            err = Z_OK;
438
    }
518
    }
439
    if (s->level != level) {
519
    if (s->level != level) {
440
        s->level = level;
520
        s->level = level;
441
        s->max_lazy_match   = configuration_table[level].max_lazy;
521
        s->max_lazy_match   = configuration_table[level].max_lazy;
442
        s->good_match       = configuration_table[level].good_length;
522
        s->good_match       = configuration_table[level].good_length;
443
        s->nice_match       = configuration_table[level].nice_length;
523
        s->nice_match       = configuration_table[level].nice_length;
444
        s->max_chain_length = configuration_table[level].max_chain;
524
        s->max_chain_length = configuration_table[level].max_chain;
445
    }
525
    }
446
    s->strategy = strategy;
526
    s->strategy = strategy;
447
    return err;
527
    return err;
448
}
528
}
449
 
529
 
450
/* ========================================================================= */
530
/* ========================================================================= */
451
int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
531
int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
452
    z_streamp strm;
532
    z_streamp strm;
453
    int good_length;
533
    int good_length;
454
    int max_lazy;
534
    int max_lazy;
455
    int nice_length;
535
    int nice_length;
456
    int max_chain;
536
    int max_chain;
457
{
537
{
458
    deflate_state *s;
538
    deflate_state *s;
459
 
539
 
460
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
540
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
461
    s = strm->state;
541
    s = strm->state;
462
    s->good_match = good_length;
542
    s->good_match = good_length;
463
    s->max_lazy_match = max_lazy;
543
    s->max_lazy_match = max_lazy;
464
    s->nice_match = nice_length;
544
    s->nice_match = nice_length;
465
    s->max_chain_length = max_chain;
545
    s->max_chain_length = max_chain;
466
    return Z_OK;
546
    return Z_OK;
467
}
547
}
468
 
548
 
469
/* =========================================================================
549
/* =========================================================================
470
 * For the default windowBits of 15 and memLevel of 8, this function returns
550
 * For the default windowBits of 15 and memLevel of 8, this function returns
471
 * a close to exact, as well as small, upper bound on the compressed size.
551
 * a close to exact, as well as small, upper bound on the compressed size.
472
 * They are coded as constants here for a reason--if the #define's are
552
 * They are coded as constants here for a reason--if the #define's are
473
 * changed, then this function needs to be changed as well.  The return
553
 * changed, then this function needs to be changed as well.  The return
474
 * value for 15 and 8 only works for those exact settings.
554
 * value for 15 and 8 only works for those exact settings.
475
 *
555
 *
476
 * For any setting other than those defaults for windowBits and memLevel,
556
 * For any setting other than those defaults for windowBits and memLevel,
477
 * the value returned is a conservative worst case for the maximum expansion
557
 * the value returned is a conservative worst case for the maximum expansion
478
 * resulting from using fixed blocks instead of stored blocks, which deflate
558
 * resulting from using fixed blocks instead of stored blocks, which deflate
479
 * can emit on compressed data for some combinations of the parameters.
559
 * can emit on compressed data for some combinations of the parameters.
480
 *
560
 *
481
 * This function could be more sophisticated to provide closer upper bounds for
561
 * This function could be more sophisticated to provide closer upper bounds for
482
 * every combination of windowBits and memLevel.  But even the conservative
562
 * every combination of windowBits and memLevel.  But even the conservative
483
 * upper bound of about 14% expansion does not seem onerous for output buffer
563
 * upper bound of about 14% expansion does not seem onerous for output buffer
484
 * allocation.
564
 * allocation.
485
 */
565
 */
486
uLong ZEXPORT deflateBound(strm, sourceLen)
566
uLong ZEXPORT deflateBound(strm, sourceLen)
487
    z_streamp strm;
567
    z_streamp strm;
488
    uLong sourceLen;
568
    uLong sourceLen;
489
{
569
{
490
    deflate_state *s;
570
    deflate_state *s;
491
    uLong complen, wraplen;
571
    uLong complen, wraplen;
492
    Bytef *str;
572
    Bytef *str;
493
 
573
 
494
    /* conservative upper bound for compressed data */
574
    /* conservative upper bound for compressed data */
495
    complen = sourceLen +
575
    complen = sourceLen +
496
              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
576
              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
497
 
577
 
498
    /* if can't get parameters, return conservative bound plus zlib wrapper */
578
    /* if can't get parameters, return conservative bound plus zlib wrapper */
499
    if (strm == Z_NULL || strm->state == Z_NULL)
579
    if (strm == Z_NULL || strm->state == Z_NULL)
500
        return complen + 6;
580
        return complen + 6;
501
 
581
 
502
    /* compute wrapper length */
582
    /* compute wrapper length */
503
    s = strm->state;
583
    s = strm->state;
504
    switch (s->wrap) {
584
    switch (s->wrap) {
505
    case 0:                                 /* raw deflate */
585
    case 0:                                 /* raw deflate */
506
        wraplen = 0;
586
        wraplen = 0;
507
        break;
587
        break;
508
    case 1:                                 /* zlib wrapper */
588
    case 1:                                 /* zlib wrapper */
509
        wraplen = 6 + (s->strstart ? 4 : 0);
589
        wraplen = 6 + (s->strstart ? 4 : 0);
510
        break;
590
        break;
511
    case 2:                                 /* gzip wrapper */
591
    case 2:                                 /* gzip wrapper */
512
        wraplen = 18;
592
        wraplen = 18;
513
        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
593
        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
514
            if (s->gzhead->extra != Z_NULL)
594
            if (s->gzhead->extra != Z_NULL)
515
                wraplen += 2 + s->gzhead->extra_len;
595
                wraplen += 2 + s->gzhead->extra_len;
516
            str = s->gzhead->name;
596
            str = s->gzhead->name;
517
            if (str != Z_NULL)
597
            if (str != Z_NULL)
518
                do {
598
                do {
519
                    wraplen++;
599
                    wraplen++;
520
                } while (*str++);
600
                } while (*str++);
521
            str = s->gzhead->comment;
601
            str = s->gzhead->comment;
522
            if (str != Z_NULL)
602
            if (str != Z_NULL)
523
                do {
603
                do {
524
                    wraplen++;
604
                    wraplen++;
525
                } while (*str++);
605
                } while (*str++);
526
            if (s->gzhead->hcrc)
606
            if (s->gzhead->hcrc)
527
                wraplen += 2;
607
                wraplen += 2;
528
        }
608
        }
529
        break;
609
        break;
530
    default:                                /* for compiler happiness */
610
    default:                                /* for compiler happiness */
531
        wraplen = 6;
611
        wraplen = 6;
532
    }
612
    }
533
 
613
 
534
    /* if not default parameters, return conservative bound */
614
    /* if not default parameters, return conservative bound */
535
    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
615
    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
536
        return complen + wraplen;
616
        return complen + wraplen;
537
 
617
 
538
    /* default settings: return tight bound for that case */
618
    /* default settings: return tight bound for that case */
539
    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
619
    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
540
           (sourceLen >> 25) + 13 - 6 + wraplen;
620
           (sourceLen >> 25) + 13 - 6 + wraplen;
541
}
621
}
542
 
622
 
543
/* =========================================================================
623
/* =========================================================================
544
 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
624
 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
545
 * IN assertion: the stream state is correct and there is enough room in
625
 * IN assertion: the stream state is correct and there is enough room in
546
 * pending_buf.
626
 * pending_buf.
547
 */
627
 */
548
local void putShortMSB (s, b)
628
local void putShortMSB (s, b)
549
    deflate_state *s;
629
    deflate_state *s;
550
    uInt b;
630
    uInt b;
551
{
631
{
552
    put_byte(s, (Byte)(b >> 8));
632
    put_byte(s, (Byte)(b >> 8));
553
    put_byte(s, (Byte)(b & 0xff));
633
    put_byte(s, (Byte)(b & 0xff));
554
}
634
}
555
 
635
 
556
/* =========================================================================
636
/* =========================================================================
557
 * Flush as much pending output as possible. All deflate() output goes
637
 * Flush as much pending output as possible. All deflate() output goes
558
 * through this function so some applications may wish to modify it
638
 * through this function so some applications may wish to modify it
559
 * to avoid allocating a large strm->next_out buffer and copying into it.
639
 * to avoid allocating a large strm->next_out buffer and copying into it.
560
 * (See also read_buf()).
640
 * (See also read_buf()).
561
 */
641
 */
562
local void flush_pending(strm)
642
local void flush_pending(strm)
563
    z_streamp strm;
643
    z_streamp strm;
564
{
644
{
-
 
645
    unsigned len;
565
    unsigned len = strm->state->pending;
646
    deflate_state *s = strm->state;
-
 
647
 
-
 
648
    _tr_flush_bits(s);
566
 
649
    len = s->pending;
567
    if (len > strm->avail_out) len = strm->avail_out;
650
    if (len > strm->avail_out) len = strm->avail_out;
568
    if (len == 0) return;
651
    if (len == 0) return;
569
 
652
 
570
    zmemcpy(strm->next_out, strm->state->pending_out, len);
653
    zmemcpy(strm->next_out, s->pending_out, len);
571
    strm->next_out  += len;
654
    strm->next_out  += len;
572
    strm->state->pending_out  += len;
655
    s->pending_out  += len;
573
    strm->total_out += len;
656
    strm->total_out += len;
574
    strm->avail_out  -= len;
657
    strm->avail_out  -= len;
575
    strm->state->pending -= len;
658
    s->pending -= len;
576
    if (strm->state->pending == 0) {
659
    if (s->pending == 0) {
577
        strm->state->pending_out = strm->state->pending_buf;
660
        s->pending_out = s->pending_buf;
578
    }
661
    }
579
}
662
}
580
 
663
 
581
/* ========================================================================= */
664
/* ========================================================================= */
582
int ZEXPORT deflate (strm, flush)
665
int ZEXPORT deflate (strm, flush)
583
    z_streamp strm;
666
    z_streamp strm;
584
    int flush;
667
    int flush;
585
{
668
{
586
    int old_flush; /* value of flush param for previous deflate call */
669
    int old_flush; /* value of flush param for previous deflate call */
587
    deflate_state *s;
670
    deflate_state *s;
588
 
671
 
589
    if (strm == Z_NULL || strm->state == Z_NULL ||
672
    if (strm == Z_NULL || strm->state == Z_NULL ||
590
        flush > Z_BLOCK || flush < 0) {
673
        flush > Z_BLOCK || flush < 0) {
591
        return Z_STREAM_ERROR;
674
        return Z_STREAM_ERROR;
592
    }
675
    }
593
    s = strm->state;
676
    s = strm->state;
594
 
677
 
595
    if (strm->next_out == Z_NULL ||
678
    if (strm->next_out == Z_NULL ||
596
        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
679
        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
597
        (s->status == FINISH_STATE && flush != Z_FINISH)) {
680
        (s->status == FINISH_STATE && flush != Z_FINISH)) {
598
        ERR_RETURN(strm, Z_STREAM_ERROR);
681
        ERR_RETURN(strm, Z_STREAM_ERROR);
599
    }
682
    }
600
    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
683
    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
601
 
684
 
602
    s->strm = strm; /* just in case */
685
    s->strm = strm; /* just in case */
603
    old_flush = s->last_flush;
686
    old_flush = s->last_flush;
604
    s->last_flush = flush;
687
    s->last_flush = flush;
605
 
688
 
606
    /* Write the header */
689
    /* Write the header */
607
    if (s->status == INIT_STATE) {
690
    if (s->status == INIT_STATE) {
608
#ifdef GZIP
691
#ifdef GZIP
609
        if (s->wrap == 2) {
692
        if (s->wrap == 2) {
610
            strm->adler = crc32(0L, Z_NULL, 0);
693
            strm->adler = crc32(0L, Z_NULL, 0);
611
            put_byte(s, 31);
694
            put_byte(s, 31);
612
            put_byte(s, 139);
695
            put_byte(s, 139);
613
            put_byte(s, 8);
696
            put_byte(s, 8);
614
            if (s->gzhead == Z_NULL) {
697
            if (s->gzhead == Z_NULL) {
615
                put_byte(s, 0);
698
                put_byte(s, 0);
616
                put_byte(s, 0);
699
                put_byte(s, 0);
617
                put_byte(s, 0);
700
                put_byte(s, 0);
618
                put_byte(s, 0);
701
                put_byte(s, 0);
619
                put_byte(s, 0);
702
                put_byte(s, 0);
620
                put_byte(s, s->level == 9 ? 2 :
703
                put_byte(s, s->level == 9 ? 2 :
621
                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
704
                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
622
                             4 : 0));
705
                             4 : 0));
623
                put_byte(s, OS_CODE);
706
                put_byte(s, OS_CODE);
624
                s->status = BUSY_STATE;
707
                s->status = BUSY_STATE;
625
            }
708
            }
626
            else {
709
            else {
627
                put_byte(s, (s->gzhead->text ? 1 : 0) +
710
                put_byte(s, (s->gzhead->text ? 1 : 0) +
628
                            (s->gzhead->hcrc ? 2 : 0) +
711
                            (s->gzhead->hcrc ? 2 : 0) +
629
                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
712
                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
630
                            (s->gzhead->name == Z_NULL ? 0 : 8) +
713
                            (s->gzhead->name == Z_NULL ? 0 : 8) +
631
                            (s->gzhead->comment == Z_NULL ? 0 : 16)
714
                            (s->gzhead->comment == Z_NULL ? 0 : 16)
632
                        );
715
                        );
633
                put_byte(s, (Byte)(s->gzhead->time & 0xff));
716
                put_byte(s, (Byte)(s->gzhead->time & 0xff));
634
                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
717
                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
635
                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
718
                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
636
                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
719
                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
637
                put_byte(s, s->level == 9 ? 2 :
720
                put_byte(s, s->level == 9 ? 2 :
638
                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
721
                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
639
                             4 : 0));
722
                             4 : 0));
640
                put_byte(s, s->gzhead->os & 0xff);
723
                put_byte(s, s->gzhead->os & 0xff);
641
                if (s->gzhead->extra != Z_NULL) {
724
                if (s->gzhead->extra != Z_NULL) {
642
                    put_byte(s, s->gzhead->extra_len & 0xff);
725
                    put_byte(s, s->gzhead->extra_len & 0xff);
643
                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
726
                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
644
                }
727
                }
645
                if (s->gzhead->hcrc)
728
                if (s->gzhead->hcrc)
646
                    strm->adler = crc32(strm->adler, s->pending_buf,
729
                    strm->adler = crc32(strm->adler, s->pending_buf,
647
                                        s->pending);
730
                                        s->pending);
648
                s->gzindex = 0;
731
                s->gzindex = 0;
649
                s->status = EXTRA_STATE;
732
                s->status = EXTRA_STATE;
650
            }
733
            }
651
        }
734
        }
652
        else
735
        else
653
#endif
736
#endif
654
        {
737
        {
655
            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
738
            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
656
            uInt level_flags;
739
            uInt level_flags;
657
 
740
 
658
            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
741
            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
659
                level_flags = 0;
742
                level_flags = 0;
660
            else if (s->level < 6)
743
            else if (s->level < 6)
661
                level_flags = 1;
744
                level_flags = 1;
662
            else if (s->level == 6)
745
            else if (s->level == 6)
663
                level_flags = 2;
746
                level_flags = 2;
664
            else
747
            else
665
                level_flags = 3;
748
                level_flags = 3;
666
            header |= (level_flags << 6);
749
            header |= (level_flags << 6);
667
            if (s->strstart != 0) header |= PRESET_DICT;
750
            if (s->strstart != 0) header |= PRESET_DICT;
668
            header += 31 - (header % 31);
751
            header += 31 - (header % 31);
669
 
752
 
670
            s->status = BUSY_STATE;
753
            s->status = BUSY_STATE;
671
            putShortMSB(s, header);
754
            putShortMSB(s, header);
672
 
755
 
673
            /* Save the adler32 of the preset dictionary: */
756
            /* Save the adler32 of the preset dictionary: */
674
            if (s->strstart != 0) {
757
            if (s->strstart != 0) {
675
                putShortMSB(s, (uInt)(strm->adler >> 16));
758
                putShortMSB(s, (uInt)(strm->adler >> 16));
676
                putShortMSB(s, (uInt)(strm->adler & 0xffff));
759
                putShortMSB(s, (uInt)(strm->adler & 0xffff));
677
            }
760
            }
678
            strm->adler = adler32(0L, Z_NULL, 0);
761
            strm->adler = adler32(0L, Z_NULL, 0);
679
        }
762
        }
680
    }
763
    }
681
#ifdef GZIP
764
#ifdef GZIP
682
    if (s->status == EXTRA_STATE) {
765
    if (s->status == EXTRA_STATE) {
683
        if (s->gzhead->extra != Z_NULL) {
766
        if (s->gzhead->extra != Z_NULL) {
684
            uInt beg = s->pending;  /* start of bytes to update crc */
767
            uInt beg = s->pending;  /* start of bytes to update crc */
685
 
768
 
686
            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
769
            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
687
                if (s->pending == s->pending_buf_size) {
770
                if (s->pending == s->pending_buf_size) {
688
                    if (s->gzhead->hcrc && s->pending > beg)
771
                    if (s->gzhead->hcrc && s->pending > beg)
689
                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
772
                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
690
                                            s->pending - beg);
773
                                            s->pending - beg);
691
                    flush_pending(strm);
774
                    flush_pending(strm);
692
                    beg = s->pending;
775
                    beg = s->pending;
693
                    if (s->pending == s->pending_buf_size)
776
                    if (s->pending == s->pending_buf_size)
694
                        break;
777
                        break;
695
                }
778
                }
696
                put_byte(s, s->gzhead->extra[s->gzindex]);
779
                put_byte(s, s->gzhead->extra[s->gzindex]);
697
                s->gzindex++;
780
                s->gzindex++;
698
            }
781
            }
699
            if (s->gzhead->hcrc && s->pending > beg)
782
            if (s->gzhead->hcrc && s->pending > beg)
700
                strm->adler = crc32(strm->adler, s->pending_buf + beg,
783
                strm->adler = crc32(strm->adler, s->pending_buf + beg,
701
                                    s->pending - beg);
784
                                    s->pending - beg);
702
            if (s->gzindex == s->gzhead->extra_len) {
785
            if (s->gzindex == s->gzhead->extra_len) {
703
                s->gzindex = 0;
786
                s->gzindex = 0;
704
                s->status = NAME_STATE;
787
                s->status = NAME_STATE;
705
            }
788
            }
706
        }
789
        }
707
        else
790
        else
708
            s->status = NAME_STATE;
791
            s->status = NAME_STATE;
709
    }
792
    }
710
    if (s->status == NAME_STATE) {
793
    if (s->status == NAME_STATE) {
711
        if (s->gzhead->name != Z_NULL) {
794
        if (s->gzhead->name != Z_NULL) {
712
            uInt beg = s->pending;  /* start of bytes to update crc */
795
            uInt beg = s->pending;  /* start of bytes to update crc */
713
            int val;
796
            int val;
714
 
797
 
715
            do {
798
            do {
716
                if (s->pending == s->pending_buf_size) {
799
                if (s->pending == s->pending_buf_size) {
717
                    if (s->gzhead->hcrc && s->pending > beg)
800
                    if (s->gzhead->hcrc && s->pending > beg)
718
                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
801
                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
719
                                            s->pending - beg);
802
                                            s->pending - beg);
720
                    flush_pending(strm);
803
                    flush_pending(strm);
721
                    beg = s->pending;
804
                    beg = s->pending;
722
                    if (s->pending == s->pending_buf_size) {
805
                    if (s->pending == s->pending_buf_size) {
723
                        val = 1;
806
                        val = 1;
724
                        break;
807
                        break;
725
                    }
808
                    }
726
                }
809
                }
727
                val = s->gzhead->name[s->gzindex++];
810
                val = s->gzhead->name[s->gzindex++];
728
                put_byte(s, val);
811
                put_byte(s, val);
729
            } while (val != 0);
812
            } while (val != 0);
730
            if (s->gzhead->hcrc && s->pending > beg)
813
            if (s->gzhead->hcrc && s->pending > beg)
731
                strm->adler = crc32(strm->adler, s->pending_buf + beg,
814
                strm->adler = crc32(strm->adler, s->pending_buf + beg,
732
                                    s->pending - beg);
815
                                    s->pending - beg);
733
            if (val == 0) {
816
            if (val == 0) {
734
                s->gzindex = 0;
817
                s->gzindex = 0;
735
                s->status = COMMENT_STATE;
818
                s->status = COMMENT_STATE;
736
            }
819
            }
737
        }
820
        }
738
        else
821
        else
739
            s->status = COMMENT_STATE;
822
            s->status = COMMENT_STATE;
740
    }
823
    }
741
    if (s->status == COMMENT_STATE) {
824
    if (s->status == COMMENT_STATE) {
742
        if (s->gzhead->comment != Z_NULL) {
825
        if (s->gzhead->comment != Z_NULL) {
743
            uInt beg = s->pending;  /* start of bytes to update crc */
826
            uInt beg = s->pending;  /* start of bytes to update crc */
744
            int val;
827
            int val;
745
 
828
 
746
            do {
829
            do {
747
                if (s->pending == s->pending_buf_size) {
830
                if (s->pending == s->pending_buf_size) {
748
                    if (s->gzhead->hcrc && s->pending > beg)
831
                    if (s->gzhead->hcrc && s->pending > beg)
749
                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
832
                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
750
                                            s->pending - beg);
833
                                            s->pending - beg);
751
                    flush_pending(strm);
834
                    flush_pending(strm);
752
                    beg = s->pending;
835
                    beg = s->pending;
753
                    if (s->pending == s->pending_buf_size) {
836
                    if (s->pending == s->pending_buf_size) {
754
                        val = 1;
837
                        val = 1;
755
                        break;
838
                        break;
756
                    }
839
                    }
757
                }
840
                }
758
                val = s->gzhead->comment[s->gzindex++];
841
                val = s->gzhead->comment[s->gzindex++];
759
                put_byte(s, val);
842
                put_byte(s, val);
760
            } while (val != 0);
843
            } while (val != 0);
761
            if (s->gzhead->hcrc && s->pending > beg)
844
            if (s->gzhead->hcrc && s->pending > beg)
762
                strm->adler = crc32(strm->adler, s->pending_buf + beg,
845
                strm->adler = crc32(strm->adler, s->pending_buf + beg,
763
                                    s->pending - beg);
846
                                    s->pending - beg);
764
            if (val == 0)
847
            if (val == 0)
765
                s->status = HCRC_STATE;
848
                s->status = HCRC_STATE;
766
        }
849
        }
767
        else
850
        else
768
            s->status = HCRC_STATE;
851
            s->status = HCRC_STATE;
769
    }
852
    }
770
    if (s->status == HCRC_STATE) {
853
    if (s->status == HCRC_STATE) {
771
        if (s->gzhead->hcrc) {
854
        if (s->gzhead->hcrc) {
772
            if (s->pending + 2 > s->pending_buf_size)
855
            if (s->pending + 2 > s->pending_buf_size)
773
                flush_pending(strm);
856
                flush_pending(strm);
774
            if (s->pending + 2 <= s->pending_buf_size) {
857
            if (s->pending + 2 <= s->pending_buf_size) {
775
                put_byte(s, (Byte)(strm->adler & 0xff));
858
                put_byte(s, (Byte)(strm->adler & 0xff));
776
                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
859
                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
777
                strm->adler = crc32(0L, Z_NULL, 0);
860
                strm->adler = crc32(0L, Z_NULL, 0);
778
                s->status = BUSY_STATE;
861
                s->status = BUSY_STATE;
779
            }
862
            }
780
        }
863
        }
781
        else
864
        else
782
            s->status = BUSY_STATE;
865
            s->status = BUSY_STATE;
783
    }
866
    }
784
#endif
867
#endif
785
 
868
 
786
    /* Flush as much pending output as possible */
869
    /* Flush as much pending output as possible */
787
    if (s->pending != 0) {
870
    if (s->pending != 0) {
788
        flush_pending(strm);
871
        flush_pending(strm);
789
        if (strm->avail_out == 0) {
872
        if (strm->avail_out == 0) {
790
            /* Since avail_out is 0, deflate will be called again with
873
            /* Since avail_out is 0, deflate will be called again with
791
             * more output space, but possibly with both pending and
874
             * more output space, but possibly with both pending and
792
             * avail_in equal to zero. There won't be anything to do,
875
             * avail_in equal to zero. There won't be anything to do,
793
             * but this is not an error situation so make sure we
876
             * but this is not an error situation so make sure we
794
             * return OK instead of BUF_ERROR at next call of deflate:
877
             * return OK instead of BUF_ERROR at next call of deflate:
795
             */
878
             */
796
            s->last_flush = -1;
879
            s->last_flush = -1;
797
            return Z_OK;
880
            return Z_OK;
798
        }
881
        }
799
 
882
 
800
    /* Make sure there is something to do and avoid duplicate consecutive
883
    /* Make sure there is something to do and avoid duplicate consecutive
801
     * flushes. For repeated and useless calls with Z_FINISH, we keep
884
     * flushes. For repeated and useless calls with Z_FINISH, we keep
802
     * returning Z_STREAM_END instead of Z_BUF_ERROR.
885
     * returning Z_STREAM_END instead of Z_BUF_ERROR.
803
     */
886
     */
804
    } else if (strm->avail_in == 0 && flush <= old_flush &&
887
    } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
805
               flush != Z_FINISH) {
888
               flush != Z_FINISH) {
806
        ERR_RETURN(strm, Z_BUF_ERROR);
889
        ERR_RETURN(strm, Z_BUF_ERROR);
807
    }
890
    }
808
 
891
 
809
    /* User must not provide more input after the first FINISH: */
892
    /* User must not provide more input after the first FINISH: */
810
    if (s->status == FINISH_STATE && strm->avail_in != 0) {
893
    if (s->status == FINISH_STATE && strm->avail_in != 0) {
811
        ERR_RETURN(strm, Z_BUF_ERROR);
894
        ERR_RETURN(strm, Z_BUF_ERROR);
812
    }
895
    }
813
 
896
 
814
    /* Start a new block or continue the current one.
897
    /* Start a new block or continue the current one.
815
     */
898
     */
816
    if (strm->avail_in != 0 || s->lookahead != 0 ||
899
    if (strm->avail_in != 0 || s->lookahead != 0 ||
817
        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
900
        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
818
        block_state bstate;
901
        block_state bstate;
819
 
902
 
820
        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
903
        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
821
                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :
904
                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :
822
                        (*(configuration_table[s->level].func))(s, flush));
905
                        (*(configuration_table[s->level].func))(s, flush));
823
 
906
 
824
        if (bstate == finish_started || bstate == finish_done) {
907
        if (bstate == finish_started || bstate == finish_done) {
825
            s->status = FINISH_STATE;
908
            s->status = FINISH_STATE;
826
        }
909
        }
827
        if (bstate == need_more || bstate == finish_started) {
910
        if (bstate == need_more || bstate == finish_started) {
828
            if (strm->avail_out == 0) {
911
            if (strm->avail_out == 0) {
829
                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
912
                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
830
            }
913
            }
831
            return Z_OK;
914
            return Z_OK;
832
            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
915
            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
833
             * of deflate should use the same flush parameter to make sure
916
             * of deflate should use the same flush parameter to make sure
834
             * that the flush is complete. So we don't have to output an
917
             * that the flush is complete. So we don't have to output an
835
             * empty block here, this will be done at next call. This also
918
             * empty block here, this will be done at next call. This also
836
             * ensures that for a very small output buffer, we emit at most
919
             * ensures that for a very small output buffer, we emit at most
837
             * one empty block.
920
             * one empty block.
838
             */
921
             */
839
        }
922
        }
840
        if (bstate == block_done) {
923
        if (bstate == block_done) {
841
            if (flush == Z_PARTIAL_FLUSH) {
924
            if (flush == Z_PARTIAL_FLUSH) {
842
                _tr_align(s);
925
                _tr_align(s);
843
            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
926
            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
844
                _tr_stored_block(s, (char*)0, 0L, 0);
927
                _tr_stored_block(s, (char*)0, 0L, 0);
845
                /* For a full flush, this empty block will be recognized
928
                /* For a full flush, this empty block will be recognized
846
                 * as a special marker by inflate_sync().
929
                 * as a special marker by inflate_sync().
847
                 */
930
                 */
848
                if (flush == Z_FULL_FLUSH) {
931
                if (flush == Z_FULL_FLUSH) {
849
                    CLEAR_HASH(s);             /* forget history */
932
                    CLEAR_HASH(s);             /* forget history */
850
                    if (s->lookahead == 0) {
933
                    if (s->lookahead == 0) {
851
                        s->strstart = 0;
934
                        s->strstart = 0;
852
                        s->block_start = 0L;
935
                        s->block_start = 0L;
-
 
936
                        s->insert = 0;
853
                    }
937
                    }
854
                }
938
                }
855
            }
939
            }
856
            flush_pending(strm);
940
            flush_pending(strm);
857
            if (strm->avail_out == 0) {
941
            if (strm->avail_out == 0) {
858
              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
942
              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
859
              return Z_OK;
943
              return Z_OK;
860
            }
944
            }
861
        }
945
        }
862
    }
946
    }
863
    Assert(strm->avail_out > 0, "bug2");
947
    Assert(strm->avail_out > 0, "bug2");
864
 
948
 
865
    if (flush != Z_FINISH) return Z_OK;
949
    if (flush != Z_FINISH) return Z_OK;
866
    if (s->wrap <= 0) return Z_STREAM_END;
950
    if (s->wrap <= 0) return Z_STREAM_END;
867
 
951
 
868
    /* Write the trailer */
952
    /* Write the trailer */
869
#ifdef GZIP
953
#ifdef GZIP
870
    if (s->wrap == 2) {
954
    if (s->wrap == 2) {
871
        put_byte(s, (Byte)(strm->adler & 0xff));
955
        put_byte(s, (Byte)(strm->adler & 0xff));
872
        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
956
        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
873
        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
957
        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
874
        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
958
        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
875
        put_byte(s, (Byte)(strm->total_in & 0xff));
959
        put_byte(s, (Byte)(strm->total_in & 0xff));
876
        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
960
        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
877
        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
961
        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
878
        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
962
        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
879
    }
963
    }
880
    else
964
    else
881
#endif
965
#endif
882
    {
966
    {
883
        putShortMSB(s, (uInt)(strm->adler >> 16));
967
        putShortMSB(s, (uInt)(strm->adler >> 16));
884
        putShortMSB(s, (uInt)(strm->adler & 0xffff));
968
        putShortMSB(s, (uInt)(strm->adler & 0xffff));
885
    }
969
    }
886
    flush_pending(strm);
970
    flush_pending(strm);
887
    /* If avail_out is zero, the application will call deflate again
971
    /* If avail_out is zero, the application will call deflate again
888
     * to flush the rest.
972
     * to flush the rest.
889
     */
973
     */
890
    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
974
    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
891
    return s->pending != 0 ? Z_OK : Z_STREAM_END;
975
    return s->pending != 0 ? Z_OK : Z_STREAM_END;
892
}
976
}
893
 
977
 
894
/* ========================================================================= */
978
/* ========================================================================= */
895
int ZEXPORT deflateEnd (strm)
979
int ZEXPORT deflateEnd (strm)
896
    z_streamp strm;
980
    z_streamp strm;
897
{
981
{
898
    int status;
982
    int status;
899
 
983
 
900
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
984
    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
901
 
985
 
902
    status = strm->state->status;
986
    status = strm->state->status;
903
    if (status != INIT_STATE &&
987
    if (status != INIT_STATE &&
904
        status != EXTRA_STATE &&
988
        status != EXTRA_STATE &&
905
        status != NAME_STATE &&
989
        status != NAME_STATE &&
906
        status != COMMENT_STATE &&
990
        status != COMMENT_STATE &&
907
        status != HCRC_STATE &&
991
        status != HCRC_STATE &&
908
        status != BUSY_STATE &&
992
        status != BUSY_STATE &&
909
        status != FINISH_STATE) {
993
        status != FINISH_STATE) {
910
      return Z_STREAM_ERROR;
994
      return Z_STREAM_ERROR;
911
    }
995
    }
912
 
996
 
913
    /* Deallocate in reverse order of allocations: */
997
    /* Deallocate in reverse order of allocations: */
914
    TRY_FREE(strm, strm->state->pending_buf);
998
    TRY_FREE(strm, strm->state->pending_buf);
915
    TRY_FREE(strm, strm->state->head);
999
    TRY_FREE(strm, strm->state->head);
916
    TRY_FREE(strm, strm->state->prev);
1000
    TRY_FREE(strm, strm->state->prev);
917
    TRY_FREE(strm, strm->state->window);
1001
    TRY_FREE(strm, strm->state->window);
918
 
1002
 
919
    ZFREE(strm, strm->state);
1003
    ZFREE(strm, strm->state);
920
    strm->state = Z_NULL;
1004
    strm->state = Z_NULL;
921
 
1005
 
922
    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
1006
    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
923
}
1007
}
924
 
1008
 
925
/* =========================================================================
1009
/* =========================================================================
926
 * Copy the source state to the destination state.
1010
 * Copy the source state to the destination state.
927
 * To simplify the source, this is not supported for 16-bit MSDOS (which
1011
 * To simplify the source, this is not supported for 16-bit MSDOS (which
928
 * doesn't have enough memory anyway to duplicate compression states).
1012
 * doesn't have enough memory anyway to duplicate compression states).
929
 */
1013
 */
930
int ZEXPORT deflateCopy (dest, source)
1014
int ZEXPORT deflateCopy (dest, source)
931
    z_streamp dest;
1015
    z_streamp dest;
932
    z_streamp source;
1016
    z_streamp source;
933
{
1017
{
934
#ifdef MAXSEG_64K
1018
#ifdef MAXSEG_64K
935
    return Z_STREAM_ERROR;
1019
    return Z_STREAM_ERROR;
936
#else
1020
#else
937
    deflate_state *ds;
1021
    deflate_state *ds;
938
    deflate_state *ss;
1022
    deflate_state *ss;
939
    ushf *overlay;
1023
    ushf *overlay;
940
 
1024
 
941
 
1025
 
942
    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
1026
    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
943
        return Z_STREAM_ERROR;
1027
        return Z_STREAM_ERROR;
944
    }
1028
    }
945
 
1029
 
946
    ss = source->state;
1030
    ss = source->state;
947
 
1031
 
948
    zmemcpy(dest, source, sizeof(z_stream));
1032
    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
949
 
1033
 
950
    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
1034
    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
951
    if (ds == Z_NULL) return Z_MEM_ERROR;
1035
    if (ds == Z_NULL) return Z_MEM_ERROR;
952
    dest->state = (struct internal_state FAR *) ds;
1036
    dest->state = (struct internal_state FAR *) ds;
953
    zmemcpy(ds, ss, sizeof(deflate_state));
1037
    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
954
    ds->strm = dest;
1038
    ds->strm = dest;
955
 
1039
 
956
    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
1040
    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
957
    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
1041
    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
958
    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
1042
    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
959
    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
1043
    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
960
    ds->pending_buf = (uchf *) overlay;
1044
    ds->pending_buf = (uchf *) overlay;
961
 
1045
 
962
    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
1046
    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
963
        ds->pending_buf == Z_NULL) {
1047
        ds->pending_buf == Z_NULL) {
964
        deflateEnd (dest);
1048
        deflateEnd (dest);
965
        return Z_MEM_ERROR;
1049
        return Z_MEM_ERROR;
966
    }
1050
    }
967
    /* following zmemcpy do not work for 16-bit MSDOS */
1051
    /* following zmemcpy do not work for 16-bit MSDOS */
968
    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
1052
    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
969
    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
1053
    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
970
    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
1054
    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
971
    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
1055
    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
972
 
1056
 
973
    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
1057
    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
974
    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
1058
    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
975
    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
1059
    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
976
 
1060
 
977
    ds->l_desc.dyn_tree = ds->dyn_ltree;
1061
    ds->l_desc.dyn_tree = ds->dyn_ltree;
978
    ds->d_desc.dyn_tree = ds->dyn_dtree;
1062
    ds->d_desc.dyn_tree = ds->dyn_dtree;
979
    ds->bl_desc.dyn_tree = ds->bl_tree;
1063
    ds->bl_desc.dyn_tree = ds->bl_tree;
980
 
1064
 
981
    return Z_OK;
1065
    return Z_OK;
982
#endif /* MAXSEG_64K */
1066
#endif /* MAXSEG_64K */
983
}
1067
}
984
 
1068
 
985
/* ===========================================================================
1069
/* ===========================================================================
986
 * Read a new buffer from the current input stream, update the adler32
1070
 * Read a new buffer from the current input stream, update the adler32
987
 * and total number of bytes read.  All deflate() input goes through
1071
 * and total number of bytes read.  All deflate() input goes through
988
 * this function so some applications may wish to modify it to avoid
1072
 * this function so some applications may wish to modify it to avoid
989
 * allocating a large strm->next_in buffer and copying from it.
1073
 * allocating a large strm->next_in buffer and copying from it.
990
 * (See also flush_pending()).
1074
 * (See also flush_pending()).
991
 */
1075
 */
992
local int read_buf(strm, buf, size)
1076
local int read_buf(strm, buf, size)
993
    z_streamp strm;
1077
    z_streamp strm;
994
    Bytef *buf;
1078
    Bytef *buf;
995
    unsigned size;
1079
    unsigned size;
996
{
1080
{
997
    unsigned len = strm->avail_in;
1081
    unsigned len = strm->avail_in;
998
 
1082
 
999
    if (len > size) len = size;
1083
    if (len > size) len = size;
1000
    if (len == 0) return 0;
1084
    if (len == 0) return 0;
1001
 
1085
 
1002
    strm->avail_in  -= len;
1086
    strm->avail_in  -= len;
-
 
1087
 
1003
 
1088
    zmemcpy(buf, strm->next_in, len);
1004
    if (strm->state->wrap == 1) {
1089
    if (strm->state->wrap == 1) {
1005
        strm->adler = adler32(strm->adler, strm->next_in, len);
1090
        strm->adler = adler32(strm->adler, buf, len);
1006
    }
1091
    }
1007
#ifdef GZIP
1092
#ifdef GZIP
1008
    else if (strm->state->wrap == 2) {
1093
    else if (strm->state->wrap == 2) {
1009
        strm->adler = crc32(strm->adler, strm->next_in, len);
1094
        strm->adler = crc32(strm->adler, buf, len);
1010
    }
1095
    }
1011
#endif
1096
#endif
1012
    zmemcpy(buf, strm->next_in, len);
-
 
1013
    strm->next_in  += len;
1097
    strm->next_in  += len;
1014
    strm->total_in += len;
1098
    strm->total_in += len;
1015
 
1099
 
1016
    return (int)len;
1100
    return (int)len;
1017
}
1101
}
1018
 
1102
 
1019
/* ===========================================================================
1103
/* ===========================================================================
1020
 * Initialize the "longest match" routines for a new zlib stream
1104
 * Initialize the "longest match" routines for a new zlib stream
1021
 */
1105
 */
1022
local void lm_init (s)
1106
local void lm_init (s)
1023
    deflate_state *s;
1107
    deflate_state *s;
1024
{
1108
{
1025
    s->window_size = (ulg)2L*s->w_size;
1109
    s->window_size = (ulg)2L*s->w_size;
1026
 
1110
 
1027
    CLEAR_HASH(s);
1111
    CLEAR_HASH(s);
1028
 
1112
 
1029
    /* Set the default configuration parameters:
1113
    /* Set the default configuration parameters:
1030
     */
1114
     */
1031
    s->max_lazy_match   = configuration_table[s->level].max_lazy;
1115
    s->max_lazy_match   = configuration_table[s->level].max_lazy;
1032
    s->good_match       = configuration_table[s->level].good_length;
1116
    s->good_match       = configuration_table[s->level].good_length;
1033
    s->nice_match       = configuration_table[s->level].nice_length;
1117
    s->nice_match       = configuration_table[s->level].nice_length;
1034
    s->max_chain_length = configuration_table[s->level].max_chain;
1118
    s->max_chain_length = configuration_table[s->level].max_chain;
1035
 
1119
 
1036
    s->strstart = 0;
1120
    s->strstart = 0;
1037
    s->block_start = 0L;
1121
    s->block_start = 0L;
1038
    s->lookahead = 0;
1122
    s->lookahead = 0;
-
 
1123
    s->insert = 0;
1039
    s->match_length = s->prev_length = MIN_MATCH-1;
1124
    s->match_length = s->prev_length = MIN_MATCH-1;
1040
    s->match_available = 0;
1125
    s->match_available = 0;
1041
    s->ins_h = 0;
1126
    s->ins_h = 0;
1042
#ifndef FASTEST
1127
#ifndef FASTEST
1043
#ifdef ASMV
1128
#ifdef ASMV
1044
    match_init(); /* initialize the asm code */
1129
    match_init(); /* initialize the asm code */
1045
#endif
1130
#endif
1046
#endif
1131
#endif
1047
}
1132
}
1048
 
1133
 
1049
#ifndef FASTEST
1134
#ifndef FASTEST
1050
/* ===========================================================================
1135
/* ===========================================================================
1051
 * Set match_start to the longest match starting at the given string and
1136
 * Set match_start to the longest match starting at the given string and
1052
 * return its length. Matches shorter or equal to prev_length are discarded,
1137
 * return its length. Matches shorter or equal to prev_length are discarded,
1053
 * in which case the result is equal to prev_length and match_start is
1138
 * in which case the result is equal to prev_length and match_start is
1054
 * garbage.
1139
 * garbage.
1055
 * IN assertions: cur_match is the head of the hash chain for the current
1140
 * IN assertions: cur_match is the head of the hash chain for the current
1056
 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
1141
 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
1057
 * OUT assertion: the match length is not greater than s->lookahead.
1142
 * OUT assertion: the match length is not greater than s->lookahead.
1058
 */
1143
 */
1059
#ifndef ASMV
1144
#ifndef ASMV
1060
/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
1145
/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
1061
 * match.S. The code will be functionally equivalent.
1146
 * match.S. The code will be functionally equivalent.
1062
 */
1147
 */
1063
local uInt longest_match(s, cur_match)
1148
local uInt longest_match(s, cur_match)
1064
    deflate_state *s;
1149
    deflate_state *s;
1065
    IPos cur_match;                             /* current match */
1150
    IPos cur_match;                             /* current match */
1066
{
1151
{
1067
    unsigned chain_length = s->max_chain_length;/* max hash chain length */
1152
    unsigned chain_length = s->max_chain_length;/* max hash chain length */
1068
    register Bytef *scan = s->window + s->strstart; /* current string */
1153
    register Bytef *scan = s->window + s->strstart; /* current string */
1069
    register Bytef *match;                       /* matched string */
1154
    register Bytef *match;                       /* matched string */
1070
    register int len;                           /* length of current match */
1155
    register int len;                           /* length of current match */
1071
    int best_len = s->prev_length;              /* best match length so far */
1156
    int best_len = s->prev_length;              /* best match length so far */
1072
    int nice_match = s->nice_match;             /* stop if match long enough */
1157
    int nice_match = s->nice_match;             /* stop if match long enough */
1073
    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
1158
    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
1074
        s->strstart - (IPos)MAX_DIST(s) : NIL;
1159
        s->strstart - (IPos)MAX_DIST(s) : NIL;
1075
    /* Stop when cur_match becomes <= limit. To simplify the code,
1160
    /* Stop when cur_match becomes <= limit. To simplify the code,
1076
     * we prevent matches with the string of window index 0.
1161
     * we prevent matches with the string of window index 0.
1077
     */
1162
     */
1078
    Posf *prev = s->prev;
1163
    Posf *prev = s->prev;
1079
    uInt wmask = s->w_mask;
1164
    uInt wmask = s->w_mask;
1080
 
1165
 
1081
#ifdef UNALIGNED_OK
1166
#ifdef UNALIGNED_OK
1082
    /* Compare two bytes at a time. Note: this is not always beneficial.
1167
    /* Compare two bytes at a time. Note: this is not always beneficial.
1083
     * Try with and without -DUNALIGNED_OK to check.
1168
     * Try with and without -DUNALIGNED_OK to check.
1084
     */
1169
     */
1085
    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
1170
    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
1086
    register ush scan_start = *(ushf*)scan;
1171
    register ush scan_start = *(ushf*)scan;
1087
    register ush scan_end   = *(ushf*)(scan+best_len-1);
1172
    register ush scan_end   = *(ushf*)(scan+best_len-1);
1088
#else
1173
#else
1089
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1174
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1090
    register Byte scan_end1  = scan[best_len-1];
1175
    register Byte scan_end1  = scan[best_len-1];
1091
    register Byte scan_end   = scan[best_len];
1176
    register Byte scan_end   = scan[best_len];
1092
#endif
1177
#endif
1093
 
1178
 
1094
    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1179
    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1095
     * It is easy to get rid of this optimization if necessary.
1180
     * It is easy to get rid of this optimization if necessary.
1096
     */
1181
     */
1097
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1182
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1098
 
1183
 
1099
    /* Do not waste too much time if we already have a good match: */
1184
    /* Do not waste too much time if we already have a good match: */
1100
    if (s->prev_length >= s->good_match) {
1185
    if (s->prev_length >= s->good_match) {
1101
        chain_length >>= 2;
1186
        chain_length >>= 2;
1102
    }
1187
    }
1103
    /* Do not look for matches beyond the end of the input. This is necessary
1188
    /* Do not look for matches beyond the end of the input. This is necessary
1104
     * to make deflate deterministic.
1189
     * to make deflate deterministic.
1105
     */
1190
     */
1106
    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
1191
    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
1107
 
1192
 
1108
    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
1193
    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
1109
 
1194
 
1110
    do {
1195
    do {
1111
        Assert(cur_match < s->strstart, "no future");
1196
        Assert(cur_match < s->strstart, "no future");
1112
        match = s->window + cur_match;
1197
        match = s->window + cur_match;
1113
 
1198
 
1114
        /* Skip to next match if the match length cannot increase
1199
        /* Skip to next match if the match length cannot increase
1115
         * or if the match length is less than 2.  Note that the checks below
1200
         * or if the match length is less than 2.  Note that the checks below
1116
         * for insufficient lookahead only occur occasionally for performance
1201
         * for insufficient lookahead only occur occasionally for performance
1117
         * reasons.  Therefore uninitialized memory will be accessed, and
1202
         * reasons.  Therefore uninitialized memory will be accessed, and
1118
         * conditional jumps will be made that depend on those values.
1203
         * conditional jumps will be made that depend on those values.
1119
         * However the length of the match is limited to the lookahead, so
1204
         * However the length of the match is limited to the lookahead, so
1120
         * the output of deflate is not affected by the uninitialized values.
1205
         * the output of deflate is not affected by the uninitialized values.
1121
         */
1206
         */
1122
#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
1207
#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
1123
        /* This code assumes sizeof(unsigned short) == 2. Do not use
1208
        /* This code assumes sizeof(unsigned short) == 2. Do not use
1124
         * UNALIGNED_OK if your compiler uses a different size.
1209
         * UNALIGNED_OK if your compiler uses a different size.
1125
         */
1210
         */
1126
        if (*(ushf*)(match+best_len-1) != scan_end ||
1211
        if (*(ushf*)(match+best_len-1) != scan_end ||
1127
            *(ushf*)match != scan_start) continue;
1212
            *(ushf*)match != scan_start) continue;
1128
 
1213
 
1129
        /* It is not necessary to compare scan[2] and match[2] since they are
1214
        /* It is not necessary to compare scan[2] and match[2] since they are
1130
         * always equal when the other bytes match, given that the hash keys
1215
         * always equal when the other bytes match, given that the hash keys
1131
         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
1216
         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
1132
         * strstart+3, +5, ... up to strstart+257. We check for insufficient
1217
         * strstart+3, +5, ... up to strstart+257. We check for insufficient
1133
         * lookahead only every 4th comparison; the 128th check will be made
1218
         * lookahead only every 4th comparison; the 128th check will be made
1134
         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
1219
         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
1135
         * necessary to put more guard bytes at the end of the window, or
1220
         * necessary to put more guard bytes at the end of the window, or
1136
         * to check more often for insufficient lookahead.
1221
         * to check more often for insufficient lookahead.
1137
         */
1222
         */
1138
        Assert(scan[2] == match[2], "scan[2]?");
1223
        Assert(scan[2] == match[2], "scan[2]?");
1139
        scan++, match++;
1224
        scan++, match++;
1140
        do {
1225
        do {
1141
        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1226
        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1142
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1227
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1143
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1228
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1144
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1229
                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
1145
                 scan < strend);
1230
                 scan < strend);
1146
        /* The funny "do {}" generates better code on most compilers */
1231
        /* The funny "do {}" generates better code on most compilers */
1147
 
1232
 
1148
        /* Here, scan <= window+strstart+257 */
1233
        /* Here, scan <= window+strstart+257 */
1149
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1234
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1150
        if (*scan == *match) scan++;
1235
        if (*scan == *match) scan++;
1151
 
1236
 
1152
        len = (MAX_MATCH - 1) - (int)(strend-scan);
1237
        len = (MAX_MATCH - 1) - (int)(strend-scan);
1153
        scan = strend - (MAX_MATCH-1);
1238
        scan = strend - (MAX_MATCH-1);
1154
 
1239
 
1155
#else /* UNALIGNED_OK */
1240
#else /* UNALIGNED_OK */
1156
 
1241
 
1157
        if (match[best_len]   != scan_end  ||
1242
        if (match[best_len]   != scan_end  ||
1158
            match[best_len-1] != scan_end1 ||
1243
            match[best_len-1] != scan_end1 ||
1159
            *match            != *scan     ||
1244
            *match            != *scan     ||
1160
            *++match          != scan[1])      continue;
1245
            *++match          != scan[1])      continue;
1161
 
1246
 
1162
        /* The check at best_len-1 can be removed because it will be made
1247
        /* The check at best_len-1 can be removed because it will be made
1163
         * again later. (This heuristic is not always a win.)
1248
         * again later. (This heuristic is not always a win.)
1164
         * It is not necessary to compare scan[2] and match[2] since they
1249
         * It is not necessary to compare scan[2] and match[2] since they
1165
         * are always equal when the other bytes match, given that
1250
         * are always equal when the other bytes match, given that
1166
         * the hash keys are equal and that HASH_BITS >= 8.
1251
         * the hash keys are equal and that HASH_BITS >= 8.
1167
         */
1252
         */
1168
        scan += 2, match++;
1253
        scan += 2, match++;
1169
        Assert(*scan == *match, "match[2]?");
1254
        Assert(*scan == *match, "match[2]?");
1170
 
1255
 
1171
        /* We check for insufficient lookahead only every 8th comparison;
1256
        /* We check for insufficient lookahead only every 8th comparison;
1172
         * the 256th check will be made at strstart+258.
1257
         * the 256th check will be made at strstart+258.
1173
         */
1258
         */
1174
        do {
1259
        do {
1175
        } while (*++scan == *++match && *++scan == *++match &&
1260
        } while (*++scan == *++match && *++scan == *++match &&
1176
                 *++scan == *++match && *++scan == *++match &&
1261
                 *++scan == *++match && *++scan == *++match &&
1177
                 *++scan == *++match && *++scan == *++match &&
1262
                 *++scan == *++match && *++scan == *++match &&
1178
                 *++scan == *++match && *++scan == *++match &&
1263
                 *++scan == *++match && *++scan == *++match &&
1179
                 scan < strend);
1264
                 scan < strend);
1180
 
1265
 
1181
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1266
        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1182
 
1267
 
1183
        len = MAX_MATCH - (int)(strend - scan);
1268
        len = MAX_MATCH - (int)(strend - scan);
1184
        scan = strend - MAX_MATCH;
1269
        scan = strend - MAX_MATCH;
1185
 
1270
 
1186
#endif /* UNALIGNED_OK */
1271
#endif /* UNALIGNED_OK */
1187
 
1272
 
1188
        if (len > best_len) {
1273
        if (len > best_len) {
1189
            s->match_start = cur_match;
1274
            s->match_start = cur_match;
1190
            best_len = len;
1275
            best_len = len;
1191
            if (len >= nice_match) break;
1276
            if (len >= nice_match) break;
1192
#ifdef UNALIGNED_OK
1277
#ifdef UNALIGNED_OK
1193
            scan_end = *(ushf*)(scan+best_len-1);
1278
            scan_end = *(ushf*)(scan+best_len-1);
1194
#else
1279
#else
1195
            scan_end1  = scan[best_len-1];
1280
            scan_end1  = scan[best_len-1];
1196
            scan_end   = scan[best_len];
1281
            scan_end   = scan[best_len];
1197
#endif
1282
#endif
1198
        }
1283
        }
1199
    } while ((cur_match = prev[cur_match & wmask]) > limit
1284
    } while ((cur_match = prev[cur_match & wmask]) > limit
1200
             && --chain_length != 0);
1285
             && --chain_length != 0);
1201
 
1286
 
1202
    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
1287
    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
1203
    return s->lookahead;
1288
    return s->lookahead;
1204
}
1289
}
1205
#endif /* ASMV */
1290
#endif /* ASMV */
1206
 
1291
 
1207
#else /* FASTEST */
1292
#else /* FASTEST */
1208
 
1293
 
1209
/* ---------------------------------------------------------------------------
1294
/* ---------------------------------------------------------------------------
1210
 * Optimized version for FASTEST only
1295
 * Optimized version for FASTEST only
1211
 */
1296
 */
1212
local uInt longest_match(s, cur_match)
1297
local uInt longest_match(s, cur_match)
1213
    deflate_state *s;
1298
    deflate_state *s;
1214
    IPos cur_match;                             /* current match */
1299
    IPos cur_match;                             /* current match */
1215
{
1300
{
1216
    register Bytef *scan = s->window + s->strstart; /* current string */
1301
    register Bytef *scan = s->window + s->strstart; /* current string */
1217
    register Bytef *match;                       /* matched string */
1302
    register Bytef *match;                       /* matched string */
1218
    register int len;                           /* length of current match */
1303
    register int len;                           /* length of current match */
1219
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1304
    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
1220
 
1305
 
1221
    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1306
    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
1222
     * It is easy to get rid of this optimization if necessary.
1307
     * It is easy to get rid of this optimization if necessary.
1223
     */
1308
     */
1224
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1309
    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
1225
 
1310
 
1226
    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
1311
    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
1227
 
1312
 
1228
    Assert(cur_match < s->strstart, "no future");
1313
    Assert(cur_match < s->strstart, "no future");
1229
 
1314
 
1230
    match = s->window + cur_match;
1315
    match = s->window + cur_match;
1231
 
1316
 
1232
    /* Return failure if the match length is less than 2:
1317
    /* Return failure if the match length is less than 2:
1233
     */
1318
     */
1234
    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
1319
    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
1235
 
1320
 
1236
    /* The check at best_len-1 can be removed because it will be made
1321
    /* The check at best_len-1 can be removed because it will be made
1237
     * again later. (This heuristic is not always a win.)
1322
     * again later. (This heuristic is not always a win.)
1238
     * It is not necessary to compare scan[2] and match[2] since they
1323
     * It is not necessary to compare scan[2] and match[2] since they
1239
     * are always equal when the other bytes match, given that
1324
     * are always equal when the other bytes match, given that
1240
     * the hash keys are equal and that HASH_BITS >= 8.
1325
     * the hash keys are equal and that HASH_BITS >= 8.
1241
     */
1326
     */
1242
    scan += 2, match += 2;
1327
    scan += 2, match += 2;
1243
    Assert(*scan == *match, "match[2]?");
1328
    Assert(*scan == *match, "match[2]?");
1244
 
1329
 
1245
    /* We check for insufficient lookahead only every 8th comparison;
1330
    /* We check for insufficient lookahead only every 8th comparison;
1246
     * the 256th check will be made at strstart+258.
1331
     * the 256th check will be made at strstart+258.
1247
     */
1332
     */
1248
    do {
1333
    do {
1249
    } while (*++scan == *++match && *++scan == *++match &&
1334
    } while (*++scan == *++match && *++scan == *++match &&
1250
             *++scan == *++match && *++scan == *++match &&
1335
             *++scan == *++match && *++scan == *++match &&
1251
             *++scan == *++match && *++scan == *++match &&
1336
             *++scan == *++match && *++scan == *++match &&
1252
             *++scan == *++match && *++scan == *++match &&
1337
             *++scan == *++match && *++scan == *++match &&
1253
             scan < strend);
1338
             scan < strend);
1254
 
1339
 
1255
    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1340
    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
1256
 
1341
 
1257
    len = MAX_MATCH - (int)(strend - scan);
1342
    len = MAX_MATCH - (int)(strend - scan);
1258
 
1343
 
1259
    if (len < MIN_MATCH) return MIN_MATCH - 1;
1344
    if (len < MIN_MATCH) return MIN_MATCH - 1;
1260
 
1345
 
1261
    s->match_start = cur_match;
1346
    s->match_start = cur_match;
1262
    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
1347
    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
1263
}
1348
}
1264
 
1349
 
1265
#endif /* FASTEST */
1350
#endif /* FASTEST */
1266
 
1351
 
1267
#ifdef DEBUG
1352
#ifdef DEBUG
1268
/* ===========================================================================
1353
/* ===========================================================================
1269
 * Check that the match at match_start is indeed a match.
1354
 * Check that the match at match_start is indeed a match.
1270
 */
1355
 */
1271
local void check_match(s, start, match, length)
1356
local void check_match(s, start, match, length)
1272
    deflate_state *s;
1357
    deflate_state *s;
1273
    IPos start, match;
1358
    IPos start, match;
1274
    int length;
1359
    int length;
1275
{
1360
{
1276
    /* check that the match is indeed a match */
1361
    /* check that the match is indeed a match */
1277
    if (zmemcmp(s->window + match,
1362
    if (zmemcmp(s->window + match,
1278
                s->window + start, length) != EQUAL) {
1363
                s->window + start, length) != EQUAL) {
1279
        fprintf(stderr, " start %u, match %u, length %d\n",
1364
        fprintf(stderr, " start %u, match %u, length %d\n",
1280
                start, match, length);
1365
                start, match, length);
1281
        do {
1366
        do {
1282
            fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
1367
            fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
1283
        } while (--length != 0);
1368
        } while (--length != 0);
1284
        z_error("invalid match");
1369
        z_error("invalid match");
1285
    }
1370
    }
1286
    if (z_verbose > 1) {
1371
    if (z_verbose > 1) {
1287
        fprintf(stderr,"\\[%d,%d]", start-match, length);
1372
        fprintf(stderr,"\\[%d,%d]", start-match, length);
1288
        do { putc(s->window[start++], stderr); } while (--length != 0);
1373
        do { putc(s->window[start++], stderr); } while (--length != 0);
1289
    }
1374
    }
1290
}
1375
}
1291
#else
1376
#else
1292
#  define check_match(s, start, match, length)
1377
#  define check_match(s, start, match, length)
1293
#endif /* DEBUG */
1378
#endif /* DEBUG */
1294
 
1379
 
1295
/* ===========================================================================
1380
/* ===========================================================================
1296
 * Fill the window when the lookahead becomes insufficient.
1381
 * Fill the window when the lookahead becomes insufficient.
1297
 * Updates strstart and lookahead.
1382
 * Updates strstart and lookahead.
1298
 *
1383
 *
1299
 * IN assertion: lookahead < MIN_LOOKAHEAD
1384
 * IN assertion: lookahead < MIN_LOOKAHEAD
1300
 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
1385
 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
1301
 *    At least one byte has been read, or avail_in == 0; reads are
1386
 *    At least one byte has been read, or avail_in == 0; reads are
1302
 *    performed for at least two bytes (required for the zip translate_eol
1387
 *    performed for at least two bytes (required for the zip translate_eol
1303
 *    option -- not supported here).
1388
 *    option -- not supported here).
1304
 */
1389
 */
1305
local void fill_window(s)
1390
local void fill_window(s)
1306
    deflate_state *s;
1391
    deflate_state *s;
1307
{
1392
{
1308
    register unsigned n, m;
1393
    register unsigned n, m;
1309
    register Posf *p;
1394
    register Posf *p;
1310
    unsigned more;    /* Amount of free space at the end of the window. */
1395
    unsigned more;    /* Amount of free space at the end of the window. */
1311
    uInt wsize = s->w_size;
1396
    uInt wsize = s->w_size;
-
 
1397
 
-
 
1398
    Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
1312
 
1399
 
1313
    do {
1400
    do {
1314
        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
1401
        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
1315
 
1402
 
1316
        /* Deal with !@#$% 64K limit: */
1403
        /* Deal with !@#$% 64K limit: */
1317
        if (sizeof(int) <= 2) {
1404
        if (sizeof(int) <= 2) {
1318
            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
1405
            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
1319
                more = wsize;
1406
                more = wsize;
1320
 
1407
 
1321
            } else if (more == (unsigned)(-1)) {
1408
            } else if (more == (unsigned)(-1)) {
1322
                /* Very unlikely, but possible on 16 bit machine if
1409
                /* Very unlikely, but possible on 16 bit machine if
1323
                 * strstart == 0 && lookahead == 1 (input done a byte at time)
1410
                 * strstart == 0 && lookahead == 1 (input done a byte at time)
1324
                 */
1411
                 */
1325
                more--;
1412
                more--;
1326
            }
1413
            }
1327
        }
1414
        }
1328
 
1415
 
1329
        /* If the window is almost full and there is insufficient lookahead,
1416
        /* If the window is almost full and there is insufficient lookahead,
1330
         * move the upper half to the lower one to make room in the upper half.
1417
         * move the upper half to the lower one to make room in the upper half.
1331
         */
1418
         */
1332
        if (s->strstart >= wsize+MAX_DIST(s)) {
1419
        if (s->strstart >= wsize+MAX_DIST(s)) {
1333
 
1420
 
1334
            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
1421
            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
1335
            s->match_start -= wsize;
1422
            s->match_start -= wsize;
1336
            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
1423
            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
1337
            s->block_start -= (long) wsize;
1424
            s->block_start -= (long) wsize;
1338
 
1425
 
1339
            /* Slide the hash table (could be avoided with 32 bit values
1426
            /* Slide the hash table (could be avoided with 32 bit values
1340
               at the expense of memory usage). We slide even when level == 0
1427
               at the expense of memory usage). We slide even when level == 0
1341
               to keep the hash table consistent if we switch back to level > 0
1428
               to keep the hash table consistent if we switch back to level > 0
1342
               later. (Using level 0 permanently is not an optimal usage of
1429
               later. (Using level 0 permanently is not an optimal usage of
1343
               zlib, so we don't care about this pathological case.)
1430
               zlib, so we don't care about this pathological case.)
1344
             */
1431
             */
1345
            n = s->hash_size;
1432
            n = s->hash_size;
1346
            p = &s->head[n];
1433
            p = &s->head[n];
1347
            do {
1434
            do {
1348
                m = *--p;
1435
                m = *--p;
1349
                *p = (Pos)(m >= wsize ? m-wsize : NIL);
1436
                *p = (Pos)(m >= wsize ? m-wsize : NIL);
1350
            } while (--n);
1437
            } while (--n);
1351
 
1438
 
1352
            n = wsize;
1439
            n = wsize;
1353
#ifndef FASTEST
1440
#ifndef FASTEST
1354
            p = &s->prev[n];
1441
            p = &s->prev[n];
1355
            do {
1442
            do {
1356
                m = *--p;
1443
                m = *--p;
1357
                *p = (Pos)(m >= wsize ? m-wsize : NIL);
1444
                *p = (Pos)(m >= wsize ? m-wsize : NIL);
1358
                /* If n is not on any hash chain, prev[n] is garbage but
1445
                /* If n is not on any hash chain, prev[n] is garbage but
1359
                 * its value will never be used.
1446
                 * its value will never be used.
1360
                 */
1447
                 */
1361
            } while (--n);
1448
            } while (--n);
1362
#endif
1449
#endif
1363
            more += wsize;
1450
            more += wsize;
1364
        }
1451
        }
1365
        if (s->strm->avail_in == 0) return;
1452
        if (s->strm->avail_in == 0) break;
1366
 
1453
 
1367
        /* If there was no sliding:
1454
        /* If there was no sliding:
1368
         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
1455
         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
1369
         *    more == window_size - lookahead - strstart
1456
         *    more == window_size - lookahead - strstart
1370
         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
1457
         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
1371
         * => more >= window_size - 2*WSIZE + 2
1458
         * => more >= window_size - 2*WSIZE + 2
1372
         * In the BIG_MEM or MMAP case (not yet supported),
1459
         * In the BIG_MEM or MMAP case (not yet supported),
1373
         *   window_size == input_size + MIN_LOOKAHEAD  &&
1460
         *   window_size == input_size + MIN_LOOKAHEAD  &&
1374
         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
1461
         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
1375
         * Otherwise, window_size == 2*WSIZE so more >= 2.
1462
         * Otherwise, window_size == 2*WSIZE so more >= 2.
1376
         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
1463
         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
1377
         */
1464
         */
1378
        Assert(more >= 2, "more < 2");
1465
        Assert(more >= 2, "more < 2");
1379
 
1466
 
1380
        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
1467
        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
1381
        s->lookahead += n;
1468
        s->lookahead += n;
1382
 
1469
 
1383
        /* Initialize the hash value now that we have some input: */
1470
        /* Initialize the hash value now that we have some input: */
1384
        if (s->lookahead >= MIN_MATCH) {
1471
        if (s->lookahead + s->insert >= MIN_MATCH) {
-
 
1472
            uInt str = s->strstart - s->insert;
1385
            s->ins_h = s->window[s->strstart];
1473
            s->ins_h = s->window[str];
1386
            UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1474
            UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
1387
#if MIN_MATCH != 3
1475
#if MIN_MATCH != 3
1388
            Call UPDATE_HASH() MIN_MATCH-3 more times
1476
            Call UPDATE_HASH() MIN_MATCH-3 more times
1389
#endif
1477
#endif
-
 
1478
            while (s->insert) {
-
 
1479
                UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
-
 
1480
#ifndef FASTEST
-
 
1481
                s->prev[str & s->w_mask] = s->head[s->ins_h];
-
 
1482
#endif
-
 
1483
                s->head[s->ins_h] = (Pos)str;
-
 
1484
                str++;
-
 
1485
                s->insert--;
-
 
1486
                if (s->lookahead + s->insert < MIN_MATCH)
-
 
1487
                    break;
-
 
1488
            }
1390
        }
1489
        }
1391
        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
1490
        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
1392
         * but this is not important since only literal bytes will be emitted.
1491
         * but this is not important since only literal bytes will be emitted.
1393
         */
1492
         */
1394
 
1493
 
1395
    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
1494
    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
1396
 
1495
 
1397
    /* If the WIN_INIT bytes after the end of the current data have never been
1496
    /* If the WIN_INIT bytes after the end of the current data have never been
1398
     * written, then zero those bytes in order to avoid memory check reports of
1497
     * written, then zero those bytes in order to avoid memory check reports of
1399
     * the use of uninitialized (or uninitialised as Julian writes) bytes by
1498
     * the use of uninitialized (or uninitialised as Julian writes) bytes by
1400
     * the longest match routines.  Update the high water mark for the next
1499
     * the longest match routines.  Update the high water mark for the next
1401
     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
1500
     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
1402
     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
1501
     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
1403
     */
1502
     */
1404
    if (s->high_water < s->window_size) {
1503
    if (s->high_water < s->window_size) {
1405
        ulg curr = s->strstart + (ulg)(s->lookahead);
1504
        ulg curr = s->strstart + (ulg)(s->lookahead);
1406
        ulg init;
1505
        ulg init;
1407
 
1506
 
1408
        if (s->high_water < curr) {
1507
        if (s->high_water < curr) {
1409
            /* Previous high water mark below current data -- zero WIN_INIT
1508
            /* Previous high water mark below current data -- zero WIN_INIT
1410
             * bytes or up to end of window, whichever is less.
1509
             * bytes or up to end of window, whichever is less.
1411
             */
1510
             */
1412
            init = s->window_size - curr;
1511
            init = s->window_size - curr;
1413
            if (init > WIN_INIT)
1512
            if (init > WIN_INIT)
1414
                init = WIN_INIT;
1513
                init = WIN_INIT;
1415
            zmemzero(s->window + curr, (unsigned)init);
1514
            zmemzero(s->window + curr, (unsigned)init);
1416
            s->high_water = curr + init;
1515
            s->high_water = curr + init;
1417
        }
1516
        }
1418
        else if (s->high_water < (ulg)curr + WIN_INIT) {
1517
        else if (s->high_water < (ulg)curr + WIN_INIT) {
1419
            /* High water mark at or above current data, but below current data
1518
            /* High water mark at or above current data, but below current data
1420
             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
1519
             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
1421
             * to end of window, whichever is less.
1520
             * to end of window, whichever is less.
1422
             */
1521
             */
1423
            init = (ulg)curr + WIN_INIT - s->high_water;
1522
            init = (ulg)curr + WIN_INIT - s->high_water;
1424
            if (init > s->window_size - s->high_water)
1523
            if (init > s->window_size - s->high_water)
1425
                init = s->window_size - s->high_water;
1524
                init = s->window_size - s->high_water;
1426
            zmemzero(s->window + s->high_water, (unsigned)init);
1525
            zmemzero(s->window + s->high_water, (unsigned)init);
1427
            s->high_water += init;
1526
            s->high_water += init;
1428
        }
1527
        }
1429
    }
1528
    }
-
 
1529
 
-
 
1530
    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
-
 
1531
           "not enough room for search");
1430
}
1532
}
1431
 
1533
 
1432
/* ===========================================================================
1534
/* ===========================================================================
1433
 * Flush the current block, with given end-of-file flag.
1535
 * Flush the current block, with given end-of-file flag.
1434
 * IN assertion: strstart is set to the end of the current match.
1536
 * IN assertion: strstart is set to the end of the current match.
1435
 */
1537
 */
1436
#define FLUSH_BLOCK_ONLY(s, last) { \
1538
#define FLUSH_BLOCK_ONLY(s, last) { \
1437
   _tr_flush_block(s, (s->block_start >= 0L ? \
1539
   _tr_flush_block(s, (s->block_start >= 0L ? \
1438
                   (charf *)&s->window[(unsigned)s->block_start] : \
1540
                   (charf *)&s->window[(unsigned)s->block_start] : \
1439
                   (charf *)Z_NULL), \
1541
                   (charf *)Z_NULL), \
1440
                (ulg)((long)s->strstart - s->block_start), \
1542
                (ulg)((long)s->strstart - s->block_start), \
1441
                (last)); \
1543
                (last)); \
1442
   s->block_start = s->strstart; \
1544
   s->block_start = s->strstart; \
1443
   flush_pending(s->strm); \
1545
   flush_pending(s->strm); \
1444
   Tracev((stderr,"[FLUSH]")); \
1546
   Tracev((stderr,"[FLUSH]")); \
1445
}
1547
}
1446
 
1548
 
1447
/* Same but force premature exit if necessary. */
1549
/* Same but force premature exit if necessary. */
1448
#define FLUSH_BLOCK(s, last) { \
1550
#define FLUSH_BLOCK(s, last) { \
1449
   FLUSH_BLOCK_ONLY(s, last); \
1551
   FLUSH_BLOCK_ONLY(s, last); \
1450
   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
1552
   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
1451
}
1553
}
1452
 
1554
 
1453
/* ===========================================================================
1555
/* ===========================================================================
1454
 * Copy without compression as much as possible from the input stream, return
1556
 * Copy without compression as much as possible from the input stream, return
1455
 * the current block state.
1557
 * the current block state.
1456
 * This function does not insert new strings in the dictionary since
1558
 * This function does not insert new strings in the dictionary since
1457
 * uncompressible data is probably not useful. This function is used
1559
 * uncompressible data is probably not useful. This function is used
1458
 * only for the level=0 compression option.
1560
 * only for the level=0 compression option.
1459
 * NOTE: this function should be optimized to avoid extra copying from
1561
 * NOTE: this function should be optimized to avoid extra copying from
1460
 * window to pending_buf.
1562
 * window to pending_buf.
1461
 */
1563
 */
1462
local block_state deflate_stored(s, flush)
1564
local block_state deflate_stored(s, flush)
1463
    deflate_state *s;
1565
    deflate_state *s;
1464
    int flush;
1566
    int flush;
1465
{
1567
{
1466
    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
1568
    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
1467
     * to pending_buf_size, and each stored block has a 5 byte header:
1569
     * to pending_buf_size, and each stored block has a 5 byte header:
1468
     */
1570
     */
1469
    ulg max_block_size = 0xffff;
1571
    ulg max_block_size = 0xffff;
1470
    ulg max_start;
1572
    ulg max_start;
1471
 
1573
 
1472
    if (max_block_size > s->pending_buf_size - 5) {
1574
    if (max_block_size > s->pending_buf_size - 5) {
1473
        max_block_size = s->pending_buf_size - 5;
1575
        max_block_size = s->pending_buf_size - 5;
1474
    }
1576
    }
1475
 
1577
 
1476
    /* Copy as much as possible from input to output: */
1578
    /* Copy as much as possible from input to output: */
1477
    for (;;) {
1579
    for (;;) {
1478
        /* Fill the window as much as possible: */
1580
        /* Fill the window as much as possible: */
1479
        if (s->lookahead <= 1) {
1581
        if (s->lookahead <= 1) {
1480
 
1582
 
1481
            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
1583
            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
1482
                   s->block_start >= (long)s->w_size, "slide too late");
1584
                   s->block_start >= (long)s->w_size, "slide too late");
1483
 
1585
 
1484
            fill_window(s);
1586
            fill_window(s);
1485
            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
1587
            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
1486
 
1588
 
1487
            if (s->lookahead == 0) break; /* flush the current block */
1589
            if (s->lookahead == 0) break; /* flush the current block */
1488
        }
1590
        }
1489
        Assert(s->block_start >= 0L, "block gone");
1591
        Assert(s->block_start >= 0L, "block gone");
1490
 
1592
 
1491
        s->strstart += s->lookahead;
1593
        s->strstart += s->lookahead;
1492
        s->lookahead = 0;
1594
        s->lookahead = 0;
1493
 
1595
 
1494
        /* Emit a stored block if pending_buf will be full: */
1596
        /* Emit a stored block if pending_buf will be full: */
1495
        max_start = s->block_start + max_block_size;
1597
        max_start = s->block_start + max_block_size;
1496
        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
1598
        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
1497
            /* strstart == 0 is possible when wraparound on 16-bit machine */
1599
            /* strstart == 0 is possible when wraparound on 16-bit machine */
1498
            s->lookahead = (uInt)(s->strstart - max_start);
1600
            s->lookahead = (uInt)(s->strstart - max_start);
1499
            s->strstart = (uInt)max_start;
1601
            s->strstart = (uInt)max_start;
1500
            FLUSH_BLOCK(s, 0);
1602
            FLUSH_BLOCK(s, 0);
1501
        }
1603
        }
1502
        /* Flush if we may have to slide, otherwise block_start may become
1604
        /* Flush if we may have to slide, otherwise block_start may become
1503
         * negative and the data will be gone:
1605
         * negative and the data will be gone:
1504
         */
1606
         */
1505
        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
1607
        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
1506
            FLUSH_BLOCK(s, 0);
1608
            FLUSH_BLOCK(s, 0);
1507
        }
1609
        }
1508
    }
1610
    }
-
 
1611
    s->insert = 0;
1509
    FLUSH_BLOCK(s, flush == Z_FINISH);
1612
    if (flush == Z_FINISH) {
-
 
1613
        FLUSH_BLOCK(s, 1);
1510
    return flush == Z_FINISH ? finish_done : block_done;
1614
        return finish_done;
-
 
1615
    }
-
 
1616
    if ((long)s->strstart > s->block_start)
-
 
1617
        FLUSH_BLOCK(s, 0);
-
 
1618
    return block_done;
1511
}
1619
}
1512
 
1620
 
1513
/* ===========================================================================
1621
/* ===========================================================================
1514
 * Compress as much as possible from the input stream, return the current
1622
 * Compress as much as possible from the input stream, return the current
1515
 * block state.
1623
 * block state.
1516
 * This function does not perform lazy evaluation of matches and inserts
1624
 * This function does not perform lazy evaluation of matches and inserts
1517
 * new strings in the dictionary only for unmatched strings or for short
1625
 * new strings in the dictionary only for unmatched strings or for short
1518
 * matches. It is used only for the fast compression options.
1626
 * matches. It is used only for the fast compression options.
1519
 */
1627
 */
1520
local block_state deflate_fast(s, flush)
1628
local block_state deflate_fast(s, flush)
1521
    deflate_state *s;
1629
    deflate_state *s;
1522
    int flush;
1630
    int flush;
1523
{
1631
{
1524
    IPos hash_head;       /* head of the hash chain */
1632
    IPos hash_head;       /* head of the hash chain */
1525
    int bflush;           /* set if current block must be flushed */
1633
    int bflush;           /* set if current block must be flushed */
1526
 
1634
 
1527
    for (;;) {
1635
    for (;;) {
1528
        /* Make sure that we always have enough lookahead, except
1636
        /* Make sure that we always have enough lookahead, except
1529
         * at the end of the input file. We need MAX_MATCH bytes
1637
         * at the end of the input file. We need MAX_MATCH bytes
1530
         * for the next match, plus MIN_MATCH bytes to insert the
1638
         * for the next match, plus MIN_MATCH bytes to insert the
1531
         * string following the next match.
1639
         * string following the next match.
1532
         */
1640
         */
1533
        if (s->lookahead < MIN_LOOKAHEAD) {
1641
        if (s->lookahead < MIN_LOOKAHEAD) {
1534
            fill_window(s);
1642
            fill_window(s);
1535
            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1643
            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1536
                return need_more;
1644
                return need_more;
1537
            }
1645
            }
1538
            if (s->lookahead == 0) break; /* flush the current block */
1646
            if (s->lookahead == 0) break; /* flush the current block */
1539
        }
1647
        }
1540
 
1648
 
1541
        /* Insert the string window[strstart .. strstart+2] in the
1649
        /* Insert the string window[strstart .. strstart+2] in the
1542
         * dictionary, and set hash_head to the head of the hash chain:
1650
         * dictionary, and set hash_head to the head of the hash chain:
1543
         */
1651
         */
1544
        hash_head = NIL;
1652
        hash_head = NIL;
1545
        if (s->lookahead >= MIN_MATCH) {
1653
        if (s->lookahead >= MIN_MATCH) {
1546
            INSERT_STRING(s, s->strstart, hash_head);
1654
            INSERT_STRING(s, s->strstart, hash_head);
1547
        }
1655
        }
1548
 
1656
 
1549
        /* Find the longest match, discarding those <= prev_length.
1657
        /* Find the longest match, discarding those <= prev_length.
1550
         * At this point we have always match_length < MIN_MATCH
1658
         * At this point we have always match_length < MIN_MATCH
1551
         */
1659
         */
1552
        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
1660
        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
1553
            /* To simplify the code, we prevent matches with the string
1661
            /* To simplify the code, we prevent matches with the string
1554
             * of window index 0 (in particular we have to avoid a match
1662
             * of window index 0 (in particular we have to avoid a match
1555
             * of the string with itself at the start of the input file).
1663
             * of the string with itself at the start of the input file).
1556
             */
1664
             */
1557
            s->match_length = longest_match (s, hash_head);
1665
            s->match_length = longest_match (s, hash_head);
1558
            /* longest_match() sets match_start */
1666
            /* longest_match() sets match_start */
1559
        }
1667
        }
1560
        if (s->match_length >= MIN_MATCH) {
1668
        if (s->match_length >= MIN_MATCH) {
1561
            check_match(s, s->strstart, s->match_start, s->match_length);
1669
            check_match(s, s->strstart, s->match_start, s->match_length);
1562
 
1670
 
1563
            _tr_tally_dist(s, s->strstart - s->match_start,
1671
            _tr_tally_dist(s, s->strstart - s->match_start,
1564
                           s->match_length - MIN_MATCH, bflush);
1672
                           s->match_length - MIN_MATCH, bflush);
1565
 
1673
 
1566
            s->lookahead -= s->match_length;
1674
            s->lookahead -= s->match_length;
1567
 
1675
 
1568
            /* Insert new strings in the hash table only if the match length
1676
            /* Insert new strings in the hash table only if the match length
1569
             * is not too large. This saves time but degrades compression.
1677
             * is not too large. This saves time but degrades compression.
1570
             */
1678
             */
1571
#ifndef FASTEST
1679
#ifndef FASTEST
1572
            if (s->match_length <= s->max_insert_length &&
1680
            if (s->match_length <= s->max_insert_length &&
1573
                s->lookahead >= MIN_MATCH) {
1681
                s->lookahead >= MIN_MATCH) {
1574
                s->match_length--; /* string at strstart already in table */
1682
                s->match_length--; /* string at strstart already in table */
1575
                do {
1683
                do {
1576
                    s->strstart++;
1684
                    s->strstart++;
1577
                    INSERT_STRING(s, s->strstart, hash_head);
1685
                    INSERT_STRING(s, s->strstart, hash_head);
1578
                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
1686
                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
1579
                     * always MIN_MATCH bytes ahead.
1687
                     * always MIN_MATCH bytes ahead.
1580
                     */
1688
                     */
1581
                } while (--s->match_length != 0);
1689
                } while (--s->match_length != 0);
1582
                s->strstart++;
1690
                s->strstart++;
1583
            } else
1691
            } else
1584
#endif
1692
#endif
1585
            {
1693
            {
1586
                s->strstart += s->match_length;
1694
                s->strstart += s->match_length;
1587
                s->match_length = 0;
1695
                s->match_length = 0;
1588
                s->ins_h = s->window[s->strstart];
1696
                s->ins_h = s->window[s->strstart];
1589
                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1697
                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
1590
#if MIN_MATCH != 3
1698
#if MIN_MATCH != 3
1591
                Call UPDATE_HASH() MIN_MATCH-3 more times
1699
                Call UPDATE_HASH() MIN_MATCH-3 more times
1592
#endif
1700
#endif
1593
                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1701
                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
1594
                 * matter since it will be recomputed at next deflate call.
1702
                 * matter since it will be recomputed at next deflate call.
1595
                 */
1703
                 */
1596
            }
1704
            }
1597
        } else {
1705
        } else {
1598
            /* No match, output a literal byte */
1706
            /* No match, output a literal byte */
1599
            Tracevv((stderr,"%c", s->window[s->strstart]));
1707
            Tracevv((stderr,"%c", s->window[s->strstart]));
1600
            _tr_tally_lit (s, s->window[s->strstart], bflush);
1708
            _tr_tally_lit (s, s->window[s->strstart], bflush);
1601
            s->lookahead--;
1709
            s->lookahead--;
1602
            s->strstart++;
1710
            s->strstart++;
1603
        }
1711
        }
1604
        if (bflush) FLUSH_BLOCK(s, 0);
1712
        if (bflush) FLUSH_BLOCK(s, 0);
1605
    }
1713
    }
-
 
1714
    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
1606
    FLUSH_BLOCK(s, flush == Z_FINISH);
1715
    if (flush == Z_FINISH) {
-
 
1716
        FLUSH_BLOCK(s, 1);
1607
    return flush == Z_FINISH ? finish_done : block_done;
1717
        return finish_done;
-
 
1718
    }
-
 
1719
    if (s->last_lit)
-
 
1720
        FLUSH_BLOCK(s, 0);
-
 
1721
    return block_done;
1608
}
1722
}
1609
 
1723
 
1610
#ifndef FASTEST
1724
#ifndef FASTEST
1611
/* ===========================================================================
1725
/* ===========================================================================
1612
 * Same as above, but achieves better compression. We use a lazy
1726
 * Same as above, but achieves better compression. We use a lazy
1613
 * evaluation for matches: a match is finally adopted only if there is
1727
 * evaluation for matches: a match is finally adopted only if there is
1614
 * no better match at the next window position.
1728
 * no better match at the next window position.
1615
 */
1729
 */
1616
local block_state deflate_slow(s, flush)
1730
local block_state deflate_slow(s, flush)
1617
    deflate_state *s;
1731
    deflate_state *s;
1618
    int flush;
1732
    int flush;
1619
{
1733
{
1620
    IPos hash_head;          /* head of hash chain */
1734
    IPos hash_head;          /* head of hash chain */
1621
    int bflush;              /* set if current block must be flushed */
1735
    int bflush;              /* set if current block must be flushed */
1622
 
1736
 
1623
    /* Process the input block. */
1737
    /* Process the input block. */
1624
    for (;;) {
1738
    for (;;) {
1625
        /* Make sure that we always have enough lookahead, except
1739
        /* Make sure that we always have enough lookahead, except
1626
         * at the end of the input file. We need MAX_MATCH bytes
1740
         * at the end of the input file. We need MAX_MATCH bytes
1627
         * for the next match, plus MIN_MATCH bytes to insert the
1741
         * for the next match, plus MIN_MATCH bytes to insert the
1628
         * string following the next match.
1742
         * string following the next match.
1629
         */
1743
         */
1630
        if (s->lookahead < MIN_LOOKAHEAD) {
1744
        if (s->lookahead < MIN_LOOKAHEAD) {
1631
            fill_window(s);
1745
            fill_window(s);
1632
            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1746
            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
1633
                return need_more;
1747
                return need_more;
1634
            }
1748
            }
1635
            if (s->lookahead == 0) break; /* flush the current block */
1749
            if (s->lookahead == 0) break; /* flush the current block */
1636
        }
1750
        }
1637
 
1751
 
1638
        /* Insert the string window[strstart .. strstart+2] in the
1752
        /* Insert the string window[strstart .. strstart+2] in the
1639
         * dictionary, and set hash_head to the head of the hash chain:
1753
         * dictionary, and set hash_head to the head of the hash chain:
1640
         */
1754
         */
1641
        hash_head = NIL;
1755
        hash_head = NIL;
1642
        if (s->lookahead >= MIN_MATCH) {
1756
        if (s->lookahead >= MIN_MATCH) {
1643
            INSERT_STRING(s, s->strstart, hash_head);
1757
            INSERT_STRING(s, s->strstart, hash_head);
1644
        }
1758
        }
1645
 
1759
 
1646
        /* Find the longest match, discarding those <= prev_length.
1760
        /* Find the longest match, discarding those <= prev_length.
1647
         */
1761
         */
1648
        s->prev_length = s->match_length, s->prev_match = s->match_start;
1762
        s->prev_length = s->match_length, s->prev_match = s->match_start;
1649
        s->match_length = MIN_MATCH-1;
1763
        s->match_length = MIN_MATCH-1;
1650
 
1764
 
1651
        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
1765
        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
1652
            s->strstart - hash_head <= MAX_DIST(s)) {
1766
            s->strstart - hash_head <= MAX_DIST(s)) {
1653
            /* To simplify the code, we prevent matches with the string
1767
            /* To simplify the code, we prevent matches with the string
1654
             * of window index 0 (in particular we have to avoid a match
1768
             * of window index 0 (in particular we have to avoid a match
1655
             * of the string with itself at the start of the input file).
1769
             * of the string with itself at the start of the input file).
1656
             */
1770
             */
1657
            s->match_length = longest_match (s, hash_head);
1771
            s->match_length = longest_match (s, hash_head);
1658
            /* longest_match() sets match_start */
1772
            /* longest_match() sets match_start */
1659
 
1773
 
1660
            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
1774
            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
1661
#if TOO_FAR <= 32767
1775
#if TOO_FAR <= 32767
1662
                || (s->match_length == MIN_MATCH &&
1776
                || (s->match_length == MIN_MATCH &&
1663
                    s->strstart - s->match_start > TOO_FAR)
1777
                    s->strstart - s->match_start > TOO_FAR)
1664
#endif
1778
#endif
1665
                )) {
1779
                )) {
1666
 
1780
 
1667
                /* If prev_match is also MIN_MATCH, match_start is garbage
1781
                /* If prev_match is also MIN_MATCH, match_start is garbage
1668
                 * but we will ignore the current match anyway.
1782
                 * but we will ignore the current match anyway.
1669
                 */
1783
                 */
1670
                s->match_length = MIN_MATCH-1;
1784
                s->match_length = MIN_MATCH-1;
1671
            }
1785
            }
1672
        }
1786
        }
1673
        /* If there was a match at the previous step and the current
1787
        /* If there was a match at the previous step and the current
1674
         * match is not better, output the previous match:
1788
         * match is not better, output the previous match:
1675
         */
1789
         */
1676
        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
1790
        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
1677
            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
1791
            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
1678
            /* Do not insert strings in hash table beyond this. */
1792
            /* Do not insert strings in hash table beyond this. */
1679
 
1793
 
1680
            check_match(s, s->strstart-1, s->prev_match, s->prev_length);
1794
            check_match(s, s->strstart-1, s->prev_match, s->prev_length);
1681
 
1795
 
1682
            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
1796
            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
1683
                           s->prev_length - MIN_MATCH, bflush);
1797
                           s->prev_length - MIN_MATCH, bflush);
1684
 
1798
 
1685
            /* Insert in hash table all strings up to the end of the match.
1799
            /* Insert in hash table all strings up to the end of the match.
1686
             * strstart-1 and strstart are already inserted. If there is not
1800
             * strstart-1 and strstart are already inserted. If there is not
1687
             * enough lookahead, the last two strings are not inserted in
1801
             * enough lookahead, the last two strings are not inserted in
1688
             * the hash table.
1802
             * the hash table.
1689
             */
1803
             */
1690
            s->lookahead -= s->prev_length-1;
1804
            s->lookahead -= s->prev_length-1;
1691
            s->prev_length -= 2;
1805
            s->prev_length -= 2;
1692
            do {
1806
            do {
1693
                if (++s->strstart <= max_insert) {
1807
                if (++s->strstart <= max_insert) {
1694
                    INSERT_STRING(s, s->strstart, hash_head);
1808
                    INSERT_STRING(s, s->strstart, hash_head);
1695
                }
1809
                }
1696
            } while (--s->prev_length != 0);
1810
            } while (--s->prev_length != 0);
1697
            s->match_available = 0;
1811
            s->match_available = 0;
1698
            s->match_length = MIN_MATCH-1;
1812
            s->match_length = MIN_MATCH-1;
1699
            s->strstart++;
1813
            s->strstart++;
1700
 
1814
 
1701
            if (bflush) FLUSH_BLOCK(s, 0);
1815
            if (bflush) FLUSH_BLOCK(s, 0);
1702
 
1816
 
1703
        } else if (s->match_available) {
1817
        } else if (s->match_available) {
1704
            /* If there was no match at the previous position, output a
1818
            /* If there was no match at the previous position, output a
1705
             * single literal. If there was a match but the current match
1819
             * single literal. If there was a match but the current match
1706
             * is longer, truncate the previous match to a single literal.
1820
             * is longer, truncate the previous match to a single literal.
1707
             */
1821
             */
1708
            Tracevv((stderr,"%c", s->window[s->strstart-1]));
1822
            Tracevv((stderr,"%c", s->window[s->strstart-1]));
1709
            _tr_tally_lit(s, s->window[s->strstart-1], bflush);
1823
            _tr_tally_lit(s, s->window[s->strstart-1], bflush);
1710
            if (bflush) {
1824
            if (bflush) {
1711
                FLUSH_BLOCK_ONLY(s, 0);
1825
                FLUSH_BLOCK_ONLY(s, 0);
1712
            }
1826
            }
1713
            s->strstart++;
1827
            s->strstart++;
1714
            s->lookahead--;
1828
            s->lookahead--;
1715
            if (s->strm->avail_out == 0) return need_more;
1829
            if (s->strm->avail_out == 0) return need_more;
1716
        } else {
1830
        } else {
1717
            /* There is no previous match to compare with, wait for
1831
            /* There is no previous match to compare with, wait for
1718
             * the next step to decide.
1832
             * the next step to decide.
1719
             */
1833
             */
1720
            s->match_available = 1;
1834
            s->match_available = 1;
1721
            s->strstart++;
1835
            s->strstart++;
1722
            s->lookahead--;
1836
            s->lookahead--;
1723
        }
1837
        }
1724
    }
1838
    }
1725
    Assert (flush != Z_NO_FLUSH, "no flush?");
1839
    Assert (flush != Z_NO_FLUSH, "no flush?");
1726
    if (s->match_available) {
1840
    if (s->match_available) {
1727
        Tracevv((stderr,"%c", s->window[s->strstart-1]));
1841
        Tracevv((stderr,"%c", s->window[s->strstart-1]));
1728
        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
1842
        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
1729
        s->match_available = 0;
1843
        s->match_available = 0;
1730
    }
1844
    }
-
 
1845
    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
1731
    FLUSH_BLOCK(s, flush == Z_FINISH);
1846
    if (flush == Z_FINISH) {
-
 
1847
        FLUSH_BLOCK(s, 1);
1732
    return flush == Z_FINISH ? finish_done : block_done;
1848
        return finish_done;
-
 
1849
    }
-
 
1850
    if (s->last_lit)
-
 
1851
        FLUSH_BLOCK(s, 0);
-
 
1852
    return block_done;
1733
}
1853
}
1734
#endif /* FASTEST */
1854
#endif /* FASTEST */
1735
 
1855
 
1736
/* ===========================================================================
1856
/* ===========================================================================
1737
 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
1857
 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
1738
 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
1858
 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
1739
 * deflate switches away from Z_RLE.)
1859
 * deflate switches away from Z_RLE.)
1740
 */
1860
 */
1741
local block_state deflate_rle(s, flush)
1861
local block_state deflate_rle(s, flush)
1742
    deflate_state *s;
1862
    deflate_state *s;
1743
    int flush;
1863
    int flush;
1744
{
1864
{
1745
    int bflush;             /* set if current block must be flushed */
1865
    int bflush;             /* set if current block must be flushed */
1746
    uInt prev;              /* byte at distance one to match */
1866
    uInt prev;              /* byte at distance one to match */
1747
    Bytef *scan, *strend;   /* scan goes up to strend for length of run */
1867
    Bytef *scan, *strend;   /* scan goes up to strend for length of run */
1748
 
1868
 
1749
    for (;;) {
1869
    for (;;) {
1750
        /* Make sure that we always have enough lookahead, except
1870
        /* Make sure that we always have enough lookahead, except
1751
         * at the end of the input file. We need MAX_MATCH bytes
1871
         * at the end of the input file. We need MAX_MATCH bytes
1752
         * for the longest encodable run.
1872
         * for the longest run, plus one for the unrolled loop.
1753
         */
1873
         */
1754
        if (s->lookahead < MAX_MATCH) {
1874
        if (s->lookahead <= MAX_MATCH) {
1755
            fill_window(s);
1875
            fill_window(s);
1756
            if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) {
1876
            if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
1757
                return need_more;
1877
                return need_more;
1758
            }
1878
            }
1759
            if (s->lookahead == 0) break; /* flush the current block */
1879
            if (s->lookahead == 0) break; /* flush the current block */
1760
        }
1880
        }
1761
 
1881
 
1762
        /* See how many times the previous byte repeats */
1882
        /* See how many times the previous byte repeats */
1763
        s->match_length = 0;
1883
        s->match_length = 0;
1764
        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
1884
        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
1765
            scan = s->window + s->strstart - 1;
1885
            scan = s->window + s->strstart - 1;
1766
            prev = *scan;
1886
            prev = *scan;
1767
            if (prev == *++scan && prev == *++scan && prev == *++scan) {
1887
            if (prev == *++scan && prev == *++scan && prev == *++scan) {
1768
                strend = s->window + s->strstart + MAX_MATCH;
1888
                strend = s->window + s->strstart + MAX_MATCH;
1769
                do {
1889
                do {
1770
                } while (prev == *++scan && prev == *++scan &&
1890
                } while (prev == *++scan && prev == *++scan &&
1771
                         prev == *++scan && prev == *++scan &&
1891
                         prev == *++scan && prev == *++scan &&
1772
                         prev == *++scan && prev == *++scan &&
1892
                         prev == *++scan && prev == *++scan &&
1773
                         prev == *++scan && prev == *++scan &&
1893
                         prev == *++scan && prev == *++scan &&
1774
                         scan < strend);
1894
                         scan < strend);
1775
                s->match_length = MAX_MATCH - (int)(strend - scan);
1895
                s->match_length = MAX_MATCH - (int)(strend - scan);
1776
                if (s->match_length > s->lookahead)
1896
                if (s->match_length > s->lookahead)
1777
                    s->match_length = s->lookahead;
1897
                    s->match_length = s->lookahead;
1778
            }
1898
            }
-
 
1899
            Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
1779
        }
1900
        }
1780
 
1901
 
1781
        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
1902
        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
1782
        if (s->match_length >= MIN_MATCH) {
1903
        if (s->match_length >= MIN_MATCH) {
1783
            check_match(s, s->strstart, s->strstart - 1, s->match_length);
1904
            check_match(s, s->strstart, s->strstart - 1, s->match_length);
1784
 
1905
 
1785
            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
1906
            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
1786
 
1907
 
1787
            s->lookahead -= s->match_length;
1908
            s->lookahead -= s->match_length;
1788
            s->strstart += s->match_length;
1909
            s->strstart += s->match_length;
1789
            s->match_length = 0;
1910
            s->match_length = 0;
1790
        } else {
1911
        } else {
1791
            /* No match, output a literal byte */
1912
            /* No match, output a literal byte */
1792
            Tracevv((stderr,"%c", s->window[s->strstart]));
1913
            Tracevv((stderr,"%c", s->window[s->strstart]));
1793
            _tr_tally_lit (s, s->window[s->strstart], bflush);
1914
            _tr_tally_lit (s, s->window[s->strstart], bflush);
1794
            s->lookahead--;
1915
            s->lookahead--;
1795
            s->strstart++;
1916
            s->strstart++;
1796
        }
1917
        }
1797
        if (bflush) FLUSH_BLOCK(s, 0);
1918
        if (bflush) FLUSH_BLOCK(s, 0);
1798
    }
1919
    }
-
 
1920
    s->insert = 0;
1799
    FLUSH_BLOCK(s, flush == Z_FINISH);
1921
    if (flush == Z_FINISH) {
-
 
1922
        FLUSH_BLOCK(s, 1);
1800
    return flush == Z_FINISH ? finish_done : block_done;
1923
        return finish_done;
-
 
1924
    }
-
 
1925
    if (s->last_lit)
-
 
1926
        FLUSH_BLOCK(s, 0);
-
 
1927
    return block_done;
1801
}
1928
}
1802
 
1929
 
1803
/* ===========================================================================
1930
/* ===========================================================================
1804
 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
1931
 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
1805
 * (It will be regenerated if this run of deflate switches away from Huffman.)
1932
 * (It will be regenerated if this run of deflate switches away from Huffman.)
1806
 */
1933
 */
1807
local block_state deflate_huff(s, flush)
1934
local block_state deflate_huff(s, flush)
1808
    deflate_state *s;
1935
    deflate_state *s;
1809
    int flush;
1936
    int flush;
1810
{
1937
{
1811
    int bflush;             /* set if current block must be flushed */
1938
    int bflush;             /* set if current block must be flushed */
1812
 
1939
 
1813
    for (;;) {
1940
    for (;;) {
1814
        /* Make sure that we have a literal to write. */
1941
        /* Make sure that we have a literal to write. */
1815
        if (s->lookahead == 0) {
1942
        if (s->lookahead == 0) {
1816
            fill_window(s);
1943
            fill_window(s);
1817
            if (s->lookahead == 0) {
1944
            if (s->lookahead == 0) {
1818
                if (flush == Z_NO_FLUSH)
1945
                if (flush == Z_NO_FLUSH)
1819
                    return need_more;
1946
                    return need_more;
1820
                break;      /* flush the current block */
1947
                break;      /* flush the current block */
1821
            }
1948
            }
1822
        }
1949
        }
1823
 
1950
 
1824
        /* Output a literal byte */
1951
        /* Output a literal byte */
1825
        s->match_length = 0;
1952
        s->match_length = 0;
1826
        Tracevv((stderr,"%c", s->window[s->strstart]));
1953
        Tracevv((stderr,"%c", s->window[s->strstart]));
1827
        _tr_tally_lit (s, s->window[s->strstart], bflush);
1954
        _tr_tally_lit (s, s->window[s->strstart], bflush);
1828
        s->lookahead--;
1955
        s->lookahead--;
1829
        s->strstart++;
1956
        s->strstart++;
1830
        if (bflush) FLUSH_BLOCK(s, 0);
1957
        if (bflush) FLUSH_BLOCK(s, 0);
1831
    }
1958
    }
-
 
1959
    s->insert = 0;
1832
    FLUSH_BLOCK(s, flush == Z_FINISH);
1960
    if (flush == Z_FINISH) {
-
 
1961
        FLUSH_BLOCK(s, 1);
1833
    return flush == Z_FINISH ? finish_done : block_done;
1962
        return finish_done;
-
 
1963
    }
-
 
1964
    if (s->last_lit)
-
 
1965
        FLUSH_BLOCK(s, 0);
-
 
1966
    return block_done;
1834
}
1967
}