1d4afb5ceSopenharmony_ci/* deflate.h -- internal compression state 2d4afb5ceSopenharmony_ci * Copyright (C) 1995-2010 Jean-loup Gailly 3d4afb5ceSopenharmony_ci * For conditions of distribution and use, see copyright notice in zlib.h 4d4afb5ceSopenharmony_ci */ 5d4afb5ceSopenharmony_ci 6d4afb5ceSopenharmony_ci/* WARNING: this file should *not* be used by applications. It is 7d4afb5ceSopenharmony_ci part of the implementation of the compression library and is 8d4afb5ceSopenharmony_ci subject to change. Applications should only use zlib.h. 9d4afb5ceSopenharmony_ci */ 10d4afb5ceSopenharmony_ci 11d4afb5ceSopenharmony_ci/* \param (#) $Id$ */ 12d4afb5ceSopenharmony_ci 13d4afb5ceSopenharmony_ci#ifndef DEFLATE_H 14d4afb5ceSopenharmony_ci#define DEFLATE_H 15d4afb5ceSopenharmony_ci 16d4afb5ceSopenharmony_ci#include "zutil.h" 17d4afb5ceSopenharmony_ci 18d4afb5ceSopenharmony_ci/* define NO_GZIP when compiling if you want to disable gzip header and 19d4afb5ceSopenharmony_ci trailer creation by deflate(). NO_GZIP would be used to avoid linking in 20d4afb5ceSopenharmony_ci the crc code when it is not needed. For shared libraries, gzip encoding 21d4afb5ceSopenharmony_ci should be left enabled. */ 22d4afb5ceSopenharmony_ci#ifndef NO_GZIP 23d4afb5ceSopenharmony_ci# define GZIP 24d4afb5ceSopenharmony_ci#endif 25d4afb5ceSopenharmony_ci 26d4afb5ceSopenharmony_ci/* =========================================================================== 27d4afb5ceSopenharmony_ci * Internal compression state. 28d4afb5ceSopenharmony_ci */ 29d4afb5ceSopenharmony_ci 30d4afb5ceSopenharmony_ci#define LENGTH_CODES 29 31d4afb5ceSopenharmony_ci/* number of length codes, not counting the special END_BLOCK code */ 32d4afb5ceSopenharmony_ci 33d4afb5ceSopenharmony_ci#define LITERALS 256 34d4afb5ceSopenharmony_ci/* number of literal bytes 0..255 */ 35d4afb5ceSopenharmony_ci 36d4afb5ceSopenharmony_ci#define L_CODES (LITERALS+1+LENGTH_CODES) 37d4afb5ceSopenharmony_ci/* number of Literal or Length codes, including the END_BLOCK code */ 38d4afb5ceSopenharmony_ci 39d4afb5ceSopenharmony_ci#define D_CODES 30 40d4afb5ceSopenharmony_ci/* number of distance codes */ 41d4afb5ceSopenharmony_ci 42d4afb5ceSopenharmony_ci#define BL_CODES 19 43d4afb5ceSopenharmony_ci/* number of codes used to transfer the bit lengths */ 44d4afb5ceSopenharmony_ci 45d4afb5ceSopenharmony_ci#define HEAP_SIZE (2*L_CODES+1) 46d4afb5ceSopenharmony_ci/* maximum heap size */ 47d4afb5ceSopenharmony_ci 48d4afb5ceSopenharmony_ci#define MAX_BITS 15 49d4afb5ceSopenharmony_ci/* All codes must not exceed MAX_BITS bits */ 50d4afb5ceSopenharmony_ci 51d4afb5ceSopenharmony_ci#define INIT_STATE 42 52d4afb5ceSopenharmony_ci#define EXTRA_STATE 69 53d4afb5ceSopenharmony_ci#define NAME_STATE 73 54d4afb5ceSopenharmony_ci#define COMMENT_STATE 91 55d4afb5ceSopenharmony_ci#define HCRC_STATE 103 56d4afb5ceSopenharmony_ci#define BUSY_STATE 113 57d4afb5ceSopenharmony_ci#define FINISH_STATE 666 58d4afb5ceSopenharmony_ci/* Stream status */ 59d4afb5ceSopenharmony_ci 60d4afb5ceSopenharmony_ci 61d4afb5ceSopenharmony_ci/* Data structure describing a single value and its code string. */ 62d4afb5ceSopenharmony_citypedef struct ct_data_s { 63d4afb5ceSopenharmony_ci union { 64d4afb5ceSopenharmony_ci ush freq; /* frequency count */ 65d4afb5ceSopenharmony_ci ush code; /* bit string */ 66d4afb5ceSopenharmony_ci } fc; 67d4afb5ceSopenharmony_ci union { 68d4afb5ceSopenharmony_ci ush dad; /* father node in Huffman tree */ 69d4afb5ceSopenharmony_ci ush len; /* length of bit string */ 70d4afb5ceSopenharmony_ci } dl; 71d4afb5ceSopenharmony_ci} FAR ct_data; 72d4afb5ceSopenharmony_ci 73d4afb5ceSopenharmony_ci#define Freq fc.freq 74d4afb5ceSopenharmony_ci#define Code fc.code 75d4afb5ceSopenharmony_ci#define Dad dl.dad 76d4afb5ceSopenharmony_ci#define Len dl.len 77d4afb5ceSopenharmony_ci 78d4afb5ceSopenharmony_citypedef struct static_tree_desc_s static_tree_desc; 79d4afb5ceSopenharmony_ci 80d4afb5ceSopenharmony_citypedef struct tree_desc_s { 81d4afb5ceSopenharmony_ci ct_data *dyn_tree; /* the dynamic tree */ 82d4afb5ceSopenharmony_ci int max_code; /* largest code with non zero frequency */ 83d4afb5ceSopenharmony_ci static_tree_desc *stat_desc; /* the corresponding static tree */ 84d4afb5ceSopenharmony_ci} FAR tree_desc; 85d4afb5ceSopenharmony_ci 86d4afb5ceSopenharmony_citypedef ush Pos; 87d4afb5ceSopenharmony_citypedef Pos FAR Posf; 88d4afb5ceSopenharmony_citypedef unsigned IPos; 89d4afb5ceSopenharmony_ci 90d4afb5ceSopenharmony_ci/* A Pos is an index in the character window. We use short instead of int to 91d4afb5ceSopenharmony_ci * save space in the various tables. IPos is used only for parameter passing. 92d4afb5ceSopenharmony_ci */ 93d4afb5ceSopenharmony_ci 94d4afb5ceSopenharmony_citypedef struct internal_state { 95d4afb5ceSopenharmony_ci z_streamp strm; /* pointer back to this zlib stream */ 96d4afb5ceSopenharmony_ci int status; /* as the name implies */ 97d4afb5ceSopenharmony_ci Bytef *pending_buf; /* output still pending */ 98d4afb5ceSopenharmony_ci ulg pending_buf_size; /* size of pending_buf */ 99d4afb5ceSopenharmony_ci Bytef *pending_out; /* next pending byte to output to the stream */ 100d4afb5ceSopenharmony_ci uInt pending; /* nb of bytes in the pending buffer */ 101d4afb5ceSopenharmony_ci int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ 102d4afb5ceSopenharmony_ci gz_headerp gzhead; /* gzip header information to write */ 103d4afb5ceSopenharmony_ci uInt gzindex; /* where in extra, name, or comment */ 104d4afb5ceSopenharmony_ci Byte method; /* STORED (for zip only) or DEFLATED */ 105d4afb5ceSopenharmony_ci int last_flush; /* value of flush param for previous deflate call */ 106d4afb5ceSopenharmony_ci 107d4afb5ceSopenharmony_ci /* used by deflate.c: */ 108d4afb5ceSopenharmony_ci 109d4afb5ceSopenharmony_ci uInt w_size; /* LZ77 window size (32K by default) */ 110d4afb5ceSopenharmony_ci uInt w_bits; /* log2(w_size) (8..16) */ 111d4afb5ceSopenharmony_ci uInt w_mask; /* w_size - 1 */ 112d4afb5ceSopenharmony_ci 113d4afb5ceSopenharmony_ci Bytef *window; 114d4afb5ceSopenharmony_ci /* Sliding window. Input bytes are read into the second half of the window, 115d4afb5ceSopenharmony_ci * and move to the first half later to keep a dictionary of at least wSize 116d4afb5ceSopenharmony_ci * bytes. With this organization, matches are limited to a distance of 117d4afb5ceSopenharmony_ci * wSize-MAX_MATCH bytes, but this ensures that IO is always 118d4afb5ceSopenharmony_ci * performed with a length multiple of the block size. Also, it limits 119d4afb5ceSopenharmony_ci * the window size to 64K, which is quite useful on MSDOS. 120d4afb5ceSopenharmony_ci * To do: use the user input buffer as sliding window. 121d4afb5ceSopenharmony_ci */ 122d4afb5ceSopenharmony_ci 123d4afb5ceSopenharmony_ci ulg window_size; 124d4afb5ceSopenharmony_ci /* Actual size of window: 2*wSize, except when the user input buffer 125d4afb5ceSopenharmony_ci * is directly used as sliding window. 126d4afb5ceSopenharmony_ci */ 127d4afb5ceSopenharmony_ci 128d4afb5ceSopenharmony_ci Posf *prev; 129d4afb5ceSopenharmony_ci /* Link to older string with same hash index. To limit the size of this 130d4afb5ceSopenharmony_ci * array to 64K, this link is maintained only for the last 32K strings. 131d4afb5ceSopenharmony_ci * An index in this array is thus a window index modulo 32K. 132d4afb5ceSopenharmony_ci */ 133d4afb5ceSopenharmony_ci 134d4afb5ceSopenharmony_ci Posf *head; /* Heads of the hash chains or NIL. */ 135d4afb5ceSopenharmony_ci 136d4afb5ceSopenharmony_ci uInt ins_h; /* hash index of string to be inserted */ 137d4afb5ceSopenharmony_ci uInt hash_size; /* number of elements in hash table */ 138d4afb5ceSopenharmony_ci uInt hash_bits; /* log2(hash_size) */ 139d4afb5ceSopenharmony_ci uInt hash_mask; /* hash_size-1 */ 140d4afb5ceSopenharmony_ci 141d4afb5ceSopenharmony_ci uInt hash_shift; 142d4afb5ceSopenharmony_ci /* Number of bits by which ins_h must be shifted at each input 143d4afb5ceSopenharmony_ci * step. It must be such that after MIN_MATCH steps, the oldest 144d4afb5ceSopenharmony_ci * byte no longer takes part in the hash key, that is: 145d4afb5ceSopenharmony_ci * hash_shift * MIN_MATCH >= hash_bits 146d4afb5ceSopenharmony_ci */ 147d4afb5ceSopenharmony_ci 148d4afb5ceSopenharmony_ci long block_start; 149d4afb5ceSopenharmony_ci /* Window position at the beginning of the current output block. Gets 150d4afb5ceSopenharmony_ci * negative when the window is moved backwards. 151d4afb5ceSopenharmony_ci */ 152d4afb5ceSopenharmony_ci 153d4afb5ceSopenharmony_ci uInt match_length; /* length of best match */ 154d4afb5ceSopenharmony_ci IPos prev_match; /* previous match */ 155d4afb5ceSopenharmony_ci int match_available; /* set if previous match exists */ 156d4afb5ceSopenharmony_ci uInt strstart; /* start of string to insert */ 157d4afb5ceSopenharmony_ci uInt match_start; /* start of matching string */ 158d4afb5ceSopenharmony_ci uInt lookahead; /* number of valid bytes ahead in window */ 159d4afb5ceSopenharmony_ci 160d4afb5ceSopenharmony_ci uInt prev_length; 161d4afb5ceSopenharmony_ci /* Length of the best match at previous step. Matches not greater than this 162d4afb5ceSopenharmony_ci * are discarded. This is used in the lazy match evaluation. 163d4afb5ceSopenharmony_ci */ 164d4afb5ceSopenharmony_ci 165d4afb5ceSopenharmony_ci uInt max_chain_length; 166d4afb5ceSopenharmony_ci /* To speed up deflation, hash chains are never searched beyond this 167d4afb5ceSopenharmony_ci * length. A higher limit improves compression ratio but degrades the 168d4afb5ceSopenharmony_ci * speed. 169d4afb5ceSopenharmony_ci */ 170d4afb5ceSopenharmony_ci 171d4afb5ceSopenharmony_ci uInt max_lazy_match; 172d4afb5ceSopenharmony_ci /* Attempt to find a better match only when the current match is strictly 173d4afb5ceSopenharmony_ci * smaller than this value. This mechanism is used only for compression 174d4afb5ceSopenharmony_ci * levels >= 4. 175d4afb5ceSopenharmony_ci */ 176d4afb5ceSopenharmony_ci# define max_insert_length max_lazy_match 177d4afb5ceSopenharmony_ci /* Insert new strings in the hash table only if the match length is not 178d4afb5ceSopenharmony_ci * greater than this length. This saves time but degrades compression. 179d4afb5ceSopenharmony_ci * max_insert_length is used only for compression levels <= 3. 180d4afb5ceSopenharmony_ci */ 181d4afb5ceSopenharmony_ci 182d4afb5ceSopenharmony_ci int level; /* compression level (1..9) */ 183d4afb5ceSopenharmony_ci int strategy; /* favor or force Huffman coding*/ 184d4afb5ceSopenharmony_ci 185d4afb5ceSopenharmony_ci uInt good_match; 186d4afb5ceSopenharmony_ci /* Use a faster search when the previous match is longer than this */ 187d4afb5ceSopenharmony_ci 188d4afb5ceSopenharmony_ci int nice_match; /* Stop searching when current match exceeds this */ 189d4afb5ceSopenharmony_ci 190d4afb5ceSopenharmony_ci /* used by trees.c: */ 191d4afb5ceSopenharmony_ci /* Didn't use ct_data typedef below to supress compiler warning */ 192d4afb5ceSopenharmony_ci struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ 193d4afb5ceSopenharmony_ci struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ 194d4afb5ceSopenharmony_ci struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ 195d4afb5ceSopenharmony_ci 196d4afb5ceSopenharmony_ci struct tree_desc_s l_desc; /* desc. for literal tree */ 197d4afb5ceSopenharmony_ci struct tree_desc_s d_desc; /* desc. for distance tree */ 198d4afb5ceSopenharmony_ci struct tree_desc_s bl_desc; /* desc. for bit length tree */ 199d4afb5ceSopenharmony_ci 200d4afb5ceSopenharmony_ci ush bl_count[MAX_BITS+1]; 201d4afb5ceSopenharmony_ci /* number of codes at each bit length for an optimal tree */ 202d4afb5ceSopenharmony_ci 203d4afb5ceSopenharmony_ci int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ 204d4afb5ceSopenharmony_ci int heap_len; /* number of elements in the heap */ 205d4afb5ceSopenharmony_ci int heap_max; /* element of largest frequency */ 206d4afb5ceSopenharmony_ci /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. 207d4afb5ceSopenharmony_ci * The same heap array is used to build all trees. 208d4afb5ceSopenharmony_ci */ 209d4afb5ceSopenharmony_ci 210d4afb5ceSopenharmony_ci uch depth[2*L_CODES+1]; 211d4afb5ceSopenharmony_ci /* Depth of each subtree used as tie breaker for trees of equal frequency 212d4afb5ceSopenharmony_ci */ 213d4afb5ceSopenharmony_ci 214d4afb5ceSopenharmony_ci uchf *sym_buf; /* buffer for distances and literals/lengths */ 215d4afb5ceSopenharmony_ci 216d4afb5ceSopenharmony_ci uInt lit_bufsize; 217d4afb5ceSopenharmony_ci /* Size of match buffer for literals/lengths. There are 4 reasons for 218d4afb5ceSopenharmony_ci * limiting lit_bufsize to 64K: 219d4afb5ceSopenharmony_ci * - frequencies can be kept in 16 bit counters 220d4afb5ceSopenharmony_ci * - if compression is not successful for the first block, all input 221d4afb5ceSopenharmony_ci * data is still in the window so we can still emit a stored block even 222d4afb5ceSopenharmony_ci * when input comes from standard input. (This can also be done for 223d4afb5ceSopenharmony_ci * all blocks if lit_bufsize is not greater than 32K.) 224d4afb5ceSopenharmony_ci * - if compression is not successful for a file smaller than 64K, we can 225d4afb5ceSopenharmony_ci * even emit a stored file instead of a stored block (saving 5 bytes). 226d4afb5ceSopenharmony_ci * This is applicable only for zip (not gzip or zlib). 227d4afb5ceSopenharmony_ci * - creating new Huffman trees less frequently may not provide fast 228d4afb5ceSopenharmony_ci * adaptation to changes in the input data statistics. (Take for 229d4afb5ceSopenharmony_ci * example a binary file with poorly compressible code followed by 230d4afb5ceSopenharmony_ci * a highly compressible string table.) Smaller buffer sizes give 231d4afb5ceSopenharmony_ci * fast adaptation but have of course the overhead of transmitting 232d4afb5ceSopenharmony_ci * trees more frequently. 233d4afb5ceSopenharmony_ci * - I can't count above 4 234d4afb5ceSopenharmony_ci */ 235d4afb5ceSopenharmony_ci 236d4afb5ceSopenharmony_ci uInt sym_next; /* running index in sym_buf */ 237d4afb5ceSopenharmony_ci uInt sym_end; /* symbol table full when sym_next reaches this */ 238d4afb5ceSopenharmony_ci 239d4afb5ceSopenharmony_ci ulg opt_len; /* bit length of current block with optimal trees */ 240d4afb5ceSopenharmony_ci ulg static_len; /* bit length of current block with static trees */ 241d4afb5ceSopenharmony_ci uInt matches; /* number of string matches in current block */ 242d4afb5ceSopenharmony_ci int last_eob_len; /* bit length of EOB code for last block */ 243d4afb5ceSopenharmony_ci 244d4afb5ceSopenharmony_ci#ifdef DEBUG 245d4afb5ceSopenharmony_ci ulg compressed_len; /* total bit length of compressed file mod 2^32 */ 246d4afb5ceSopenharmony_ci ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ 247d4afb5ceSopenharmony_ci#endif 248d4afb5ceSopenharmony_ci 249d4afb5ceSopenharmony_ci ush bi_buf; 250d4afb5ceSopenharmony_ci /* Output buffer. bits are inserted starting at the bottom (least 251d4afb5ceSopenharmony_ci * significant bits). 252d4afb5ceSopenharmony_ci */ 253d4afb5ceSopenharmony_ci int bi_valid; 254d4afb5ceSopenharmony_ci /* Number of valid bits in bi_buf. All bits above the last valid bit 255d4afb5ceSopenharmony_ci * are always zero. 256d4afb5ceSopenharmony_ci */ 257d4afb5ceSopenharmony_ci 258d4afb5ceSopenharmony_ci ulg high_water; 259d4afb5ceSopenharmony_ci /* High water mark offset in window for initialized bytes -- bytes above 260d4afb5ceSopenharmony_ci * this are set to zero in order to avoid memory check warnings when 261d4afb5ceSopenharmony_ci * longest match routines access bytes past the input. This is then 262d4afb5ceSopenharmony_ci * updated to the new high water mark. 263d4afb5ceSopenharmony_ci */ 264d4afb5ceSopenharmony_ci 265d4afb5ceSopenharmony_ci} FAR deflate_state; 266d4afb5ceSopenharmony_ci 267d4afb5ceSopenharmony_ci/* Output a byte on the stream. 268d4afb5ceSopenharmony_ci * IN assertion: there is enough room in pending_buf. 269d4afb5ceSopenharmony_ci */ 270d4afb5ceSopenharmony_ci#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} 271d4afb5ceSopenharmony_ci 272d4afb5ceSopenharmony_ci 273d4afb5ceSopenharmony_ci#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) 274d4afb5ceSopenharmony_ci/* Minimum amount of lookahead, except at the end of the input file. 275d4afb5ceSopenharmony_ci * See deflate.c for comments about the MIN_MATCH+1. 276d4afb5ceSopenharmony_ci */ 277d4afb5ceSopenharmony_ci 278d4afb5ceSopenharmony_ci#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) 279d4afb5ceSopenharmony_ci/* In order to simplify the code, particularly on 16 bit machines, match 280d4afb5ceSopenharmony_ci * distances are limited to MAX_DIST instead of WSIZE. 281d4afb5ceSopenharmony_ci */ 282d4afb5ceSopenharmony_ci 283d4afb5ceSopenharmony_ci#define WIN_INIT MAX_MATCH 284d4afb5ceSopenharmony_ci/* Number of bytes after end of data in window to initialize in order to avoid 285d4afb5ceSopenharmony_ci memory checker errors from longest match routines */ 286d4afb5ceSopenharmony_ci 287d4afb5ceSopenharmony_ci /* in trees.c */ 288d4afb5ceSopenharmony_civoid ZLIB_INTERNAL _tr_init OF((deflate_state *s)); 289d4afb5ceSopenharmony_ciint ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); 290d4afb5ceSopenharmony_civoid ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, 291d4afb5ceSopenharmony_ci ulg stored_len, int last)); 292d4afb5ceSopenharmony_civoid ZLIB_INTERNAL _tr_align OF((deflate_state *s)); 293d4afb5ceSopenharmony_civoid ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, 294d4afb5ceSopenharmony_ci ulg stored_len, int last)); 295d4afb5ceSopenharmony_ci 296d4afb5ceSopenharmony_ci#define d_code(dist) \ 297d4afb5ceSopenharmony_ci ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) 298d4afb5ceSopenharmony_ci/* Mapping from a distance to a distance code. dist is the distance - 1 and 299d4afb5ceSopenharmony_ci * must not have side effects. _dist_code[256] and _dist_code[257] are never 300d4afb5ceSopenharmony_ci * used. 301d4afb5ceSopenharmony_ci */ 302d4afb5ceSopenharmony_ci 303d4afb5ceSopenharmony_ci#ifndef DEBUG 304d4afb5ceSopenharmony_ci/* Inline versions of _tr_tally for speed: */ 305d4afb5ceSopenharmony_ci 306d4afb5ceSopenharmony_ci#if defined(GEN_TREES_H) || !defined(STDC) 307d4afb5ceSopenharmony_ci extern uch ZLIB_INTERNAL _length_code[]; 308d4afb5ceSopenharmony_ci extern uch ZLIB_INTERNAL _dist_code[]; 309d4afb5ceSopenharmony_ci#else 310d4afb5ceSopenharmony_ci extern const uch ZLIB_INTERNAL _length_code[]; 311d4afb5ceSopenharmony_ci extern const uch ZLIB_INTERNAL _dist_code[]; 312d4afb5ceSopenharmony_ci#endif 313d4afb5ceSopenharmony_ci 314d4afb5ceSopenharmony_ci# define _tr_tally_lit(s, c, flush) \ 315d4afb5ceSopenharmony_ci { uch cc = (c); \ 316d4afb5ceSopenharmony_ci s->sym_buf[s->sym_next++] = 0; \ 317d4afb5ceSopenharmony_ci s->sym_buf[s->sym_next++] = 0; \ 318d4afb5ceSopenharmony_ci s->sym_buf[s->sym_next++] = cc; \ 319d4afb5ceSopenharmony_ci s->dyn_ltree[cc].Freq++; \ 320d4afb5ceSopenharmony_ci flush = (s->sym_next == s->sym_end); \ 321d4afb5ceSopenharmony_ci } 322d4afb5ceSopenharmony_ci# define _tr_tally_dist(s, distance, length, flush) \ 323d4afb5ceSopenharmony_ci { uch len = (uch)(length); \ 324d4afb5ceSopenharmony_ci ush dist = (ush)(distance); \ 325d4afb5ceSopenharmony_ci s->sym_buf[s->sym_next++] = dist; \ 326d4afb5ceSopenharmony_ci s->sym_buf[s->sym_next++] = dist >> 8; \ 327d4afb5ceSopenharmony_ci s->sym_buf[s->sym_next++] = len; \ 328d4afb5ceSopenharmony_ci dist--; \ 329d4afb5ceSopenharmony_ci s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ 330d4afb5ceSopenharmony_ci s->dyn_dtree[d_code(dist)].Freq++; \ 331d4afb5ceSopenharmony_ci flush = (s->sym_next == s->sym_end); \ 332d4afb5ceSopenharmony_ci } 333d4afb5ceSopenharmony_ci#else 334d4afb5ceSopenharmony_ci# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) 335d4afb5ceSopenharmony_ci# define _tr_tally_dist(s, distance, length, flush) \ 336d4afb5ceSopenharmony_ci flush = _tr_tally(s, distance, length) 337d4afb5ceSopenharmony_ci#endif 338d4afb5ceSopenharmony_ci 339d4afb5ceSopenharmony_ci#endif /* DEFLATE_H */ 340