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,
163 #define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask) argument
174 #define INSERT_STRING(s, str, match_head) \ argument
175 (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
176 s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
177 s->head[s->ins_h] = (Pos)(str))
183 #define CLEAR_HASH(s) \ argument
184 s->head[s->hash_size-1] = NIL; \
185 memset((char *)s->head, 0, (unsigned)(s->hash_size-1)*sizeof(*s->head));
197 deflate_state *s; in zlib_deflateInit2() local
226 * Direct the workspace's pointers to the chunks that were allocated in zlib_deflateInit2()
247 s = (deflate_state *) &(mem->deflate_memory); in zlib_deflateInit2()
248 strm->state = (struct internal_state *)s; in zlib_deflateInit2()
249 s->strm = strm; in zlib_deflateInit2()
251 s->noheader = noheader; in zlib_deflateInit2()
252 s->w_bits = windowBits; in zlib_deflateInit2()
253 s->w_size = 1 << s->w_bits; in zlib_deflateInit2()
254 s->w_mask = s->w_size - 1; in zlib_deflateInit2()
256 s->hash_bits = memLevel + 7; in zlib_deflateInit2()
257 s->hash_size = 1 << s->hash_bits; in zlib_deflateInit2()
258 s->hash_mask = s->hash_size - 1; in zlib_deflateInit2()
259 s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); in zlib_deflateInit2()
261 s->window = (Byte *) mem->window_memory; in zlib_deflateInit2()
262 s->prev = (Pos *) mem->prev_memory; in zlib_deflateInit2()
263 s->head = (Pos *) mem->head_memory; in zlib_deflateInit2()
265 s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ in zlib_deflateInit2()
268 s->pending_buf = (uch *) overlay; in zlib_deflateInit2()
269 s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); in zlib_deflateInit2()
271 s->d_buf = overlay + s->lit_bufsize/sizeof(ush); in zlib_deflateInit2()
272 s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; in zlib_deflateInit2()
274 s->level = level; in zlib_deflateInit2()
275 s->strategy = strategy; in zlib_deflateInit2()
276 s->method = (Byte)method; in zlib_deflateInit2()
286 deflate_state *s; in zlib_deflateReset() local
295 s = (deflate_state *)strm->state; in zlib_deflateReset()
296 s->pending = 0; in zlib_deflateReset()
297 s->pending_out = s->pending_buf; in zlib_deflateReset()
299 if (s->noheader < 0) { in zlib_deflateReset()
300 s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ in zlib_deflateReset()
302 s->status = s->noheader ? BUSY_STATE : INIT_STATE; in zlib_deflateReset()
304 s->last_flush = Z_NO_FLUSH; in zlib_deflateReset()
306 zlib_tr_init(s); in zlib_deflateReset()
307 lm_init(s); in zlib_deflateReset()
320 deflate_state *s, in putShortMSB() argument
324 put_byte(s, (Byte)(b >> 8)); in putShortMSB()
325 put_byte(s, (Byte)(b & 0xff)); in putShortMSB()
335 deflate_state *s; in zlib_deflate() local
341 s = (deflate_state *) strm->state; in zlib_deflate()
344 (s->status == FINISH_STATE && flush != Z_FINISH)) { in zlib_deflate()
349 s->strm = strm; /* just in case */ in zlib_deflate()
350 old_flush = s->last_flush; in zlib_deflate()
351 s->last_flush = flush; in zlib_deflate()
354 if (s->status == INIT_STATE) { in zlib_deflate()
356 uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; in zlib_deflate()
357 uInt level_flags = (s->level-1) >> 1; in zlib_deflate()
361 if (s->strstart != 0) header |= PRESET_DICT; in zlib_deflate()
364 s->status = BUSY_STATE; in zlib_deflate()
365 putShortMSB(s, header); in zlib_deflate()
368 if (s->strstart != 0) { in zlib_deflate()
369 putShortMSB(s, (uInt)(strm->adler >> 16)); in zlib_deflate()
370 putShortMSB(s, (uInt)(strm->adler & 0xffff)); in zlib_deflate()
376 if (s->pending != 0) { in zlib_deflate()
385 s->last_flush = -1; in zlib_deflate()
399 if (s->status == FINISH_STATE && strm->avail_in != 0) { in zlib_deflate()
405 if (strm->avail_in != 0 || s->lookahead != 0 || in zlib_deflate()
406 (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { in zlib_deflate()
410 (*(configuration_table[s->level].func))(s, flush); in zlib_deflate()
413 s->status = FINISH_STATE; in zlib_deflate()
417 s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ in zlib_deflate()
430 zlib_tr_align(s); in zlib_deflate()
434 zlib_tr_stored_type_only(s); in zlib_deflate()
436 zlib_tr_stored_block(s, (char*)0, 0L, 0); in zlib_deflate()
441 CLEAR_HASH(s); /* forget history */ in zlib_deflate()
446 s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ in zlib_deflate()
454 if (s->noheader) return Z_STREAM_END; in zlib_deflate()
457 putShortMSB(s, (uInt)(strm->adler >> 16)); in zlib_deflate()
458 putShortMSB(s, (uInt)(strm->adler & 0xffff)); in zlib_deflate()
463 s->noheader = -1; /* write the trailer only once! */ in zlib_deflate()
464 return s->pending != 0 ? Z_OK : Z_STREAM_END; in zlib_deflate()
473 deflate_state *s; in zlib_deflateEnd() local
476 s = (deflate_state *) strm->state; in zlib_deflateEnd()
478 status = s->status; in zlib_deflateEnd()
524 deflate_state *s in lm_init() argument
527 s->window_size = (ulg)2L*s->w_size; in lm_init()
529 CLEAR_HASH(s); in lm_init()
533 s->max_lazy_match = configuration_table[s->level].max_lazy; in lm_init()
534 s->good_match = configuration_table[s->level].good_length; in lm_init()
535 s->nice_match = configuration_table[s->level].nice_length; in lm_init()
536 s->max_chain_length = configuration_table[s->level].max_chain; in lm_init()
538 s->strstart = 0; in lm_init()
539 s->block_start = 0L; in lm_init()
540 s->lookahead = 0; in lm_init()
541 s->match_length = s->prev_length = MIN_MATCH-1; in lm_init()
542 s->match_available = 0; in lm_init()
543 s->ins_h = 0; in lm_init()
553 * OUT assertion: the match length is not greater than s->lookahead.
556 * match.S. The code will be functionally equivalent.
559 deflate_state *s, in longest_match() argument
563 unsigned chain_length = s->max_chain_length;/* max hash chain length */ in longest_match()
564 register Byte *scan = s->window + s->strstart; /* current string */ in longest_match()
567 int best_len = s->prev_length; /* best match length so far */ in longest_match()
568 int nice_match = s->nice_match; /* stop if match long enough */ in longest_match()
569 IPos limit = s->strstart > (IPos)MAX_DIST(s) ? in longest_match()
570 s->strstart - (IPos)MAX_DIST(s) : NIL; in longest_match()
574 Pos *prev = s->prev; in longest_match()
575 uInt wmask = s->w_mask; in longest_match()
581 register Byte *strend = s->window + s->strstart + MAX_MATCH - 1; in longest_match()
585 register Byte *strend = s->window + s->strstart + MAX_MATCH; in longest_match()
593 Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); in longest_match()
596 if (s->prev_length >= s->good_match) { in longest_match()
602 if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; in longest_match()
604 Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); in longest_match()
607 Assert(cur_match < s->strstart, "no future"); in longest_match()
608 match = s->window + cur_match; in longest_match()
640 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); in longest_match()
672 Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); in longest_match()
680 s->match_start = cur_match; in longest_match()
693 if ((uInt)best_len <= s->lookahead) return best_len; in longest_match()
694 return s->lookahead; in longest_match()
702 deflate_state *s, in check_match() argument
709 if (memcmp((char *)s->window + match, in check_match()
710 (char *)s->window + start, length) != EQUAL) { in check_match()
714 fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); in check_match()
720 do { putc(s->window[start++], stderr); } while (--length != 0); in check_match()
724 # define check_match(s, start, match, length) argument
738 deflate_state *s in fill_window() argument
744 uInt wsize = s->w_size; in fill_window()
747 more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); in fill_window()
750 if (more == 0 && s->strstart == 0 && s->lookahead == 0) { in fill_window()
762 } else if (s->strstart >= wsize+MAX_DIST(s)) { in fill_window()
764 memcpy((char *)s->window, (char *)s->window+wsize, in fill_window()
766 s->match_start -= wsize; in fill_window()
767 s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ in fill_window()
768 s->block_start -= (long) wsize; in fill_window()
776 n = s->hash_size; in fill_window()
777 p = &s->head[n]; in fill_window()
784 p = &s->prev[n]; in fill_window()
794 if (s->strm->avail_in == 0) return; in fill_window()
803 * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. in fill_window()
809 n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); in fill_window()
810 s->lookahead += n; in fill_window()
813 if (s->lookahead >= MIN_MATCH) { in fill_window()
814 s->ins_h = s->window[s->strstart]; in fill_window()
815 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); in fill_window()
824 } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); in fill_window()
831 #define FLUSH_BLOCK_ONLY(s, eof) { \ argument
832 zlib_tr_flush_block(s, (s->block_start >= 0L ? \
833 (char *)&s->window[(unsigned)s->block_start] : \
835 (ulg)((long)s->strstart - s->block_start), \
837 s->block_start = s->strstart; \
838 flush_pending(s->strm); \
843 #define FLUSH_BLOCK(s, eof) { \ argument
844 FLUSH_BLOCK_ONLY(s, eof); \
845 if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
858 deflate_state *s, in deflate_stored() argument
868 if (max_block_size > s->pending_buf_size - 5) { in deflate_stored()
869 max_block_size = s->pending_buf_size - 5; in deflate_stored()
875 if (s->lookahead <= 1) { in deflate_stored()
877 Assert(s->strstart < s->w_size+MAX_DIST(s) || in deflate_stored()
878 s->block_start >= (long)s->w_size, "slide too late"); in deflate_stored()
880 fill_window(s); in deflate_stored()
881 if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; in deflate_stored()
883 if (s->lookahead == 0) break; /* flush the current block */ in deflate_stored()
885 Assert(s->block_start >= 0L, "block gone"); in deflate_stored()
887 s->strstart += s->lookahead; in deflate_stored()
888 s->lookahead = 0; in deflate_stored()
891 max_start = s->block_start + max_block_size; in deflate_stored()
892 if (s->strstart == 0 || (ulg)s->strstart >= max_start) { in deflate_stored()
894 s->lookahead = (uInt)(s->strstart - max_start); in deflate_stored()
895 s->strstart = (uInt)max_start; in deflate_stored()
896 FLUSH_BLOCK(s, 0); in deflate_stored()
901 if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { in deflate_stored()
902 FLUSH_BLOCK(s, 0); in deflate_stored()
905 FLUSH_BLOCK(s, flush == Z_FINISH); in deflate_stored()
917 deflate_state *s, in deflate_fast() argument
930 if (s->lookahead < MIN_LOOKAHEAD) { in deflate_fast()
931 fill_window(s); in deflate_fast()
932 if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { in deflate_fast()
935 if (s->lookahead == 0) break; /* flush the current block */ in deflate_fast()
941 if (s->lookahead >= MIN_MATCH) { in deflate_fast()
942 INSERT_STRING(s, s->strstart, hash_head); in deflate_fast()
948 if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { in deflate_fast()
953 if (s->strategy != Z_HUFFMAN_ONLY) { in deflate_fast()
954 s->match_length = longest_match (s, hash_head); in deflate_fast()
958 if (s->match_length >= MIN_MATCH) { in deflate_fast()
959 check_match(s, s->strstart, s->match_start, s->match_length); in deflate_fast()
961 bflush = zlib_tr_tally(s, s->strstart - s->match_start, in deflate_fast()
962 s->match_length - MIN_MATCH); in deflate_fast()
964 s->lookahead -= s->match_length; in deflate_fast()
969 if (s->match_length <= s->max_insert_length && in deflate_fast()
970 s->lookahead >= MIN_MATCH) { in deflate_fast()
971 s->match_length--; /* string at strstart already in hash table */ in deflate_fast()
973 s->strstart++; in deflate_fast()
974 INSERT_STRING(s, s->strstart, hash_head); in deflate_fast()
978 } while (--s->match_length != 0); in deflate_fast()
979 s->strstart++; in deflate_fast()
981 s->strstart += s->match_length; in deflate_fast()
982 s->match_length = 0; in deflate_fast()
983 s->ins_h = s->window[s->strstart]; in deflate_fast()
984 UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); in deflate_fast()
994 Tracevv((stderr,"%c", s->window[s->strstart])); in deflate_fast()
995 bflush = zlib_tr_tally (s, 0, s->window[s->strstart]); in deflate_fast()
996 s->lookahead--; in deflate_fast()
997 s->strstart++; in deflate_fast()
999 if (bflush) FLUSH_BLOCK(s, 0); in deflate_fast()
1001 FLUSH_BLOCK(s, flush == Z_FINISH); in deflate_fast()
1011 deflate_state *s, in deflate_slow() argument
1025 if (s->lookahead < MIN_LOOKAHEAD) { in deflate_slow()
1026 fill_window(s); in deflate_slow()
1027 if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { in deflate_slow()
1030 if (s->lookahead == 0) break; /* flush the current block */ in deflate_slow()
1036 if (s->lookahead >= MIN_MATCH) { in deflate_slow()
1037 INSERT_STRING(s, s->strstart, hash_head); in deflate_slow()
1042 s->prev_length = s->match_length, s->prev_match = s->match_start; in deflate_slow()
1043 s->match_length = MIN_MATCH-1; in deflate_slow()
1045 if (hash_head != NIL && s->prev_length < s->max_lazy_match && in deflate_slow()
1046 s->strstart - hash_head <= MAX_DIST(s)) { in deflate_slow()
1051 if (s->strategy != Z_HUFFMAN_ONLY) { in deflate_slow()
1052 s->match_length = longest_match (s, hash_head); in deflate_slow()
1056 if (s->match_length <= 5 && (s->strategy == Z_FILTERED || in deflate_slow()
1057 (s->match_length == MIN_MATCH && in deflate_slow()
1058 s->strstart - s->match_start > TOO_FAR))) { in deflate_slow()
1063 s->match_length = MIN_MATCH-1; in deflate_slow()
1069 if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { in deflate_slow()
1070 uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; in deflate_slow()
1073 check_match(s, s->strstart-1, s->prev_match, s->prev_length); in deflate_slow()
1075 bflush = zlib_tr_tally(s, s->strstart -1 - s->prev_match, in deflate_slow()
1076 s->prev_length - MIN_MATCH); in deflate_slow()
1083 s->lookahead -= s->prev_length-1; in deflate_slow()
1084 s->prev_length -= 2; in deflate_slow()
1086 if (++s->strstart <= max_insert) { in deflate_slow()
1087 INSERT_STRING(s, s->strstart, hash_head); in deflate_slow()
1089 } while (--s->prev_length != 0); in deflate_slow()
1090 s->match_available = 0; in deflate_slow()
1091 s->match_length = MIN_MATCH-1; in deflate_slow()
1092 s->strstart++; in deflate_slow()
1094 if (bflush) FLUSH_BLOCK(s, 0); in deflate_slow()
1096 } else if (s->match_available) { in deflate_slow()
1101 Tracevv((stderr,"%c", s->window[s->strstart-1])); in deflate_slow()
1102 if (zlib_tr_tally (s, 0, s->window[s->strstart-1])) { in deflate_slow()
1103 FLUSH_BLOCK_ONLY(s, 0); in deflate_slow()
1105 s->strstart++; in deflate_slow()
1106 s->lookahead--; in deflate_slow()
1107 if (s->strm->avail_out == 0) return need_more; in deflate_slow()
1112 s->match_available = 1; in deflate_slow()
1113 s->strstart++; in deflate_slow()
1114 s->lookahead--; in deflate_slow()
1118 if (s->match_available) { in deflate_slow()
1119 Tracevv((stderr,"%c", s->window[s->strstart-1])); in deflate_slow()
1120 zlib_tr_tally (s, 0, s->window[s->strstart-1]); in deflate_slow()
1121 s->match_available = 0; in deflate_slow()
1123 FLUSH_BLOCK(s, flush == Z_FINISH); in deflate_slow()