diff options
Diffstat (limited to 'archival')
-rw-r--r-- | archival/gzip.c | 479 |
1 files changed, 238 insertions, 241 deletions
diff --git a/archival/gzip.c b/archival/gzip.c index 44b5fe386..60ff1f311 100644 --- a/archival/gzip.c +++ b/archival/gzip.c @@ -71,7 +71,7 @@ typedef unsigned long ulg; #define STORED 0 /* methods 4 to 7 reserved */ #define DEFLATED 8 -static int method; /* compression method */ +static int method; /* compression method */ /* To save memory for 16 bit systems, some arrays are overlaid between * the various modules: @@ -88,7 +88,7 @@ static int method; /* compression method */ # define INBUFSIZ 0x8000 /* input buffer size */ # endif #endif -#define INBUF_EXTRA 64 /* required by unlzw() */ +#define INBUF_EXTRA 64 /* required by unlzw() */ #ifndef OUTBUFSIZ # ifdef SMALL_MEM @@ -97,7 +97,7 @@ static int method; /* compression method */ # define OUTBUFSIZ 16384 /* output buffer size */ # endif #endif -#define OUTBUF_EXTRA 2048 /* required by unlzw() */ +#define OUTBUF_EXTRA 2048 /* required by unlzw() */ #ifndef DIST_BUFSIZE # ifdef SMALL_MEM @@ -120,17 +120,17 @@ static int method; /* compression method */ #endif #define tab_suffix window -#define tab_prefix prev /* hash link (see deflate.c) */ -#define head (prev+WSIZE) /* hash head (see deflate.c) */ +#define tab_prefix prev /* hash link (see deflate.c) */ +#define head (prev+WSIZE) /* hash head (see deflate.c) */ -static long bytes_in; /* number of input bytes */ +static long bytes_in; /* number of input bytes */ #define isize bytes_in /* for compatibility with old zip sources (to be cleaned) */ -typedef int file_t; /* Do not use stdio */ +typedef int file_t; /* Do not use stdio */ -#define NO_FILE (-1) /* in memory compression */ +#define NO_FILE (-1) /* in memory compression */ #define PACK_MAGIC "\037\036" /* Magic header for packed files */ @@ -140,12 +140,12 @@ typedef int file_t; /* Do not use stdio */ #define PKZIP_MAGIC "\120\113\003\004" /* Magic header for pkzip files */ /* gzip flag byte */ -#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ -#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ -#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ -#define COMMENT 0x10 /* bit 4 set: file comment present */ -#define RESERVED 0xC0 /* bit 6,7: reserved */ +#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ +#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ +#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ +#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define COMMENT 0x10 /* bit 4 set: file comment present */ +#define RESERVED 0xC0 /* bit 6,7: reserved */ /* internal file attribute */ #define UNKNOWN 0xffff @@ -153,7 +153,7 @@ typedef int file_t; /* Do not use stdio */ #define ASCII 1 #ifndef WSIZE -# define WSIZE 0x8000 /* window size--must be a power of two, and */ +# define WSIZE 0x8000 /* window size--must be a power of two, and */ #endif /* at least 32K for zip's deflate method */ #define MIN_MATCH 3 @@ -183,8 +183,8 @@ typedef int file_t; /* Do not use stdio */ } #endif -#define seekable() 0 /* force sequential output */ -#define translate_eol 0 /* no option -a yet */ +#define seekable() 0 /* force sequential output */ +#define translate_eol 0 /* no option -a yet */ /* Diagnostic functions */ #ifdef DEBUG @@ -212,31 +212,31 @@ typedef int file_t; /* Do not use stdio */ /* from zip.c: */ -static int zip (int in, int out); -static int file_read (char *buf, unsigned size); +static int zip(int in, int out); +static int file_read(char *buf, unsigned size); /* from gzip.c */ -static RETSIGTYPE abort_gzip (void); +static RETSIGTYPE abort_gzip(void); /* from deflate.c */ -static void lm_init (ush * flags); -static ulg deflate (void); +static void lm_init(ush * flags); +static ulg deflate(void); /* from trees.c */ -static void ct_init (ush * attr, int *methodp); -static int ct_tally (int dist, int lc); -static ulg flush_block (char *buf, ulg stored_len, int eof); +static void ct_init(ush * attr, int *methodp); +static int ct_tally(int dist, int lc); +static ulg flush_block(char *buf, ulg stored_len, int eof); /* from bits.c */ -static void bi_init (file_t zipfile); -static void send_bits (int value, int length); -static unsigned bi_reverse (unsigned value, int length); -static void bi_windup (void); -static void copy_block (char *buf, unsigned len, int header); +static void bi_init(file_t zipfile); +static void send_bits(int value, int length); +static unsigned bi_reverse(unsigned value, int length); +static void bi_windup(void); +static void copy_block(char *buf, unsigned len, int header); static int (*read_buf) (char *buf, unsigned size); /* from util.c: */ -static void flush_outbuf (void); +static void flush_outbuf(void); /* lzw.h -- define the lzw functions. * Copyright (C) 1992-1993 Jean-loup Gailly. @@ -251,9 +251,9 @@ static void flush_outbuf (void); #ifndef BITS # define BITS 16 #endif -#define INIT_BITS 9 /* Initial number of bits per code */ +#define INIT_BITS 9 /* Initial number of bits per code */ -#define BIT_MASK 0x1f /* Mask for 'number of compression bits' */ +#define BIT_MASK 0x1f /* Mask for 'number of compression bits' */ /* Mask 0x20 is reserved to mean a fourth header byte, and 0x40 is free. * It's a pity that old uncompress does not check bit 0x20. That makes * extension of the format actually undesirable because old compress @@ -277,7 +277,7 @@ static void flush_outbuf (void); /* Common defaults */ #ifndef OS_CODE -# define OS_CODE 0x03 /* assume Unix */ +# define OS_CODE 0x03 /* assume Unix */ #endif #ifndef PATH_SEP @@ -308,31 +308,31 @@ DECLARE(ush, tab_prefix, 1L << BITS); static int crc_table_empty = 1; -static int foreground; /* set if program run in foreground */ +static int foreground; /* set if program run in foreground */ static int method = DEFLATED; /* compression method */ -static int exit_code = OK; /* program exit code */ -static int part_nb; /* number of parts in .gz file */ -static long time_stamp; /* original time stamp (modification time) */ -static long ifile_size; /* input file size, -1 for devices (debug only) */ +static int exit_code = OK; /* program exit code */ +static int part_nb; /* number of parts in .gz file */ +static long time_stamp; /* original time stamp (modification time) */ +static long ifile_size; /* input file size, -1 for devices (debug only) */ static char z_suffix[MAX_SUFFIX + 1]; /* default suffix (can be set with --suffix) */ -static int z_len; /* strlen(z_suffix) */ +static int z_len; /* strlen(z_suffix) */ -static int ifd; /* input file descriptor */ -static int ofd; /* output file descriptor */ -static unsigned insize; /* valid bytes in inbuf */ -static unsigned outcnt; /* bytes in output buffer */ +static int ifd; /* input file descriptor */ +static int ofd; /* output file descriptor */ +static unsigned insize; /* valid bytes in inbuf */ +static unsigned outcnt; /* bytes in output buffer */ /* Output a 16 bit value, lsb first */ static void put_short(ush w) { - if (outcnt < OUTBUFSIZ-2) { - outbuf[outcnt++] = (uch) ((w) & 0xff); - outbuf[outcnt++] = (uch) ((ush)(w) >> 8); - } else { - put_byte((uch)((w) & 0xff)); - put_byte((uch)((ush)(w) >> 8)); - } + if (outcnt < OUTBUFSIZ - 2) { + outbuf[outcnt++] = (uch) ((w) & 0xff); + outbuf[outcnt++] = (uch) ((ush) (w) >> 8); + } else { + put_byte((uch) ((w) & 0xff)); + put_byte((uch) ((ush) (w) >> 8)); + } } /* ======================================================================== @@ -382,27 +382,28 @@ static void write_buf(int fd, void *buf, unsigned cnt) * pointer, then initialize the crc shift register contents instead. * Return the current crc in either case. */ -static ulg updcrc(uch *s, unsigned n) +static ulg updcrc(uch * s, unsigned n) { static ulg crc = (ulg) 0xffffffffL; /* shift register contents */ - register ulg c; /* temporary variable */ + register ulg c; /* temporary variable */ static unsigned long crc_32_tab[256]; + if (crc_table_empty) { - unsigned long csr; /* crc shift register */ + unsigned long csr; /* crc shift register */ const unsigned long e = 0xedb88320L; /* polynomial exclusive-or pattern */ - int i; /* counter for all possible eight bit values */ - int k; /* byte being shifted into crc apparatus */ + int i; /* counter for all possible eight bit values */ + int k; /* byte being shifted into crc apparatus */ /* Compute table of CRC's. */ crc_32_tab[0] = 0x00000000L; for (i = 1; i < 256; i++) { csr = i; - /* The idea to initialize the register with the byte instead of - * zero was stolen from Haruhiko Okumura's ar002 - */ + /* The idea to initialize the register with the byte instead of + * zero was stolen from Haruhiko Okumura's ar002 + */ for (k = 8; k; k--) csr = csr & 1 ? (csr >> 1) ^ e : csr >> 1; - crc_32_tab[i]=csr; + crc_32_tab[i] = csr; } } @@ -416,7 +417,7 @@ static ulg updcrc(uch *s, unsigned n) } while (--n); } crc = c; - return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ + return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ } /* bits.c -- output variable-length bit strings @@ -476,7 +477,7 @@ static ulg updcrc(uch *s, unsigned n) * Local data used by the "bit string" routines. */ -static file_t zfile; /* output gzip file */ +static file_t zfile; /* output gzip file */ static unsigned short bi_buf; @@ -494,7 +495,7 @@ static int bi_valid; /* Current input function. Set to mem_read for in-memory compression */ #ifdef DEBUG -ulg bits_sent; /* bit length of the compressed data */ +ulg bits_sent; /* bit length of the compressed data */ #endif /* =========================================================================== @@ -582,7 +583,7 @@ static void bi_windup() */ static void copy_block(char *buf, unsigned len, int header) { - bi_windup(); /* align on byte boundary */ + bi_windup(); /* align on byte boundary */ if (header) { put_short((ush) len); @@ -676,7 +677,7 @@ static void copy_block(char *buf, unsigned len, int header) */ #ifdef SMALL_MEM -# define HASH_BITS 13 /* Number of bits used to hash strings */ +# define HASH_BITS 13 /* Number of bits used to hash strings */ #endif #ifdef MEDIUM_MEM # define HASH_BITS 14 @@ -750,7 +751,7 @@ static long block_start; * negative when the window is moved backwards. */ -static unsigned ins_h; /* hash index of string to be inserted */ +static unsigned ins_h; /* hash index of string to be inserted */ #define H_SHIFT ((HASH_BITS+MIN_MATCH-1)/MIN_MATCH) /* Number of bits by which ins_h and del_h must be shifted at each @@ -765,18 +766,18 @@ static unsigned int prev_length; * are discarded. This is used in the lazy match evaluation. */ -static unsigned strstart; /* start of string to insert */ -static unsigned match_start; /* start of matching string */ -static int eofile; /* flag set at end of input file */ -static unsigned lookahead; /* number of valid bytes ahead in window */ +static unsigned strstart; /* start of string to insert */ +static unsigned match_start; /* start of matching string */ +static int eofile; /* flag set at end of input file */ +static unsigned lookahead; /* number of valid bytes ahead in window */ -static const unsigned max_chain_length=4096; +static const unsigned max_chain_length = 4096; /* To speed up deflation, hash chains are never searched beyond this length. * A higher limit improves compression ratio but degrades the speed. */ -static const unsigned int max_lazy_match=258; +static const unsigned int max_lazy_match = 258; /* Attempt to find a better match only when the current match is strictly * smaller than this value. This mechanism is used only for compression @@ -788,7 +789,7 @@ static const unsigned int max_lazy_match=258; * max_insert_length is used only for compression levels <= 3. */ -static const unsigned good_match=32; +static const unsigned good_match = 32; /* Use a faster search when the previous match is longer than this */ @@ -799,7 +800,7 @@ static const unsigned good_match=32; * found for specific files. */ -static const int nice_match=258; /* Stop searching when current match exceeds this */ +static const int nice_match = 258; /* Stop searching when current match exceeds this */ /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different @@ -812,12 +813,12 @@ static const int nice_match=258; /* Stop searching when current match exceeds /* =========================================================================== * Prototypes for local functions. */ -static void fill_window (void); +static void fill_window(void); -static int longest_match (IPos cur_match); +static int longest_match(IPos cur_match); #ifdef DEBUG -static void check_match (IPos start, IPos match, int length); +static void check_match(IPos start, IPos match, int length); #endif /* =========================================================================== @@ -844,7 +845,7 @@ static void check_match (IPos start, IPos match, int length); /* =========================================================================== * Initialize the "longest match" routines for a new file */ -static void lm_init(ush *flags) +static void lm_init(ush * flags) { register unsigned j; @@ -897,11 +898,10 @@ static int longest_match(IPos cur_match) { unsigned chain_length = max_chain_length; /* max hash chain length */ register uch *scan = window + strstart; /* current string */ - register uch *match; /* matched string */ - register int len; /* length of current match */ + register uch *match; /* matched string */ + register int len; /* length of current match */ int best_len = prev_length; /* best match length so far */ IPos limit = - strstart > (IPos) MAX_DIST ? strstart - (IPos) MAX_DIST : NIL; /* Stop when cur_match becomes <= limit. To simplify the code, * we prevent matches with the string of window index 0. @@ -921,8 +921,7 @@ static int longest_match(IPos cur_match) if (prev_length >= good_match) { chain_length >>= 2; } - Assert(strstart <= window_size - MIN_LOOKAHEAD, - "insufficient lookahead"); + Assert(strstart <= window_size - MIN_LOOKAHEAD, "insufficient lookahead"); do { Assert(cur_match < strstart, "no future"); @@ -951,8 +950,7 @@ static int longest_match(IPos cur_match) } while (*++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && - *++scan == *++match && *++scan == *++match && - scan < strend); + *++scan == *++match && *++scan == *++match && scan < strend); len = MAX_MATCH - (int) (strend - scan); scan = strend - MAX_MATCH; @@ -1007,7 +1005,6 @@ static void fill_window() { register unsigned n, m; unsigned more = - (unsigned) (window_size - (ulg) lookahead - (ulg) strstart); /* Amount of free space at the end of the window. */ @@ -1027,7 +1024,7 @@ static void fill_window() memcpy((char *) window, (char *) window + WSIZE, (unsigned) WSIZE); match_start -= WSIZE; - strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */ + strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */ block_start -= (long) WSIZE; @@ -1070,9 +1067,9 @@ static void fill_window() */ static ulg deflate() { - IPos hash_head; /* head of hash chain */ - IPos prev_match; /* previous match */ - int flush; /* set if current block must be flushed */ + IPos hash_head; /* head of hash chain */ + IPos prev_match; /* previous match */ + int flush; /* set if current block must be flushed */ int match_available = 0; /* set if previous match exists */ register unsigned match_length = MIN_MATCH - 1; /* length of best match */ @@ -1100,8 +1097,7 @@ static ulg deflate() match_length = lookahead; /* Ignore a length 3 match if it is too distant: */ - if (match_length == MIN_MATCH - && strstart - match_start > TOO_FAR) { + if (match_length == MIN_MATCH && strstart - match_start > TOO_FAR) { /* If prev_match is also MIN_MATCH, match_start is garbage * but we will ignore the current match anyway. */ @@ -1116,8 +1112,7 @@ static ulg deflate() check_match(strstart - 1, prev_match, prev_length); flush = - ct_tally(strstart - 1 - prev_match, - prev_length - MIN_MATCH); + ct_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); /* Insert in hash table all strings up to the end of the match. * strstart-1 and strstart are already inserted. @@ -1171,7 +1166,7 @@ static ulg deflate() if (match_available) ct_tally(0, window[strstart - 1]); - return FLUSH_BLOCK(1); /* eof */ + return FLUSH_BLOCK(1); /* eof */ } /* gzip (GNU zip) -- compress files with zip algorithm and 'compress' interface @@ -1201,9 +1196,6 @@ typedef struct dirent dir_type; typedef RETSIGTYPE(*sig_type) (int); /* ======================================================================== */ -// int main (argc, argv) -// int argc; -// char **argv; int gzip_main(int argc, char **argv) { int result; @@ -1223,9 +1215,16 @@ int gzip_main(int argc, char **argv) case 'f': force = 1; break; - /* Ignore 1-9 (compression level) options */ - case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': + /* Ignore 1-9 (compression level) options */ + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': break; case 'q': break; @@ -1284,7 +1283,7 @@ int gzip_main(int argc, char **argv) outFileNum = STDOUT_FILENO; } else { inFileNum = open(argv[i], O_RDONLY); - if (inFileNum < 0 || fstat (inFileNum, &statBuf) < 0) + if (inFileNum < 0 || fstat(inFileNum, &statBuf) < 0) perror_msg_and_die("%s", argv[i]); time_stamp = statBuf.st_ctime; ifile_size = statBuf.st_size; @@ -1296,7 +1295,8 @@ int gzip_main(int argc, char **argv) /* Open output file */ #if (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1) - outFileNum = open(path, O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW); + outFileNum = + open(path, O_RDWR | O_CREAT | O_EXCL | O_NOFOLLOW); #else outFileNum = open(path, O_RDWR | O_CREAT | O_EXCL); #endif @@ -1313,7 +1313,8 @@ int gzip_main(int argc, char **argv) } if (path == NULL && isatty(outFileNum) && force == 0) { - error_msg("compressed data not written to a terminal. Use -f to force compression."); + error_msg + ("compressed data not written to a terminal. Use -f to force compression."); free(path); continue; } @@ -1321,8 +1322,8 @@ int gzip_main(int argc, char **argv) result = zip(inFileNum, outFileNum); if (path != NULL) { - close (inFileNum); - close (outFileNum); + close(inFileNum); + close(outFileNum); /* Delete the original file */ if (result == OK) @@ -1338,7 +1339,7 @@ int gzip_main(int argc, char **argv) } } - return(exit_code); + return (exit_code); } /* trees.c -- output deflated data using Huffman coding @@ -1427,17 +1428,19 @@ int gzip_main(int argc, char **argv) typedef uch extra_bits_t; /* extra bits for each length code */ -static const extra_bits_t extra_lbits[LENGTH_CODES] +static const extra_bits_t extra_lbits[LENGTH_CODES] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, - 4, 4, 5, 5, 5, 5, 0 }; + 4, 4, 5, 5, 5, 5, 0 +}; /* extra bits for each distance code */ -static const extra_bits_t extra_dbits[D_CODES] +static const extra_bits_t extra_dbits[D_CODES] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, - 10, 10, 11, 11, 12, 12, 13, 13 }; + 10, 10, 11, 11, 12, 12, 13, 13 +}; /* extra bits for each bit length code */ -static const extra_bits_t extra_blbits[BL_CODES] +static const extra_bits_t extra_blbits[BL_CODES] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 }; #define STORED_BLOCK 0 @@ -1487,16 +1490,21 @@ static const extra_bits_t extra_blbits[BL_CODES] #define REPZ_3_10 17 /* repeat a zero length 3-10 times (3 bits of repeat count) */ #define REPZ_11_138 18 -/* repeat a zero length 11-138 times (7 bits of repeat count) *//* =========================================================================== +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* =========================================================================== * Local data - *//* Data structure describing a single value and its code string. */ typedef struct ct_data { + */ + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data { union { - ush freq; /* frequency count */ - ush code; /* bit string */ + ush freq; /* frequency count */ + ush code; /* bit string */ } fc; union { - ush dad; /* father node in Huffman tree */ - ush len; /* length of bit string */ + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ } dl; } ct_data; @@ -1530,25 +1538,27 @@ static ct_data bl_tree[2 * BL_CODES + 1]; /* Huffman tree for the bit lengths */ typedef struct tree_desc { - ct_data *dyn_tree; /* the dynamic tree */ + ct_data *dyn_tree; /* the dynamic tree */ ct_data *static_tree; /* corresponding static tree or NULL */ - const extra_bits_t *extra_bits; /* extra bits for each code or NULL */ - int extra_base; /* base index for extra_bits */ - int elems; /* max number of elements in the tree */ - int max_length; /* max bit length for the codes */ - int max_code; /* largest code with non zero frequency */ + const extra_bits_t *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ + int max_code; /* largest code with non zero frequency */ } tree_desc; static tree_desc l_desc = { dyn_ltree, static_ltree, extra_lbits, LITERALS + 1, L_CODES, - MAX_BITS, 0 }; + MAX_BITS, 0 +}; static tree_desc d_desc = { dyn_dtree, static_dtree, extra_dbits, 0, D_CODES, MAX_BITS, 0 }; static tree_desc bl_desc = { bl_tree, (ct_data *) 0, extra_blbits, 0, BL_CODES, MAX_BL_BITS, - 0 }; + 0 +}; static ush bl_count[MAX_BITS + 1]; @@ -1563,8 +1573,8 @@ static const uch bl_order[BL_CODES] */ static int heap[2 * L_CODES + 1]; /* heap used to build the Huffman trees */ -static int heap_len; /* number of elements in the heap */ -static int heap_max; /* element of largest frequency */ +static int heap_len; /* number of elements in the heap */ +static int heap_max; /* element of largest frequency */ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. * The same heap array is used to build all trees. @@ -1604,41 +1614,41 @@ static uch flag_buf[(LIT_BUFSIZE / 8)]; * l_buf, thus indicating the presence or absence of a distance. */ -static unsigned last_lit; /* running index in l_buf */ -static unsigned last_dist; /* running index in d_buf */ -static unsigned last_flags; /* running index in flag_buf */ -static uch flags; /* current flags not yet saved in flag_buf */ -static uch flag_bit; /* current bit used in flags */ +static unsigned last_lit; /* running index in l_buf */ +static unsigned last_dist; /* running index in d_buf */ +static unsigned last_flags; /* running index in flag_buf */ +static uch flags; /* current flags not yet saved in flag_buf */ +static uch flag_bit; /* current bit used in flags */ /* bits are filled in flags starting at bit 0 (least significant). * Note: these flags are overkill in the current code since we don't * take advantage of DIST_BUFSIZE == LIT_BUFSIZE. */ -static ulg opt_len; /* bit length of current block with optimal trees */ -static ulg static_len; /* bit length of current block with static trees */ +static ulg opt_len; /* bit length of current block with optimal trees */ +static ulg static_len; /* bit length of current block with static trees */ -static ulg compressed_len; /* total bit length of compressed file */ +static ulg compressed_len; /* total bit length of compressed file */ -static ush *file_type; /* pointer to UNKNOWN, BINARY or ASCII */ -static int *file_method; /* pointer to DEFLATE or STORE */ +static ush *file_type; /* pointer to UNKNOWN, BINARY or ASCII */ +static int *file_method; /* pointer to DEFLATE or STORE */ /* =========================================================================== * Local (static) routines in this file. */ -static void init_block (void); -static void pqdownheap (ct_data * tree, int k); -static void gen_bitlen (tree_desc * desc); -static void gen_codes (ct_data * tree, int max_code); -static void build_tree (tree_desc * desc); -static void scan_tree (ct_data * tree, int max_code); -static void send_tree (ct_data * tree, int max_code); -static int build_bl_tree (void); -static void send_all_trees (int lcodes, int dcodes, int blcodes); -static void compress_block (ct_data * ltree, ct_data * dtree); -static void set_file_type (void); +static void init_block(void); +static void pqdownheap(ct_data * tree, int k); +static void gen_bitlen(tree_desc * desc); +static void gen_codes(ct_data * tree, int max_code); +static void build_tree(tree_desc * desc); +static void scan_tree(ct_data * tree, int max_code); +static void send_tree(ct_data * tree, int max_code); +static int build_bl_tree(void); +static void send_all_trees(int lcodes, int dcodes, int blcodes); +static void compress_block(ct_data * ltree, ct_data * dtree); +static void set_file_type(void); #ifndef DEBUG @@ -1665,20 +1675,20 @@ static void set_file_type (void); * location of the internal file attribute (ascii/binary) and method * (DEFLATE/STORE). */ -static void ct_init(ush *attr, int *methodp) +static void ct_init(ush * attr, int *methodp) { - int n; /* iterates over tree elements */ - int bits; /* bit counter */ - int length; /* length value */ - int code; /* code value */ - int dist; /* distance index */ + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ file_type = attr; file_method = methodp; compressed_len = 0L; if (static_dtree[0].Len != 0) - return; /* ct_init already called */ + return; /* ct_init already called */ /* Initialize the mapping length (0..255) -> length code (0..28) */ length = 0; @@ -1704,7 +1714,7 @@ static void ct_init(ush *attr, int *methodp) } } Assert(dist == 256, "ct_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ + dist >>= 7; /* from now on, all distances are divided by 128 */ for (; code < D_CODES; code++) { base_dist[code] = dist << 7; for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { @@ -1746,7 +1756,7 @@ static void ct_init(ush *attr, int *methodp) */ static void init_block() { - int n; /* iterates over tree elements */ + int n; /* iterates over tree elements */ /* Initialize the trees. */ for (n = 0; n < L_CODES; n++) @@ -1792,10 +1802,10 @@ static void init_block() * when the heap property is re-established (each father smaller than its * two sons). */ -static void pqdownheap(ct_data *tree, int k) +static void pqdownheap(ct_data * tree, int k) { int v = heap[k]; - int j = k << 1; /* left son of k */ + int j = k << 1; /* left son of k */ while (j <= heap_len) { /* Set j to the smallest of the two sons: */ @@ -1826,7 +1836,7 @@ static void pqdownheap(ct_data *tree, int k) * The length opt_len is updated; static_len is also updated if stree is * not null. */ -static void gen_bitlen(tree_desc *desc) +static void gen_bitlen(tree_desc * desc) { ct_data *tree = desc->dyn_tree; const extra_bits_t *extra = desc->extra_bits; @@ -1834,12 +1844,12 @@ static void gen_bitlen(tree_desc *desc) int max_code = desc->max_code; int max_length = desc->max_length; ct_data *stree = desc->static_tree; - int h; /* heap index */ - int n, m; /* iterate over the tree elements */ - int bits; /* bit length */ - int xbits; /* extra bits */ - ush f; /* frequency */ - int overflow = 0; /* number of elements with bit length too large */ + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; @@ -1858,7 +1868,7 @@ static void gen_bitlen(tree_desc *desc) /* We overwrite tree[n].Dad which is no longer needed */ if (n > max_code) - continue; /* not a leaf node */ + continue; /* not a leaf node */ bl_count[bits]++; xbits = 0; @@ -1881,7 +1891,7 @@ static void gen_bitlen(tree_desc *desc) bits = max_length - 1; while (bl_count[bits] == 0) bits--; - bl_count[bits]--; /* move one leaf down the tree */ + bl_count[bits]--; /* move one leaf down the tree */ bl_count[bits + 1] += 2; /* move one overflow item as its brother */ bl_count[max_length]--; /* The brother of the overflow item also moves one step up, @@ -1902,12 +1912,10 @@ static void gen_bitlen(tree_desc *desc) if (m > max_code) continue; if (tree[m].Len != (unsigned) bits) { - Trace( - (stderr, "code %d bits %d->%d\n", m, tree[m].Len, + Trace((stderr, "code %d bits %d->%d\n", m, tree[m].Len, bits)); opt_len += - ((long) bits - - (long) tree[m].Len) * (long) tree[m].Freq; + ((long) bits - (long) tree[m].Len) * (long) tree[m].Freq; tree[m].Len = (ush) bits; } n--; @@ -1923,12 +1931,12 @@ static void gen_bitlen(tree_desc *desc) * OUT assertion: the field code is set for all tree elements of non * zero code length. */ -static void gen_codes(ct_data *tree, int max_code) +static void gen_codes(ct_data * tree, int max_code) { ush next_code[MAX_BITS + 1]; /* next code value for each bit length */ - ush code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ /* The distribution counts are first used to generate the code values * without bit reversal. @@ -1966,14 +1974,14 @@ static void gen_codes(ct_data *tree, int max_code) * and corresponding code. The length opt_len is updated; static_len is * also updated if stree is not null. The field max_code is set. */ -static void build_tree(tree_desc *desc) +static void build_tree(tree_desc * desc) { ct_data *tree = desc->dyn_tree; ct_data *stree = desc->static_tree; int elems = desc->elems; - int n, m; /* iterate over heap elements */ - int max_code = -1; /* largest code with non zero frequency */ - int node = elems; /* next internal node of the tree */ + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node = elems; /* next internal node of the tree */ /* Construct the initial heap, with least frequent element in * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. @@ -2017,8 +2025,8 @@ static void build_tree(tree_desc *desc) * frequent nodes. */ do { - pqremove(tree, n); /* n = node of least frequency */ - m = heap[SMALLEST]; /* m = node of next least frequency */ + pqremove(tree, n); /* n = node of least frequency */ + m = heap[SMALLEST]; /* m = node of next least frequency */ heap[--heap_max] = n; /* keep the nodes sorted by frequency */ heap[--heap_max] = m; @@ -2030,8 +2038,7 @@ static void build_tree(tree_desc *desc) #ifdef DUMP_BL_TREE if (tree == bl_tree) { fprintf(stderr, "\nnode %d(%d), sons %d(%d) %d(%d)", - node, tree[node].Freq, n, tree[n].Freq, m, - tree[m].Freq); + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); } #endif /* and insert the new node in the heap */ @@ -2057,15 +2064,15 @@ static void build_tree(tree_desc *desc) * counts. (The contribution of the bit length codes will be added later * during the construction of bl_tree.) */ -static void scan_tree(ct_data *tree, int max_code) +static void scan_tree(ct_data * tree, int max_code) { - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ if (nextlen == 0) max_count = 138, min_count = 3; @@ -2103,15 +2110,15 @@ static void scan_tree(ct_data *tree, int max_code) * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ -static void send_tree(ct_data *tree, int max_code) +static void send_tree(ct_data * tree, int max_code) { - int n; /* iterates over all tree elements */ - int prevlen = -1; /* last emitted length */ - int curlen; /* length of current code */ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ int nextlen = tree[0].Len; /* length of next code */ - int count = 0; /* repeat count of the current code */ - int max_count = 7; /* max repeat count */ - int min_count = 4; /* min repeat count */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ /* tree[max_code+1].Len = -1; *//* guard already set */ if (nextlen == 0) @@ -2162,7 +2169,7 @@ static void send_tree(ct_data *tree, int max_code) */ static const int build_bl_tree() { - int max_blindex; /* index of last bit length code of non zero freq */ + int max_blindex; /* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */ scan_tree((ct_data *) dyn_ltree, l_desc.max_code); @@ -2184,9 +2191,7 @@ static const int build_bl_tree() } /* Update opt_len to include the bit length tree and counts */ opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - Tracev( - (stderr, "\ndyn trees: dyn %ld, stat %ld", opt_len, - static_len)); + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", opt_len, static_len)); return max_blindex; } @@ -2198,10 +2203,9 @@ static const int build_bl_tree() */ static void send_all_trees(int lcodes, int dcodes, int blcodes) { - int rank; /* index in bl_order */ + int rank; /* index in bl_order */ - Assert(lcodes >= 257 && dcodes >= 1 - && blcodes >= 4, "not enough codes"); + Assert(lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); Assert(lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes"); Tracev((stderr, "\nbl counts: ")); @@ -2229,7 +2233,7 @@ static void send_all_trees(int lcodes, int dcodes, int blcodes) static ulg flush_block(char *buf, ulg stored_len, int eof) { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - int max_blindex; /* index of last bit length code of non zero freq */ + int max_blindex; /* index of last bit length code of non zero freq */ flag_buf[last_flags] = flags; /* Save the flags for the last 8 items */ @@ -2242,9 +2246,7 @@ static ulg flush_block(char *buf, ulg stored_len, int eof) Tracev((stderr, "\nlit data: dyn %ld, stat %ld", opt_len, static_len)); build_tree((tree_desc *) (&d_desc)); - Tracev( - (stderr, "\ndist data: dyn %ld, stat %ld", opt_len, - static_len)); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", opt_len, static_len)); /* At this point, opt_len and static_len are the total bit lengths of * the compressed block data, excluding the tree representations. */ @@ -2258,8 +2260,7 @@ static ulg flush_block(char *buf, ulg stored_len, int eof) opt_lenb = (opt_len + 3 + 7) >> 3; static_lenb = (static_len + 3 + 7) >> 3; - Trace( - (stderr, + Trace((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u dist %u ", opt_lenb, opt_len, static_lenb, static_len, stored_len, last_lit, last_dist)); @@ -2271,8 +2272,7 @@ static ulg flush_block(char *buf, ulg stored_len, int eof) * and if the zip file can be seeked (to rewrite the local header), * the whole file is transformed into a stored file: */ - if (stored_len <= opt_lenb && eof && compressed_len == 0L - && seekable()) { + if (stored_len <= opt_lenb && eof && compressed_len == 0L && seekable()) { /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */ if (buf == (char *) 0) error_msg("block vanished"); @@ -2297,15 +2297,13 @@ static ulg flush_block(char *buf, ulg stored_len, int eof) } else if (static_lenb == opt_lenb) { send_bits((STATIC_TREES << 1) + eof, 3); - compress_block((ct_data *) static_ltree, - (ct_data *) static_dtree); + compress_block((ct_data *) static_ltree, (ct_data *) static_dtree); compressed_len += 3 + static_len; } else { send_bits((DYN_TREES << 1) + eof, 3); send_all_trees(l_desc.max_code + 1, d_desc.max_code + 1, max_blindex + 1); - compress_block((ct_data *) dyn_ltree, - (ct_data *) dyn_dtree); + compress_block((ct_data *) dyn_ltree, (ct_data *) dyn_dtree); compressed_len += 3 + opt_len; } Assert(compressed_len == bits_sent, "bad compressed size"); @@ -2333,7 +2331,7 @@ static int ct_tally(int dist, int lc) dyn_ltree[lc].Freq++; } else { /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ + dist--; /* dist = match distance - 1 */ Assert((ush) dist < (ush) MAX_DIST && (ush) lc <= (ush) (MAX_MATCH - MIN_MATCH) && (ush) d_code(dist) < (ush) D_CODES, "ct_tally: bad match"); @@ -2363,8 +2361,7 @@ static int ct_tally(int dist, int lc) (ulg) dyn_dtree[dcode].Freq * (5L + extra_dbits[dcode]); } out_length >>= 3; - Trace( - (stderr, + Trace((stderr, "\nlast_lit %u, last_dist %u, in %ld, out ~%ld(%ld%%) ", last_lit, last_dist, in_length, out_length, 100L - out_length * 100L / in_length)); @@ -2381,16 +2378,16 @@ static int ct_tally(int dist, int lc) /* =========================================================================== * Send the block data compressed using the given Huffman trees */ -static void compress_block(ct_data *ltree, ct_data *dtree) +static void compress_block(ct_data * ltree, ct_data * dtree) { - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned lx = 0; /* running index in l_buf */ - unsigned dx = 0; /* running index in d_buf */ - unsigned fx = 0; /* running index in flag_buf */ - uch flag = 0; /* current flags */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned dx = 0; /* running index in d_buf */ + unsigned fx = 0; /* running index in flag_buf */ + uch flag = 0; /* current flags */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ if (last_lit != 0) do { @@ -2420,7 +2417,7 @@ static void compress_block(ct_data *ltree, ct_data *dtree) dist -= base_dist[code]; send_bits(dist, extra); /* send the extra distance bits */ } - } /* literal or match pair ? */ + } /* literal or match pair ? */ flag >>= 1; } while (lx < last_lit); @@ -2458,13 +2455,13 @@ static void set_file_type() */ -static ulg crc; /* crc on uncompressed file data */ -static long header_bytes; /* number of bytes in gzip header */ +static ulg crc; /* crc on uncompressed file data */ +static long header_bytes; /* number of bytes in gzip header */ static void put_long(ulg n) { put_short((n) & 0xffff); - put_short(((ulg)(n)) >> 16); + put_short(((ulg) (n)) >> 16); } /* put_header_byte is used for the compressed output @@ -2479,9 +2476,9 @@ static void put_long(ulg n) */ static int zip(int in, int out) { - uch my_flags = 0; /* general purpose bit flags */ - ush attr = 0; /* ascii/binary flag */ - ush deflate_flags = 0; /* pkzip -es, -en or -ex equivalent */ + uch my_flags = 0; /* general purpose bit flags */ + ush attr = 0; /* ascii/binary flag */ + ush deflate_flags = 0; /* pkzip -es, -en or -ex equivalent */ ifd = in; ofd = out; @@ -2491,11 +2488,11 @@ static int zip(int in, int out) method = DEFLATED; - put_header_byte(GZIP_MAGIC[0]); /* magic header */ + put_header_byte(GZIP_MAGIC[0]); /* magic header */ put_header_byte(GZIP_MAGIC[1]); - put_header_byte(DEFLATED); /* compression method */ + put_header_byte(DEFLATED); /* compression method */ - put_header_byte(my_flags); /* general flags */ + put_header_byte(my_flags); /* general flags */ put_long(time_stamp); /* Write deflated file to zip file */ @@ -2506,7 +2503,7 @@ static int zip(int in, int out) lm_init(&deflate_flags); put_byte((uch) deflate_flags); /* extra flags */ - put_byte(OS_CODE); /* OS identifier */ + put_byte(OS_CODE); /* OS identifier */ header_bytes = (long) outcnt; |