Lines Matching full:s

69 typedef block_state (*compress_func) (deflate_state *s, int flush);
72 static void fill_window (deflate_state *s);
73 static block_state deflate_stored (deflate_state *s, int flush);
74 static block_state deflate_fast (deflate_state *s, int flush);
75 static block_state deflate_slow (deflate_state *s, int flush);
76 static void lm_init (deflate_state *s);
77 static void putShortMSB (deflate_state *s, uInt b);
79 static uInt longest_match (deflate_state *s, IPos cur_match);
82 static void check_match (deflate_state *s, IPos start, IPos match,
160 #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask) argument
171 #define INSERT_STRING(s, str, match_head) \ argument
172 (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
173 s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
174 s->head[s->ins_h] = (Pos)(str))
180 #define CLEAR_HASH(s) \ argument
181 s->head[s->hash_size-1] = NIL; \
182 memset((char *)s->head, 0, (unsigned)(s->hash_size-1)*sizeof(*s->head));
194 deflate_state *s; in zlib_deflateInit2() local
223 * Direct the workspace's pointers to the chunks that were allocated in zlib_deflateInit2()
244 s = (deflate_state *) &(mem->deflate_memory); in zlib_deflateInit2()
245 strm->state = (struct internal_state *)s; in zlib_deflateInit2()
246 s->strm = strm; in zlib_deflateInit2()
248 s->noheader = noheader; in zlib_deflateInit2()
249 s->w_bits = windowBits; in zlib_deflateInit2()
250 s->w_size = 1 << s->w_bits; in zlib_deflateInit2()
251 s->w_mask = s->w_size - 1; in zlib_deflateInit2()
253 s->hash_bits = memLevel + 7; in zlib_deflateInit2()
254 s->hash_size = 1 << s->hash_bits; in zlib_deflateInit2()
255 s->hash_mask = s->hash_size - 1; in zlib_deflateInit2()
256 s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); in zlib_deflateInit2()
258 s->window = (Byte *) mem->window_memory; in zlib_deflateInit2()
259 s->prev = (Pos *) mem->prev_memory; in zlib_deflateInit2()
260 s->head = (Pos *) mem->head_memory; in zlib_deflateInit2()
262 s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ in zlib_deflateInit2()
265 s->pending_buf = (uch *) overlay; in zlib_deflateInit2()
266 s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); in zlib_deflateInit2()
268 s->d_buf = overlay + s->lit_bufsize/sizeof(ush); in zlib_deflateInit2()
269 s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; in zlib_deflateInit2()
271 s->level = level; in zlib_deflateInit2()
272 s->strategy = strategy; in zlib_deflateInit2()
273 s->method = (Byte)method; in zlib_deflateInit2()
283 deflate_state *s; in zlib_deflateReset() local
292 s = (deflate_state *)strm->state; in zlib_deflateReset()
293 s->pending = 0; in zlib_deflateReset()
294 s->pending_out = s->pending_buf; in zlib_deflateReset()
296 if (s->noheader < 0) { in zlib_deflateReset()
297 s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ in zlib_deflateReset()
299 s->status = s->noheader ? BUSY_STATE : INIT_STATE; in zlib_deflateReset()
301 s->last_flush = Z_NO_FLUSH; in zlib_deflateReset()
303 zlib_tr_init(s); in zlib_deflateReset()
304 lm_init(s); in zlib_deflateReset()
317 deflate_state *s, in putShortMSB() argument
321 put_byte(s, (Byte)(b >> 8)); in putShortMSB()
322 put_byte(s, (Byte)(b & 0xff)); in putShortMSB()
332 deflate_state *s; in zlib_deflate() local
338 s = (deflate_state *) strm->state; in zlib_deflate()
341 (s->status == FINISH_STATE && flush != Z_FINISH)) { in zlib_deflate()
346 s->strm = strm; /* just in case */ in zlib_deflate()
347 old_flush = s->last_flush; in zlib_deflate()
348 s->last_flush = flush; in zlib_deflate()
351 if (s->status == INIT_STATE) { in zlib_deflate()
353 uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; in zlib_deflate()
354 uInt level_flags = (s->level-1) >> 1; in zlib_deflate()
358 if (s->strstart != 0) header |= PRESET_DICT; in zlib_deflate()
361 s->status = BUSY_STATE; in zlib_deflate()
362 putShortMSB(s, header); in zlib_deflate()
365 if (s->strstart != 0) { in zlib_deflate()
366 putShortMSB(s, (uInt)(strm->adler >> 16)); in zlib_deflate()
367 putShortMSB(s, (uInt)(strm->adler & 0xffff)); in zlib_deflate()
373 if (s->pending != 0) { in zlib_deflate()
382 s->last_flush = -1; in zlib_deflate()
396 if (s->status == FINISH_STATE && strm->avail_in != 0) { in zlib_deflate()
402 if (strm->avail_in != 0 || s->lookahead != 0 || in zlib_deflate()
403 (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { in zlib_deflate()
407 (*(configuration_table[s->level].func))(s, flush); in zlib_deflate()
410 s->status = FINISH_STATE; in zlib_deflate()
414 s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ in zlib_deflate()
427 zlib_tr_align(s); in zlib_deflate()
431 zlib_tr_stored_type_only(s); in zlib_deflate()
433 zlib_tr_stored_block(s, (char*)0, 0L, 0); in zlib_deflate()
438 CLEAR_HASH(s); /* forget history */ in zlib_deflate()
443 s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ in zlib_deflate()
452 if (!s->noheader) { in zlib_deflate()
454 putShortMSB(s, (uInt)(strm->adler >> 16)); in zlib_deflate()
455 putShortMSB(s, (uInt)(strm->adler & 0xffff)); in zlib_deflate()
461 if (!s->noheader) { in zlib_deflate()
462 s->noheader = -1; /* write the trailer only once! */ in zlib_deflate()
464 if (s->pending == 0) { in zlib_deflate()
465 Assert(s->bi_valid == 0, "bi_buf not flushed"); in zlib_deflate()
477 deflate_state *s; in zlib_deflateEnd() local
480 s = (deflate_state *) strm->state; in zlib_deflateEnd()
482 status = s->status; in zlib_deflateEnd()
528 deflate_state *s in lm_init() argument
531 s->window_size = (ulg)2L*s->w_size; in lm_init()
533 CLEAR_HASH(s); in lm_init()
537 s->max_lazy_match = configuration_table[s->level].max_lazy; in lm_init()
538 s->good_match = configuration_table[s->level].good_length; in lm_init()
539 s->nice_match = configuration_table[s->level].nice_length; in lm_init()
540 s->max_chain_length = configuration_table[s->level].max_chain; in lm_init()
542 s->strstart = 0; in lm_init()
543 s->block_start = 0L; in lm_init()
544 s->lookahead = 0; in lm_init()
545 s->match_length = s->prev_length = MIN_MATCH-1; in lm_init()
546 s->match_available = 0; in lm_init()
547 s->ins_h = 0; in lm_init()
557 * OUT assertion: the match length is not greater than s->lookahead.
560 * match.S. The code will be functionally equivalent.
563 deflate_state *s, in longest_match() argument
567 unsigned chain_length = s->max_chain_length;/* max hash chain length */ in longest_match()
568 register Byte *scan = s->window + s->strstart; /* current string */ in longest_match()
571 int best_len = s->prev_length; /* best match length so far */ in longest_match()
572 int nice_match = s->nice_match; /* stop if match long enough */ in longest_match()
573 IPos limit = s->strstart > (IPos)MAX_DIST(s) ? in longest_match()
574 s->strstart - (IPos)MAX_DIST(s) : NIL; in longest_match()
578 Pos *prev = s->prev; in longest_match()
579 uInt wmask = s->w_mask; in longest_match()
585 register Byte *strend = s->window + s->strstart + MAX_MATCH - 1; in longest_match()
589 register Byte *strend = s->window + s->strstart + MAX_MATCH; in longest_match()
597 Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); in longest_match()
600 if (s->prev_length >= s->good_match) { in longest_match()
606 if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; in longest_match()
608 Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); in longest_match()
611 Assert(cur_match < s->strstart, "no future"); in longest_match()
612 match = s->window + cur_match; in longest_match()
644 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); in longest_match()
676 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); in longest_match()
684 s->match_start = cur_match; in longest_match()
697 if ((uInt)best_len <= s->lookahead) return best_len; in longest_match()
698 return s->lookahead; in longest_match()
706 deflate_state *s, in check_match() argument
713 if (memcmp((char *)s->window + match, (char *)s->window + start, length)) { in check_match()
717 fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); in check_match()
723 do { putc(s->window[start++], stderr); } while (--length != 0); in check_match()
727 # define check_match(s, start, match, length) argument
741 deflate_state *s in fill_window() argument
747 uInt wsize = s->w_size; in fill_window()
750 more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); in fill_window()
753 if (more == 0 && s->strstart == 0 && s->lookahead == 0) { in fill_window()
765 } else if (s->strstart >= wsize+MAX_DIST(s)) { in fill_window()
767 memcpy((char *)s->window, (char *)s->window+wsize, in fill_window()
769 s->match_start -= wsize; in fill_window()
770 s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ in fill_window()
771 s->block_start -= (long) wsize; in fill_window()
779 n = s->hash_size; in fill_window()
780 p = &s->head[n]; in fill_window()
787 p = &s->prev[n]; in fill_window()
797 if (s->strm->avail_in == 0) return; in fill_window()
806 * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. in fill_window()
812 n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); in fill_window()
813 s->lookahead += n; in fill_window()
816 if (s->lookahead >= MIN_MATCH) { in fill_window()
817 s->ins_h = s->window[s->strstart]; in fill_window()
818 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); in fill_window()
827 } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); in fill_window()
834 #define FLUSH_BLOCK_ONLY(s, eof) { \ argument
835 zlib_tr_flush_block(s, (s->block_start >= 0L ? \
836 (char *)&s->window[(unsigned)s->block_start] : \
838 (ulg)((long)s->strstart - s->block_start), \
840 s->block_start = s->strstart; \
841 flush_pending(s->strm); \
846 #define FLUSH_BLOCK(s, eof) { \ argument
847 FLUSH_BLOCK_ONLY(s, eof); \
848 if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
861 deflate_state *s, in deflate_stored() argument
871 if (max_block_size > s->pending_buf_size - 5) { in deflate_stored()
872 max_block_size = s->pending_buf_size - 5; in deflate_stored()
878 if (s->lookahead <= 1) { in deflate_stored()
880 Assert(s->strstart < s->w_size+MAX_DIST(s) || in deflate_stored()
881 s->block_start >= (long)s->w_size, "slide too late"); in deflate_stored()
883 fill_window(s); in deflate_stored()
884 if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; in deflate_stored()
886 if (s->lookahead == 0) break; /* flush the current block */ in deflate_stored()
888 Assert(s->block_start >= 0L, "block gone"); in deflate_stored()
890 s->strstart += s->lookahead; in deflate_stored()
891 s->lookahead = 0; in deflate_stored()
894 max_start = s->block_start + max_block_size; in deflate_stored()
895 if (s->strstart == 0 || (ulg)s->strstart >= max_start) { in deflate_stored()
897 s->lookahead = (uInt)(s->strstart - max_start); in deflate_stored()
898 s->strstart = (uInt)max_start; in deflate_stored()
899 FLUSH_BLOCK(s, 0); in deflate_stored()
904 if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { in deflate_stored()
905 FLUSH_BLOCK(s, 0); in deflate_stored()
908 FLUSH_BLOCK(s, flush == Z_FINISH); in deflate_stored()
920 deflate_state *s, in deflate_fast() argument
933 if (s->lookahead < MIN_LOOKAHEAD) { in deflate_fast()
934 fill_window(s); in deflate_fast()
935 if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { in deflate_fast()
938 if (s->lookahead == 0) break; /* flush the current block */ in deflate_fast()
944 if (s->lookahead >= MIN_MATCH) { in deflate_fast()
945 INSERT_STRING(s, s->strstart, hash_head); in deflate_fast()
951 if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { in deflate_fast()
956 if (s->strategy != Z_HUFFMAN_ONLY) { in deflate_fast()
957 s->match_length = longest_match (s, hash_head); in deflate_fast()
961 if (s->match_length >= MIN_MATCH) { in deflate_fast()
962 check_match(s, s->strstart, s->match_start, s->match_length); in deflate_fast()
964 bflush = zlib_tr_tally(s, s->strstart - s->match_start, in deflate_fast()
965 s->match_length - MIN_MATCH); in deflate_fast()
967 s->lookahead -= s->match_length; in deflate_fast()
972 if (s->match_length <= s->max_insert_length && in deflate_fast()
973 s->lookahead >= MIN_MATCH) { in deflate_fast()
974 s->match_length--; /* string at strstart already in hash table */ in deflate_fast()
976 s->strstart++; in deflate_fast()
977 INSERT_STRING(s, s->strstart, hash_head); in deflate_fast()
981 } while (--s->match_length != 0); in deflate_fast()
982 s->strstart++; in deflate_fast()
984 s->strstart += s->match_length; in deflate_fast()
985 s->match_length = 0; in deflate_fast()
986 s->ins_h = s->window[s->strstart]; in deflate_fast()
987 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); in deflate_fast()
997 Tracevv((stderr,"%c", s->window[s->strstart])); in deflate_fast()
998 bflush = zlib_tr_tally (s, 0, s->window[s->strstart]); in deflate_fast()
999 s->lookahead--; in deflate_fast()
1000 s->strstart++; in deflate_fast()
1002 if (bflush) FLUSH_BLOCK(s, 0); in deflate_fast()
1004 FLUSH_BLOCK(s, flush == Z_FINISH); in deflate_fast()
1014 deflate_state *s, in deflate_slow() argument
1028 if (s->lookahead < MIN_LOOKAHEAD) { in deflate_slow()
1029 fill_window(s); in deflate_slow()
1030 if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { in deflate_slow()
1033 if (s->lookahead == 0) break; /* flush the current block */ in deflate_slow()
1039 if (s->lookahead >= MIN_MATCH) { in deflate_slow()
1040 INSERT_STRING(s, s->strstart, hash_head); in deflate_slow()
1045 s->prev_length = s->match_length, s->prev_match = s->match_start; in deflate_slow()
1046 s->match_length = MIN_MATCH-1; in deflate_slow()
1048 if (hash_head != NIL && s->prev_length < s->max_lazy_match && in deflate_slow()
1049 s->strstart - hash_head <= MAX_DIST(s)) { in deflate_slow()
1054 if (s->strategy != Z_HUFFMAN_ONLY) { in deflate_slow()
1055 s->match_length = longest_match (s, hash_head); in deflate_slow()
1059 if (s->match_length <= 5 && (s->strategy == Z_FILTERED || in deflate_slow()
1060 (s->match_length == MIN_MATCH && in deflate_slow()
1061 s->strstart - s->match_start > TOO_FAR))) { in deflate_slow()
1066 s->match_length = MIN_MATCH-1; in deflate_slow()
1072 if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { in deflate_slow()
1073 uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; in deflate_slow()
1076 check_match(s, s->strstart-1, s->prev_match, s->prev_length); in deflate_slow()
1078 bflush = zlib_tr_tally(s, s->strstart -1 - s->prev_match, in deflate_slow()
1079 s->prev_length - MIN_MATCH); in deflate_slow()
1086 s->lookahead -= s->prev_length-1; in deflate_slow()
1087 s->prev_length -= 2; in deflate_slow()
1089 if (++s->strstart <= max_insert) { in deflate_slow()
1090 INSERT_STRING(s, s->strstart, hash_head); in deflate_slow()
1092 } while (--s->prev_length != 0); in deflate_slow()
1093 s->match_available = 0; in deflate_slow()
1094 s->match_length = MIN_MATCH-1; in deflate_slow()
1095 s->strstart++; in deflate_slow()
1097 if (bflush) FLUSH_BLOCK(s, 0); in deflate_slow()
1099 } else if (s->match_available) { in deflate_slow()
1104 Tracevv((stderr,"%c", s->window[s->strstart-1])); in deflate_slow()
1105 if (zlib_tr_tally (s, 0, s->window[s->strstart-1])) { in deflate_slow()
1106 FLUSH_BLOCK_ONLY(s, 0); in deflate_slow()
1108 s->strstart++; in deflate_slow()
1109 s->lookahead--; in deflate_slow()
1110 if (s->strm->avail_out == 0) return need_more; in deflate_slow()
1115 s->match_available = 1; in deflate_slow()
1116 s->strstart++; in deflate_slow()
1117 s->lookahead--; in deflate_slow()
1121 if (s->match_available) { in deflate_slow()
1122 Tracevv((stderr,"%c", s->window[s->strstart-1])); in deflate_slow()
1123 zlib_tr_tally (s, 0, s->window[s->strstart-1]); in deflate_slow()
1124 s->match_available = 0; in deflate_slow()
1126 FLUSH_BLOCK(s, flush == Z_FINISH); in deflate_slow()