diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | Makefile.in | 2 | ||||
-rw-r--r-- | README | 31 | ||||
-rwxr-xr-x | configure | 19 | ||||
-rw-r--r-- | deflate.c | 93 | ||||
-rw-r--r-- | deflate.h | 42 | ||||
-rw-r--r-- | gzio.c | 7 | ||||
-rw-r--r-- | inflate.c | 4 | ||||
-rw-r--r-- | inftrees.c | 2 | ||||
-rw-r--r-- | minigzip.c | 66 | ||||
-rw-r--r-- | msdos/zlib.def | 2 | ||||
-rw-r--r-- | msdos/zlib.rc | 6 | ||||
-rw-r--r-- | trees.c | 31 | ||||
-rw-r--r-- | trees.h | 4 | ||||
-rw-r--r-- | zlib.3 | 4 | ||||
-rw-r--r-- | zlib.h | 4 |
17 files changed, 262 insertions, 68 deletions
@@ -1,6 +1,17 @@ | |||
1 | 1 | ||
2 | ChangeLog file for zlib | 2 | ChangeLog file for zlib |
3 | 3 | ||
4 | Changes in 1.1 (24 Feb 98) | ||
5 | - do not return STREAM_END prematurely in inflate (John Bowler) | ||
6 | - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) | ||
7 | - compile with -DFASTEST to get compression code optimized for speed only | ||
8 | - in minigzip, try mmap'ing the input file first (Miguel Albrecht) | ||
9 | - increase size of I/O buffers in minigzip.c and gzio.c (not a big gain | ||
10 | on Sun but significant on HP) | ||
11 | |||
12 | - add a pointer to experimental unzip library in README (Gilles Vollant) | ||
13 | - initialize variable gcc in configure (Chris Herborth) | ||
14 | |||
4 | Changes in 1.0.9 (17 Feb 1998) | 15 | Changes in 1.0.9 (17 Feb 1998) |
5 | - added gzputs and gzgets functions | 16 | - added gzputs and gzgets functions |
6 | - do not clear eof flag in gzseek (Mark Diekhans) | 17 | - do not clear eof flag in gzseek (Mark Diekhans) |
@@ -23,7 +23,7 @@ CFLAGS=-O | |||
23 | LDFLAGS=-L. -lz | 23 | LDFLAGS=-L. -lz |
24 | LDSHARED=$(CC) | 24 | LDSHARED=$(CC) |
25 | 25 | ||
26 | VER=1.0.9 | 26 | VER=1.1.0 |
27 | LIBS=libz.a | 27 | LIBS=libz.a |
28 | SHAREDLIB=libz.so | 28 | SHAREDLIB=libz.so |
29 | 29 | ||
diff --git a/Makefile.in b/Makefile.in index f6c3ca7..257f394 100644 --- a/Makefile.in +++ b/Makefile.in | |||
@@ -23,7 +23,7 @@ CFLAGS=-O | |||
23 | LDFLAGS=-L. -lz | 23 | LDFLAGS=-L. -lz |
24 | LDSHARED=$(CC) | 24 | LDSHARED=$(CC) |
25 | 25 | ||
26 | VER=1.0.9 | 26 | VER=1.1.0 |
27 | LIBS=libz.a | 27 | LIBS=libz.a |
28 | SHAREDLIB=libz.so | 28 | SHAREDLIB=libz.so |
29 | 29 | ||
@@ -1,4 +1,4 @@ | |||
1 | zlib 1.0.9 is a general purpose data compression library. All the code | 1 | zlib 1.1.0 is a general purpose data compression library. All the code |
2 | is thread safe. The data format used by the zlib library | 2 | is thread safe. The data format used by the zlib library |
3 | is described by RFCs (Request for Comments) 1950 to 1952 in the files | 3 | is described by RFCs (Request for Comments) 1950 to 1952 in the files |
4 | ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate | 4 | ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate |
@@ -25,21 +25,15 @@ Mark Nelson wrote an article about zlib for the Jan. 1997 issue of | |||
25 | Dr. Dobb's Journal; a copy of the article is available in | 25 | Dr. Dobb's Journal; a copy of the article is available in |
26 | http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm | 26 | http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm |
27 | 27 | ||
28 | The changes made in version 1.0.9 are documented in the file ChangeLog. | 28 | The changes made in version 1.1.0 are documented in the file ChangeLog. |
29 | The main changes since 1.0.8 are: | 29 | The main changes since 1.0.9 are: |
30 | 30 | ||
31 | - added gzputs and gzgets functions | 31 | - do not return STREAM_END prematurely in inflate (John Bowler) |
32 | - do not clear eof flag in gzseek (Mark Diekhans) | 32 | - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) |
33 | - fix gzseek for files in transparent mode (Mark Diekhans) | 33 | - compile with -DFASTEST to get compression code optimized for speed only |
34 | - do not assume that vsprintf returns the number of bytes written (Jens Krinke) | 34 | - in minigzip, try mmap'ing the input file first (Miguel Albrecht) |
35 | - replace EXPORT with ZEXPORT to avoid conflict with other programs | 35 | - increase size of I/O buffers in minigzip.c and gzio.c (not a big gain |
36 | - added compress2 in zconf.h, zlib.def, zlib.dnt | 36 | on Sun but significant on HP) |
37 | - new asm code from Gilles Vollant in contrib/asm386 | ||
38 | - simplify the inflate code (Mark): | ||
39 | . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() | ||
40 | . ZALLOC the length list in inflate_trees_fixed() instead of using stack | ||
41 | . ZALLOC the value area for huft_build() instead of using stack | ||
42 | . Simplify Z_FINISH check in inflate() | ||
43 | 37 | ||
44 | 38 | ||
45 | Unsupported third party contributions are provided in directory "contrib". | 39 | Unsupported third party contributions are provided in directory "contrib". |
@@ -56,6 +50,11 @@ A Python interface to zlib written by A.M. Kuchling <amk@magnet.com> | |||
56 | is available from the Python Software Association sites, such as: | 50 | is available from the Python Software Association sites, such as: |
57 | ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz | 51 | ftp://ftp.python.org/pub/python/contrib/Encoding/zlib*.tar.gz |
58 | 52 | ||
53 | An experimental package to read files in .zip format, written on top of | ||
54 | zlib by Gilles Vollant <info@winimage.com>, is available at | ||
55 | http://www.winimage.com/zLibDll/unzip.html | ||
56 | |||
57 | |||
59 | Notes for some targets: | 58 | Notes for some targets: |
60 | 59 | ||
61 | - To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc | 60 | - To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc |
@@ -83,7 +82,7 @@ Notes for some targets: | |||
83 | writes to pointers are atomic. Also the functions zalloc and zfree passed | 82 | writes to pointers are atomic. Also the functions zalloc and zfree passed |
84 | to deflateInit must be multi-threaded in this case. | 83 | to deflateInit must be multi-threaded in this case. |
85 | 84 | ||
86 | - gzdopen is not supported on RISCOS, BEOS and Mac | 85 | - gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. |
87 | 86 | ||
88 | - For Turbo C the small model is supported only with reduced performance to | 87 | - For Turbo C the small model is supported only with reduced performance to |
89 | avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 | 88 | avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 |
@@ -27,6 +27,7 @@ prefix=${prefix-/usr/local} | |||
27 | exec_prefix=${exec_prefix-$prefix} | 27 | exec_prefix=${exec_prefix-$prefix} |
28 | shared_ext='.so' | 28 | shared_ext='.so' |
29 | shared=0 | 29 | shared=0 |
30 | gcc=0 | ||
30 | old_cc="$CC" | 31 | old_cc="$CC" |
31 | old_cflags="$CFLAGS" | 32 | old_cflags="$CFLAGS" |
32 | 33 | ||
@@ -114,7 +115,6 @@ if test $shared -eq 0; then | |||
114 | LDSHARED="$CC" | 115 | LDSHARED="$CC" |
115 | echo Building static library $LIBS version $VER with $CC. | 116 | echo Building static library $LIBS version $VER with $CC. |
116 | fi | 117 | fi |
117 | rm -f $test.[co] $test$shared_ext | ||
118 | 118 | ||
119 | if test -f /usr/include/unistd.h; then | 119 | if test -f /usr/include/unistd.h; then |
120 | CFLAGS="$CFLAGS -DHAVE_UNISTD_H" | 120 | CFLAGS="$CFLAGS -DHAVE_UNISTD_H" |
@@ -124,6 +124,23 @@ if test ! -f /usr/include/errno.h; then | |||
124 | CFLAGS="$CFLAGS -DNO_ERRNO_H" | 124 | CFLAGS="$CFLAGS -DNO_ERRNO_H" |
125 | fi | 125 | fi |
126 | 126 | ||
127 | cat > $test.c <<EOF | ||
128 | #include <sys/types.h> | ||
129 | #include <sys/mman.h> | ||
130 | #include <sys/stat.h> | ||
131 | caddr_t hello() { | ||
132 | return mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0); | ||
133 | } | ||
134 | EOF | ||
135 | if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then | ||
136 | CFLAGS="$CFLAGS -DUSE_MMAP" | ||
137 | echo Checking for mmap support... Yes. | ||
138 | else | ||
139 | echo Checking for mmap support... No. | ||
140 | fi | ||
141 | |||
142 | rm -f $test.[co] $test$shared_ext | ||
143 | |||
127 | # udpate Makefile | 144 | # udpate Makefile |
128 | sed < Makefile.in " | 145 | sed < Makefile.in " |
129 | /^CC *=/s%=.*%=$CC% | 146 | /^CC *=/s%=.*%=$CC% |
@@ -52,7 +52,7 @@ | |||
52 | #include "deflate.h" | 52 | #include "deflate.h" |
53 | 53 | ||
54 | const char deflate_copyright[] = | 54 | const char deflate_copyright[] = |
55 | " deflate 1.0.9 Copyright 1995-1998 Jean-loup Gailly "; | 55 | " deflate 1.1.0 Copyright 1995-1998 Jean-loup Gailly "; |
56 | /* | 56 | /* |
57 | If you use the zlib library in a product, an acknowledgment is welcome | 57 | If you use the zlib library in a product, an acknowledgment is welcome |
58 | in the documentation of your product. If for some reason you cannot | 58 | in the documentation of your product. If for some reason you cannot |
@@ -160,14 +160,23 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ | |||
160 | * Insert string str in the dictionary and set match_head to the previous head | 160 | * Insert string str in the dictionary and set match_head to the previous head |
161 | * of the hash chain (the most recent string with same hash key). Return | 161 | * of the hash chain (the most recent string with same hash key). Return |
162 | * the previous length of the hash chain. | 162 | * the previous length of the hash chain. |
163 | * If this file is compiled with -DFASTEST, the compression level is forced | ||
164 | * to 1, and no hash chains are maintained. | ||
163 | * IN assertion: all calls to to INSERT_STRING are made with consecutive | 165 | * IN assertion: all calls to to INSERT_STRING are made with consecutive |
164 | * input characters and the first MIN_MATCH bytes of str are valid | 166 | * input characters and the first MIN_MATCH bytes of str are valid |
165 | * (except for the last MIN_MATCH-1 bytes of the input file). | 167 | * (except for the last MIN_MATCH-1 bytes of the input file). |
166 | */ | 168 | */ |
169 | #ifdef FASTEST | ||
170 | #define INSERT_STRING(s, str, match_head) \ | ||
171 | (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ | ||
172 | match_head = s->head[s->ins_h], \ | ||
173 | s->head[s->ins_h] = (Pos)(str)) | ||
174 | #else | ||
167 | #define INSERT_STRING(s, str, match_head) \ | 175 | #define INSERT_STRING(s, str, match_head) \ |
168 | (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ | 176 | (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ |
169 | s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \ | 177 | s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \ |
170 | s->head[s->ins_h] = (Pos)(str)) | 178 | s->head[s->ins_h] = (Pos)(str)) |
179 | #endif | ||
171 | 180 | ||
172 | /* =========================================================================== | 181 | /* =========================================================================== |
173 | * Initialize the hash table (avoiding 64K overflow for 16 bit systems). | 182 | * Initialize the hash table (avoiding 64K overflow for 16 bit systems). |
@@ -224,6 +233,9 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, | |||
224 | if (strm->zfree == Z_NULL) strm->zfree = zcfree; | 233 | if (strm->zfree == Z_NULL) strm->zfree = zcfree; |
225 | 234 | ||
226 | if (level == Z_DEFAULT_COMPRESSION) level = 6; | 235 | if (level == Z_DEFAULT_COMPRESSION) level = 6; |
236 | #ifdef FASTEST | ||
237 | level = 1; | ||
238 | #endif | ||
227 | 239 | ||
228 | if (windowBits < 0) { /* undocumented feature: suppress zlib header */ | 240 | if (windowBits < 0) { /* undocumented feature: suppress zlib header */ |
229 | noheader = 1; | 241 | noheader = 1; |
@@ -708,6 +720,7 @@ local void lm_init (s) | |||
708 | /* For 80x86 and 680x0, an optimized version will be provided in match.asm or | 720 | /* For 80x86 and 680x0, an optimized version will be provided in match.asm or |
709 | * match.S. The code will be functionally equivalent. | 721 | * match.S. The code will be functionally equivalent. |
710 | */ | 722 | */ |
723 | #ifndef FASTEST | ||
711 | local uInt longest_match(s, cur_match) | 724 | local uInt longest_match(s, cur_match) |
712 | deflate_state *s; | 725 | deflate_state *s; |
713 | IPos cur_match; /* current match */ | 726 | IPos cur_match; /* current match */ |
@@ -845,6 +858,64 @@ local uInt longest_match(s, cur_match) | |||
845 | if ((uInt)best_len <= s->lookahead) return (uInt)best_len; | 858 | if ((uInt)best_len <= s->lookahead) return (uInt)best_len; |
846 | return s->lookahead; | 859 | return s->lookahead; |
847 | } | 860 | } |
861 | |||
862 | #else /* FASTEST */ | ||
863 | /* --------------------------------------------------------------------------- | ||
864 | * Optimized version for level == 1 only | ||
865 | */ | ||
866 | local uInt longest_match(s, cur_match) | ||
867 | deflate_state *s; | ||
868 | IPos cur_match; /* current match */ | ||
869 | { | ||
870 | register Bytef *scan = s->window + s->strstart; /* current string */ | ||
871 | register Bytef *match; /* matched string */ | ||
872 | register int len; /* length of current match */ | ||
873 | register Bytef *strend = s->window + s->strstart + MAX_MATCH; | ||
874 | |||
875 | /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. | ||
876 | * It is easy to get rid of this optimization if necessary. | ||
877 | */ | ||
878 | Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); | ||
879 | |||
880 | Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); | ||
881 | |||
882 | Assert(cur_match < s->strstart, "no future"); | ||
883 | |||
884 | match = s->window + cur_match; | ||
885 | |||
886 | /* Return failure if the match length is less than 2: | ||
887 | */ | ||
888 | if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; | ||
889 | |||
890 | /* The check at best_len-1 can be removed because it will be made | ||
891 | * again later. (This heuristic is not always a win.) | ||
892 | * It is not necessary to compare scan[2] and match[2] since they | ||
893 | * are always equal when the other bytes match, given that | ||
894 | * the hash keys are equal and that HASH_BITS >= 8. | ||
895 | */ | ||
896 | scan += 2, match += 2; | ||
897 | Assert(*scan == *match, "match[2]?"); | ||
898 | |||
899 | /* We check for insufficient lookahead only every 8th comparison; | ||
900 | * the 256th check will be made at strstart+258. | ||
901 | */ | ||
902 | do { | ||
903 | } while (*++scan == *++match && *++scan == *++match && | ||
904 | *++scan == *++match && *++scan == *++match && | ||
905 | *++scan == *++match && *++scan == *++match && | ||
906 | *++scan == *++match && *++scan == *++match && | ||
907 | scan < strend); | ||
908 | |||
909 | Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); | ||
910 | |||
911 | len = MAX_MATCH - (int)(strend - scan); | ||
912 | |||
913 | if (len < MIN_MATCH) return MIN_MATCH - 1; | ||
914 | |||
915 | s->match_start = cur_match; | ||
916 | return len <= s->lookahead ? len : s->lookahead; | ||
917 | } | ||
918 | #endif /* FASTEST */ | ||
848 | #endif /* ASMV */ | 919 | #endif /* ASMV */ |
849 | 920 | ||
850 | #ifdef DEBUG | 921 | #ifdef DEBUG |
@@ -930,6 +1001,7 @@ local void fill_window(s) | |||
930 | } while (--n); | 1001 | } while (--n); |
931 | 1002 | ||
932 | n = wsize; | 1003 | n = wsize; |
1004 | #ifndef FASTEST | ||
933 | p = &s->prev[n]; | 1005 | p = &s->prev[n]; |
934 | do { | 1006 | do { |
935 | m = *--p; | 1007 | m = *--p; |
@@ -938,6 +1010,7 @@ local void fill_window(s) | |||
938 | * its value will never be used. | 1010 | * its value will never be used. |
939 | */ | 1011 | */ |
940 | } while (--n); | 1012 | } while (--n); |
1013 | #endif | ||
941 | more += wsize; | 1014 | more += wsize; |
942 | } | 1015 | } |
943 | if (s->strm->avail_in == 0) return; | 1016 | if (s->strm->avail_in == 0) return; |
@@ -1105,14 +1178,15 @@ local block_state deflate_fast(s, flush) | |||
1105 | if (s->match_length >= MIN_MATCH) { | 1178 | if (s->match_length >= MIN_MATCH) { |
1106 | check_match(s, s->strstart, s->match_start, s->match_length); | 1179 | check_match(s, s->strstart, s->match_start, s->match_length); |
1107 | 1180 | ||
1108 | bflush = _tr_tally(s, s->strstart - s->match_start, | 1181 | _tr_tally_dist(s, s->strstart - s->match_start, |
1109 | s->match_length - MIN_MATCH); | 1182 | s->match_length - MIN_MATCH, bflush); |
1110 | 1183 | ||
1111 | s->lookahead -= s->match_length; | 1184 | s->lookahead -= s->match_length; |
1112 | 1185 | ||
1113 | /* Insert new strings in the hash table only if the match length | 1186 | /* Insert new strings in the hash table only if the match length |
1114 | * is not too large. This saves time but degrades compression. | 1187 | * is not too large. This saves time but degrades compression. |
1115 | */ | 1188 | */ |
1189 | #ifndef FASTEST | ||
1116 | if (s->match_length <= s->max_insert_length && | 1190 | if (s->match_length <= s->max_insert_length && |
1117 | s->lookahead >= MIN_MATCH) { | 1191 | s->lookahead >= MIN_MATCH) { |
1118 | s->match_length--; /* string at strstart already in hash table */ | 1192 | s->match_length--; /* string at strstart already in hash table */ |
@@ -1124,7 +1198,9 @@ local block_state deflate_fast(s, flush) | |||
1124 | */ | 1198 | */ |
1125 | } while (--s->match_length != 0); | 1199 | } while (--s->match_length != 0); |
1126 | s->strstart++; | 1200 | s->strstart++; |
1127 | } else { | 1201 | } else |
1202 | #endif | ||
1203 | { | ||
1128 | s->strstart += s->match_length; | 1204 | s->strstart += s->match_length; |
1129 | s->match_length = 0; | 1205 | s->match_length = 0; |
1130 | s->ins_h = s->window[s->strstart]; | 1206 | s->ins_h = s->window[s->strstart]; |
@@ -1139,7 +1215,7 @@ local block_state deflate_fast(s, flush) | |||
1139 | } else { | 1215 | } else { |
1140 | /* No match, output a literal byte */ | 1216 | /* No match, output a literal byte */ |
1141 | Tracevv((stderr,"%c", s->window[s->strstart])); | 1217 | Tracevv((stderr,"%c", s->window[s->strstart])); |
1142 | bflush = _tr_tally (s, 0, s->window[s->strstart]); | 1218 | _tr_tally_lit (s, s->window[s->strstart], bflush); |
1143 | s->lookahead--; | 1219 | s->lookahead--; |
1144 | s->strstart++; | 1220 | s->strstart++; |
1145 | } | 1221 | } |
@@ -1219,7 +1295,7 @@ local block_state deflate_slow(s, flush) | |||
1219 | check_match(s, s->strstart-1, s->prev_match, s->prev_length); | 1295 | check_match(s, s->strstart-1, s->prev_match, s->prev_length); |
1220 | 1296 | ||
1221 | bflush = _tr_tally(s, s->strstart -1 - s->prev_match, | 1297 | bflush = _tr_tally(s, s->strstart -1 - s->prev_match, |
1222 | s->prev_length - MIN_MATCH); | 1298 | s->prev_length - MIN_MATCH); |
1223 | 1299 | ||
1224 | /* Insert in hash table all strings up to the end of the match. | 1300 | /* Insert in hash table all strings up to the end of the match. |
1225 | * strstart-1 and strstart are already inserted. If there is not | 1301 | * strstart-1 and strstart are already inserted. If there is not |
@@ -1245,7 +1321,8 @@ local block_state deflate_slow(s, flush) | |||
1245 | * is longer, truncate the previous match to a single literal. | 1321 | * is longer, truncate the previous match to a single literal. |
1246 | */ | 1322 | */ |
1247 | Tracevv((stderr,"%c", s->window[s->strstart-1])); | 1323 | Tracevv((stderr,"%c", s->window[s->strstart-1])); |
1248 | if (_tr_tally (s, 0, s->window[s->strstart-1])) { | 1324 | _tr_tally_lit(s, s->window[s->strstart-1], bflush); |
1325 | if (bflush) { | ||
1249 | FLUSH_BLOCK_ONLY(s, 0); | 1326 | FLUSH_BLOCK_ONLY(s, 0); |
1250 | } | 1327 | } |
1251 | s->strstart++; | 1328 | s->strstart++; |
@@ -1263,7 +1340,7 @@ local block_state deflate_slow(s, flush) | |||
1263 | Assert (flush != Z_NO_FLUSH, "no flush?"); | 1340 | Assert (flush != Z_NO_FLUSH, "no flush?"); |
1264 | if (s->match_available) { | 1341 | if (s->match_available) { |
1265 | Tracevv((stderr,"%c", s->window[s->strstart-1])); | 1342 | Tracevv((stderr,"%c", s->window[s->strstart-1])); |
1266 | _tr_tally (s, 0, s->window[s->strstart-1]); | 1343 | _tr_tally_lit(s, s->window[s->strstart-1], bflush); |
1267 | s->match_available = 0; | 1344 | s->match_available = 0; |
1268 | } | 1345 | } |
1269 | FLUSH_BLOCK(s, flush == Z_FINISH); | 1346 | FLUSH_BLOCK(s, flush == Z_FINISH); |
@@ -273,4 +273,46 @@ ulg _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, | |||
273 | void _tr_align OF((deflate_state *s)); | 273 | void _tr_align OF((deflate_state *s)); |
274 | void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, | 274 | void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, |
275 | int eof)); | 275 | int eof)); |
276 | |||
277 | #define d_code(dist) \ | ||
278 | ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) | ||
279 | /* Mapping from a distance to a distance code. dist is the distance - 1 and | ||
280 | * must not have side effects. _dist_code[256] and _dist_code[257] are never | ||
281 | * used. | ||
282 | */ | ||
283 | |||
284 | #ifndef DEBUG | ||
285 | /* Inline versions of _tr_tally for speed: */ | ||
286 | |||
287 | #if defined(GEN_TREES_H) || !defined(STDC) | ||
288 | extern uch _length_code[]; | ||
289 | extern uch _dist_code[]; | ||
290 | #else | ||
291 | extern const uch _length_code[]; | ||
292 | extern const uch _dist_code[]; | ||
293 | #endif | ||
294 | |||
295 | # define _tr_tally_lit(s, c, flush) \ | ||
296 | { uch cc = (c); \ | ||
297 | s->d_buf[s->last_lit] = 0; \ | ||
298 | s->l_buf[s->last_lit++] = cc; \ | ||
299 | s->dyn_ltree[cc].Freq++; \ | ||
300 | flush = (s->last_lit == s->lit_bufsize-1); \ | ||
301 | } | ||
302 | # define _tr_tally_dist(s, distance, length, flush) \ | ||
303 | { uch len = (length); \ | ||
304 | ush dist = (distance); \ | ||
305 | s->d_buf[s->last_lit] = dist; \ | ||
306 | s->l_buf[s->last_lit++] = len; \ | ||
307 | dist--; \ | ||
308 | s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ | ||
309 | s->dyn_dtree[d_code(dist)].Freq++; \ | ||
310 | flush = (s->last_lit == s->lit_bufsize-1); \ | ||
311 | } | ||
312 | #else | ||
313 | # define _tr_tally_lit(s, c, flush) _tr_tally(s, 0, c, flush) | ||
314 | # define _tr_tally_dist(s, distance, length, flush) \ | ||
315 | _tr_tally(s, distance, length, flush) | ||
316 | #endif | ||
317 | |||
276 | #endif | 318 | #endif |
@@ -13,7 +13,8 @@ | |||
13 | 13 | ||
14 | struct internal_state {int dummy;}; /* for buggy compilers */ | 14 | struct internal_state {int dummy;}; /* for buggy compilers */ |
15 | 15 | ||
16 | #define Z_BUFSIZE 4096 | 16 | #define Z_BUFSIZE 16384 |
17 | #define Z_PRINTF_BUFSIZE 4096 | ||
17 | 18 | ||
18 | #define ALLOC(size) malloc(size) | 19 | #define ALLOC(size) malloc(size) |
19 | #define TRYFREE(p) {if (p) free(p);} | 20 | #define TRYFREE(p) {if (p) free(p);} |
@@ -506,7 +507,7 @@ int ZEXPORT gzwrite (file, buf, len) | |||
506 | 507 | ||
507 | int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) | 508 | int ZEXPORTVA gzprintf (gzFile file, const char *format, /* args */ ...) |
508 | { | 509 | { |
509 | char buf[Z_BUFSIZE]; | 510 | char buf[Z_PRINTF_BUFSIZE]; |
510 | va_list va; | 511 | va_list va; |
511 | int len; | 512 | int len; |
512 | 513 | ||
@@ -531,7 +532,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, | |||
531 | int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, | 532 | int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, |
532 | a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; | 533 | a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; |
533 | { | 534 | { |
534 | char buf[Z_BUFSIZE]; | 535 | char buf[Z_PRINTF_BUFSIZE]; |
535 | int len; | 536 | int len; |
536 | 537 | ||
537 | #ifdef HAS_snprintf | 538 | #ifdef HAS_snprintf |
@@ -229,6 +229,7 @@ int f; | |||
229 | r = f; | 229 | r = f; |
230 | if (r != Z_STREAM_END) | 230 | if (r != Z_STREAM_END) |
231 | return r; | 231 | return r; |
232 | r = f; | ||
232 | inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); | 233 | inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); |
233 | if (z->state->nowrap) | 234 | if (z->state->nowrap) |
234 | { | 235 | { |
@@ -322,7 +323,8 @@ z_streamp z; | |||
322 | /* search */ | 323 | /* search */ |
323 | while (n && m < 4) | 324 | while (n && m < 4) |
324 | { | 325 | { |
325 | if (*p == (Byte)(m < 2 ? 0 : (Byte)0xff)) | 326 | static const Byte mark[4] = {0, 0, 0xff, 0xff}; |
327 | if (*p == mark[m]) | ||
326 | m++; | 328 | m++; |
327 | else if (*p) | 329 | else if (*p) |
328 | m = 0; | 330 | m = 0; |
@@ -7,7 +7,7 @@ | |||
7 | #include "inftrees.h" | 7 | #include "inftrees.h" |
8 | 8 | ||
9 | const char inflate_copyright[] = | 9 | const char inflate_copyright[] = |
10 | " inflate 1.0.9 Copyright 1995-1998 Mark Adler "; | 10 | " inflate 1.1.0 Copyright 1995-1998 Mark Adler "; |
11 | /* | 11 | /* |
12 | If you use the zlib library in a product, an acknowledgment is welcome | 12 | If you use the zlib library in a product, an acknowledgment is welcome |
13 | in the documentation of your product. If for some reason you cannot | 13 | in the documentation of your product. If for some reason you cannot |
@@ -25,6 +25,11 @@ | |||
25 | extern void exit OF((int)); | 25 | extern void exit OF((int)); |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | #ifdef USE_MMAP | ||
29 | # include <sys/types.h> | ||
30 | # include <sys/mman.h> | ||
31 | # include <sys/stat.h> | ||
32 | #endif | ||
28 | 33 | ||
29 | #if defined(MSDOS) || defined(OS2) || defined(WIN32) | 34 | #if defined(MSDOS) || defined(OS2) || defined(WIN32) |
30 | # include <fcntl.h> | 35 | # include <fcntl.h> |
@@ -53,7 +58,7 @@ | |||
53 | #endif | 58 | #endif |
54 | #define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) | 59 | #define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) |
55 | 60 | ||
56 | #define BUFLEN 4096 | 61 | #define BUFLEN 16384 |
57 | #define MAX_NAME_LEN 1024 | 62 | #define MAX_NAME_LEN 1024 |
58 | 63 | ||
59 | #ifdef MAXSEG_64K | 64 | #ifdef MAXSEG_64K |
@@ -65,12 +70,15 @@ | |||
65 | 70 | ||
66 | char *prog; | 71 | char *prog; |
67 | 72 | ||
68 | void error OF((const char *msg)); | 73 | void error OF((const char *msg)); |
69 | void gz_compress OF((FILE *in, gzFile out)); | 74 | void gz_compress OF((FILE *in, gzFile out)); |
70 | void gz_uncompress OF((gzFile in, FILE *out)); | 75 | #ifdef USE_MMAP |
71 | void file_compress OF((char *file, char *mode)); | 76 | int gz_compress_mmap OF((FILE *in, gzFile out)); |
72 | void file_uncompress OF((char *file)); | 77 | #endif |
73 | int main OF((int argc, char *argv[])); | 78 | void gz_uncompress OF((gzFile in, FILE *out)); |
79 | void file_compress OF((char *file, char *mode)); | ||
80 | void file_uncompress OF((char *file)); | ||
81 | int main OF((int argc, char *argv[])); | ||
74 | 82 | ||
75 | /* =========================================================================== | 83 | /* =========================================================================== |
76 | * Display error message and exit | 84 | * Display error message and exit |
@@ -85,6 +93,7 @@ void error(msg) | |||
85 | /* =========================================================================== | 93 | /* =========================================================================== |
86 | * Compress input to output then close both files. | 94 | * Compress input to output then close both files. |
87 | */ | 95 | */ |
96 | |||
88 | void gz_compress(in, out) | 97 | void gz_compress(in, out) |
89 | FILE *in; | 98 | FILE *in; |
90 | gzFile out; | 99 | gzFile out; |
@@ -93,6 +102,12 @@ void gz_compress(in, out) | |||
93 | int len; | 102 | int len; |
94 | int err; | 103 | int err; |
95 | 104 | ||
105 | #ifdef USE_MMAP | ||
106 | /* Try first compressing with mmap. If mmap fails (minigzip used in a | ||
107 | * pipe), use the normal fread loop. | ||
108 | */ | ||
109 | if (gz_compress_mmap(in, out) == Z_OK) return; | ||
110 | #endif | ||
96 | for (;;) { | 111 | for (;;) { |
97 | len = fread(buf, 1, sizeof(buf), in); | 112 | len = fread(buf, 1, sizeof(buf), in); |
98 | if (ferror(in)) { | 113 | if (ferror(in)) { |
@@ -107,6 +122,43 @@ void gz_compress(in, out) | |||
107 | if (gzclose(out) != Z_OK) error("failed gzclose"); | 122 | if (gzclose(out) != Z_OK) error("failed gzclose"); |
108 | } | 123 | } |
109 | 124 | ||
125 | #ifdef USE_MMAP /* MMAP version, Miguel Albrecht <malbrech@eso.org> */ | ||
126 | |||
127 | /* Try compressing the input file at once using mmap. Return Z_OK if | ||
128 | * if success, Z_ERRNO otherwise. | ||
129 | */ | ||
130 | int gz_compress_mmap(in, out) | ||
131 | FILE *in; | ||
132 | gzFile out; | ||
133 | { | ||
134 | int len; | ||
135 | int err; | ||
136 | int ifd = fileno(in); | ||
137 | caddr_t buf; /* mmap'ed buffer for the entire input file */ | ||
138 | off_t buf_len; /* length of the input file */ | ||
139 | struct stat sb; | ||
140 | |||
141 | /* Determine the size of the file, needed for mmap: */ | ||
142 | if (fstat(ifd, &sb) < 0) return Z_ERRNO; | ||
143 | buf_len = sb.st_size; | ||
144 | if (buf_len <= 0) return Z_ERRNO; | ||
145 | |||
146 | /* Now do the actual mmap: */ | ||
147 | buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0); | ||
148 | if (buf == (caddr_t)(-1)) return Z_ERRNO; | ||
149 | |||
150 | /* Compress the whole file at once: */ | ||
151 | len = gzwrite(out, (char *)buf, (unsigned)buf_len); | ||
152 | |||
153 | if (len != (int)buf_len) error(gzerror(out, &err)); | ||
154 | |||
155 | munmap(buf, buf_len); | ||
156 | fclose(in); | ||
157 | if (gzclose(out) != Z_OK) error("failed gzclose"); | ||
158 | return Z_OK; | ||
159 | } | ||
160 | #endif /* USE_MMAP */ | ||
161 | |||
110 | /* =========================================================================== | 162 | /* =========================================================================== |
111 | * Uncompress input to output then close both files. | 163 | * Uncompress input to output then close both files. |
112 | */ | 164 | */ |
diff --git a/msdos/zlib.def b/msdos/zlib.def index 89e626c..2372ab1 100644 --- a/msdos/zlib.def +++ b/msdos/zlib.def | |||
@@ -8,7 +8,7 @@ SUBSYSTEM WINDOWS | |||
8 | 8 | ||
9 | STUB 'WINSTUB.EXE' | 9 | STUB 'WINSTUB.EXE' |
10 | 10 | ||
11 | VERSION 1.09 | 11 | VERSION 1.1 |
12 | 12 | ||
13 | CODE EXECUTE READ | 13 | CODE EXECUTE READ |
14 | 14 | ||
diff --git a/msdos/zlib.rc b/msdos/zlib.rc index 86690ec..76e0ec2 100644 --- a/msdos/zlib.rc +++ b/msdos/zlib.rc | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | #define IDR_VERSION1 1 | 3 | #define IDR_VERSION1 1 |
4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE | 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
5 | FILEVERSION 1,0,9,0 | 5 | FILEVERSION 1,1,0,0 |
6 | PRODUCTVERSION 1,0,9,0 | 6 | PRODUCTVERSION 1,1,0,0 |
7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK | 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
8 | FILEFLAGS 0 | 8 | FILEFLAGS 0 |
9 | FILEOS VOS_DOS_WINDOWS32 | 9 | FILEOS VOS_DOS_WINDOWS32 |
@@ -17,7 +17,7 @@ BEGIN | |||
17 | 17 | ||
18 | BEGIN | 18 | BEGIN |
19 | VALUE "FileDescription", "zlib data compression library\0" | 19 | VALUE "FileDescription", "zlib data compression library\0" |
20 | VALUE "FileVersion", "1.0.9\0" | 20 | VALUE "FileVersion", "1.1.0\0" |
21 | VALUE "InternalName", "zlib\0" | 21 | VALUE "InternalName", "zlib\0" |
22 | VALUE "OriginalFilename", "zlib.dll\0" | 22 | VALUE "OriginalFilename", "zlib.dll\0" |
23 | VALUE "ProductName", "ZLib.DLL\0" | 23 | VALUE "ProductName", "ZLib.DLL\0" |
@@ -99,13 +99,13 @@ local ct_data static_dtree[D_CODES]; | |||
99 | * 5 bits.) | 99 | * 5 bits.) |
100 | */ | 100 | */ |
101 | 101 | ||
102 | local uch dist_code[DIST_CODE_LEN]; | 102 | uch _dist_code[DIST_CODE_LEN]; |
103 | /* Distance codes. The first 256 values correspond to the distances | 103 | /* Distance codes. The first 256 values correspond to the distances |
104 | * 3 .. 258, the last 256 values correspond to the top 8 bits of | 104 | * 3 .. 258, the last 256 values correspond to the top 8 bits of |
105 | * the 15 bit distances. | 105 | * the 15 bit distances. |
106 | */ | 106 | */ |
107 | 107 | ||
108 | local uch length_code[MAX_MATCH-MIN_MATCH+1]; | 108 | uch _length_code[MAX_MATCH-MIN_MATCH+1]; |
109 | /* length code for each normalized match length (0 == MIN_MATCH) */ | 109 | /* length code for each normalized match length (0 == MIN_MATCH) */ |
110 | 110 | ||
111 | local int base_length[LENGTH_CODES]; | 111 | local int base_length[LENGTH_CODES]; |
@@ -173,13 +173,6 @@ local void gen_trees_header OF((void)); | |||
173 | send_bits(s, tree[c].Code, tree[c].Len); } | 173 | send_bits(s, tree[c].Code, tree[c].Len); } |
174 | #endif | 174 | #endif |
175 | 175 | ||
176 | #define d_code(dist) \ | ||
177 | ((dist) < 256 ? dist_code[dist] : dist_code[256+((dist)>>7)]) | ||
178 | /* Mapping from a distance to a distance code. dist is the distance - 1 and | ||
179 | * must not have side effects. dist_code[256] and dist_code[257] are never | ||
180 | * used. | ||
181 | */ | ||
182 | |||
183 | /* =========================================================================== | 176 | /* =========================================================================== |
184 | * Output a short LSB first on the stream. | 177 | * Output a short LSB first on the stream. |
185 | * IN assertion: there is enough room in pendingBuf. | 178 | * IN assertion: there is enough room in pendingBuf. |
@@ -262,7 +255,7 @@ local void tr_static_init() | |||
262 | for (code = 0; code < LENGTH_CODES-1; code++) { | 255 | for (code = 0; code < LENGTH_CODES-1; code++) { |
263 | base_length[code] = length; | 256 | base_length[code] = length; |
264 | for (n = 0; n < (1<<extra_lbits[code]); n++) { | 257 | for (n = 0; n < (1<<extra_lbits[code]); n++) { |
265 | length_code[length++] = (uch)code; | 258 | _length_code[length++] = (uch)code; |
266 | } | 259 | } |
267 | } | 260 | } |
268 | Assert (length == 256, "tr_static_init: length != 256"); | 261 | Assert (length == 256, "tr_static_init: length != 256"); |
@@ -270,14 +263,14 @@ local void tr_static_init() | |||
270 | * in two different ways: code 284 + 5 bits or code 285, so we | 263 | * in two different ways: code 284 + 5 bits or code 285, so we |
271 | * overwrite length_code[255] to use the best encoding: | 264 | * overwrite length_code[255] to use the best encoding: |
272 | */ | 265 | */ |
273 | length_code[length-1] = (uch)code; | 266 | _length_code[length-1] = (uch)code; |
274 | 267 | ||
275 | /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ | 268 | /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ |
276 | dist = 0; | 269 | dist = 0; |
277 | for (code = 0 ; code < 16; code++) { | 270 | for (code = 0 ; code < 16; code++) { |
278 | base_dist[code] = dist; | 271 | base_dist[code] = dist; |
279 | for (n = 0; n < (1<<extra_dbits[code]); n++) { | 272 | for (n = 0; n < (1<<extra_dbits[code]); n++) { |
280 | dist_code[dist++] = (uch)code; | 273 | _dist_code[dist++] = (uch)code; |
281 | } | 274 | } |
282 | } | 275 | } |
283 | Assert (dist == 256, "tr_static_init: dist != 256"); | 276 | Assert (dist == 256, "tr_static_init: dist != 256"); |
@@ -285,7 +278,7 @@ local void tr_static_init() | |||
285 | for ( ; code < D_CODES; code++) { | 278 | for ( ; code < D_CODES; code++) { |
286 | base_dist[code] = dist << 7; | 279 | base_dist[code] = dist << 7; |
287 | for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { | 280 | for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { |
288 | dist_code[256 + dist++] = (uch)code; | 281 | _dist_code[256 + dist++] = (uch)code; |
289 | } | 282 | } |
290 | } | 283 | } |
291 | Assert (dist == 256, "tr_static_init: 256+dist != 512"); | 284 | Assert (dist == 256, "tr_static_init: 256+dist != 512"); |
@@ -349,15 +342,15 @@ void gen_trees_header() | |||
349 | static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); | 342 | static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); |
350 | } | 343 | } |
351 | 344 | ||
352 | fprintf(header, "local const uch dist_code[DIST_CODE_LEN] = {\n"); | 345 | fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); |
353 | for (i = 0; i < DIST_CODE_LEN; i++) { | 346 | for (i = 0; i < DIST_CODE_LEN; i++) { |
354 | fprintf(header, "%2u%s", dist_code[i], | 347 | fprintf(header, "%2u%s", _dist_code[i], |
355 | SEPARATOR(i, DIST_CODE_LEN-1, 20)); | 348 | SEPARATOR(i, DIST_CODE_LEN-1, 20)); |
356 | } | 349 | } |
357 | 350 | ||
358 | fprintf(header, "local const uch length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); | 351 | fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); |
359 | for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { | 352 | for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { |
360 | fprintf(header, "%2u%s", length_code[i], | 353 | fprintf(header, "%2u%s", _length_code[i], |
361 | SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); | 354 | SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); |
362 | } | 355 | } |
363 | 356 | ||
@@ -1045,7 +1038,7 @@ int _tr_tally (s, dist, lc) | |||
1045 | (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && | 1038 | (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && |
1046 | (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); | 1039 | (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); |
1047 | 1040 | ||
1048 | s->dyn_ltree[length_code[lc]+LITERALS+1].Freq++; | 1041 | s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; |
1049 | s->dyn_dtree[d_code(dist)].Freq++; | 1042 | s->dyn_dtree[d_code(dist)].Freq++; |
1050 | } | 1043 | } |
1051 | 1044 | ||
@@ -1094,7 +1087,7 @@ local void compress_block(s, ltree, dtree) | |||
1094 | Tracecv(isgraph(lc), (stderr," '%c' ", lc)); | 1087 | Tracecv(isgraph(lc), (stderr," '%c' ", lc)); |
1095 | } else { | 1088 | } else { |
1096 | /* Here, lc is the match length - MIN_MATCH */ | 1089 | /* Here, lc is the match length - MIN_MATCH */ |
1097 | code = length_code[lc]; | 1090 | code = _length_code[lc]; |
1098 | send_code(s, code+LITERALS+1, ltree); /* send the length code */ | 1091 | send_code(s, code+LITERALS+1, ltree); /* send the length code */ |
1099 | extra = extra_lbits[code]; | 1092 | extra = extra_lbits[code]; |
1100 | if (extra != 0) { | 1093 | if (extra != 0) { |
@@ -70,7 +70,7 @@ local const ct_data static_dtree[D_CODES] = { | |||
70 | {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} | 70 | {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} |
71 | }; | 71 | }; |
72 | 72 | ||
73 | local const uch dist_code[DIST_CODE_LEN] = { | 73 | const uch _dist_code[DIST_CODE_LEN] = { |
74 | 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, | 74 | 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, |
75 | 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, | 75 | 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, |
76 | 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, | 76 | 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, |
@@ -99,7 +99,7 @@ local const uch dist_code[DIST_CODE_LEN] = { | |||
99 | 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 | 99 | 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 |
100 | }; | 100 | }; |
101 | 101 | ||
102 | local const uch length_code[MAX_MATCH-MIN_MATCH+1]= { | 102 | const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { |
103 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, | 103 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, |
104 | 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, | 104 | 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, |
105 | 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, | 105 | 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, |
@@ -1,4 +1,4 @@ | |||
1 | .TH ZLIB 3 "16 February 1998" | 1 | .TH ZLIB 3 "24 February 1998" |
2 | .SH NAME | 2 | .SH NAME |
3 | zlib \- compression/decompression library | 3 | zlib \- compression/decompression library |
4 | .SH SYNOPSIS | 4 | .SH SYNOPSIS |
@@ -81,7 +81,7 @@ These documents are also available in other formats from: | |||
81 | .IP | 81 | .IP |
82 | ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html | 82 | ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html |
83 | .SH AUTHORS | 83 | .SH AUTHORS |
84 | Version 1.0.9. | 84 | Version 1.1.0 |
85 | Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org) | 85 | Copyright (C) 1995-1998 Jean-loup Gailly (jloup@gzip.org) |
86 | and Mark Adler (madler@alumni.caltech.edu). | 86 | and Mark Adler (madler@alumni.caltech.edu). |
87 | .LP | 87 | .LP |
@@ -1,5 +1,5 @@ | |||
1 | /* zlib.h -- interface of the 'zlib' general purpose compression library | 1 | /* zlib.h -- interface of the 'zlib' general purpose compression library |
2 | version 1.0.9, Feb 16th, 1998 | 2 | version 1.1.0, Feb 24th, 1998 |
3 | 3 | ||
4 | Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler | 4 | Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler |
5 | 5 | ||
@@ -37,7 +37,7 @@ extern "C" { | |||
37 | 37 | ||
38 | #include "zconf.h" | 38 | #include "zconf.h" |
39 | 39 | ||
40 | #define ZLIB_VERSION "1.0.9" | 40 | #define ZLIB_VERSION "1.1.0" |
41 | 41 | ||
42 | /* | 42 | /* |
43 | The 'zlib' compression library provides in-memory compression and | 43 | The 'zlib' compression library provides in-memory compression and |