diff options
| -rw-r--r-- | as400/bndsrc | 1 | ||||
| -rw-r--r-- | as400/zlib.inc | 4 | ||||
| -rw-r--r-- | contrib/vstudio/vc10/zlibvc.def | 1 | ||||
| -rw-r--r-- | contrib/vstudio/vc9/zlibvc.def | 1 | ||||
| -rw-r--r-- | deflate.c | 90 | ||||
| -rw-r--r-- | inflate.c | 27 | ||||
| -rw-r--r-- | win32/zlib.def | 1 | ||||
| -rw-r--r-- | zconf.h | 1 | ||||
| -rw-r--r-- | zconf.h.cmakein | 1 | ||||
| -rw-r--r-- | zconf.h.in | 1 | ||||
| -rw-r--r-- | zlib.h | 27 | ||||
| -rw-r--r-- | zlib.map | 4 |
12 files changed, 109 insertions, 50 deletions
diff --git a/as400/bndsrc b/as400/bndsrc index 036cd63..3e26283 100644 --- a/as400/bndsrc +++ b/as400/bndsrc | |||
| @@ -33,6 +33,7 @@ STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB') | |||
| 33 | EXPORT SYMBOL("deflateSetDictionary") | 33 | EXPORT SYMBOL("deflateSetDictionary") |
| 34 | EXPORT SYMBOL("deflateCopy") | 34 | EXPORT SYMBOL("deflateCopy") |
| 35 | EXPORT SYMBOL("deflateReset") | 35 | EXPORT SYMBOL("deflateReset") |
| 36 | EXPORT SYMBOL("deflateResetKeep") | ||
| 36 | EXPORT SYMBOL("deflateParams") | 37 | EXPORT SYMBOL("deflateParams") |
| 37 | EXPORT SYMBOL("deflatePending") | 38 | EXPORT SYMBOL("deflatePending") |
| 38 | EXPORT SYMBOL("deflatePrime") | 39 | EXPORT SYMBOL("deflatePrime") |
diff --git a/as400/zlib.inc b/as400/zlib.inc index 976dca2..f0915c8 100644 --- a/as400/zlib.inc +++ b/as400/zlib.inc | |||
| @@ -435,6 +435,10 @@ | |||
| 435 | D PR 10I 0 extproc('inflateResetKeep') End and init. stream | 435 | D PR 10I 0 extproc('inflateResetKeep') End and init. stream |
| 436 | D strm like(z_stream) Expansion stream | 436 | D strm like(z_stream) Expansion stream |
| 437 | * | 437 | * |
| 438 | D deflateResetKeep... | ||
| 439 | D PR 10I 0 extproc('deflateResetKeep') End and init. stream | ||
| 440 | D strm like(z_stream) Expansion stream | ||
| 441 | * | ||
| 438 | D gzflags PR 10U 0 extproc('gzflags') | 442 | D gzflags PR 10U 0 extproc('gzflags') |
| 439 | * | 443 | * |
| 440 | /endif | 444 | /endif |
diff --git a/contrib/vstudio/vc10/zlibvc.def b/contrib/vstudio/vc10/zlibvc.def index d6ab1c1..5521885 100644 --- a/contrib/vstudio/vc10/zlibvc.def +++ b/contrib/vstudio/vc10/zlibvc.def | |||
| @@ -133,3 +133,4 @@ EXPORTS | |||
| 133 | gzgetc_ @30 | 133 | gzgetc_ @30 |
| 134 | gzflags @162 | 134 | gzflags @162 |
| 135 | inflateResetKeep @163 | 135 | inflateResetKeep @163 |
| 136 | deflateResetKeep @164 | ||
diff --git a/contrib/vstudio/vc9/zlibvc.def b/contrib/vstudio/vc9/zlibvc.def index d6ab1c1..5521885 100644 --- a/contrib/vstudio/vc9/zlibvc.def +++ b/contrib/vstudio/vc9/zlibvc.def | |||
| @@ -133,3 +133,4 @@ EXPORTS | |||
| 133 | gzgetc_ @30 | 133 | gzgetc_ @30 |
| 134 | gzflags @162 | 134 | gzflags @162 |
| 135 | inflateResetKeep @163 | 135 | inflateResetKeep @163 |
| 136 | deflateResetKeep @164 | ||
| @@ -323,43 +323,68 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) | |||
| 323 | uInt dictLength; | 323 | uInt dictLength; |
| 324 | { | 324 | { |
| 325 | deflate_state *s; | 325 | deflate_state *s; |
| 326 | uInt length = dictLength; | 326 | uInt str, n; |
| 327 | uInt n; | 327 | int wrap; |
| 328 | IPos hash_head = 0; | 328 | unsigned avail; |
| 329 | unsigned char *next; | ||
| 329 | 330 | ||
| 330 | if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || | 331 | if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL) |
| 331 | strm->state->wrap == 2 || | ||
| 332 | (strm->state->wrap == 1 && strm->state->status != INIT_STATE)) | ||
| 333 | return Z_STREAM_ERROR; | 332 | return Z_STREAM_ERROR; |
| 334 | |||
| 335 | s = strm->state; | 333 | s = strm->state; |
| 336 | if (s->wrap) | 334 | wrap = s->wrap; |
| 337 | strm->adler = adler32(strm->adler, dictionary, dictLength); | 335 | if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead) |
| 336 | return Z_STREAM_ERROR; | ||
| 338 | 337 | ||
| 339 | if (length < MIN_MATCH) return Z_OK; | 338 | /* when using zlib wrappers, compute Adler-32 for provided dictionary */ |
| 340 | if (length > s->w_size) { | 339 | if (wrap == 1) |
| 341 | length = s->w_size; | 340 | strm->adler = adler32(strm->adler, dictionary, dictLength); |
| 342 | dictionary += dictLength - length; /* use the tail of the dictionary */ | 341 | s->wrap = 0; /* avoid computing Adler-32 in read_buf */ |
| 342 | |||
| 343 | /* if dictionary would fill window, just replace the history */ | ||
| 344 | if (dictLength >= s->w_size) { | ||
| 345 | if (wrap == 0) { /* already empty otherwise */ | ||
| 346 | CLEAR_HASH(s); | ||
| 347 | s->strstart = 0; | ||
| 348 | s->block_start = 0L; | ||
| 349 | } | ||
| 350 | dictionary += dictLength - s->w_size; /* use the tail */ | ||
| 351 | dictLength = s->w_size; | ||
| 343 | } | 352 | } |
| 344 | zmemcpy(s->window, dictionary, length); | ||
| 345 | s->strstart = length; | ||
| 346 | s->block_start = (long)length; | ||
| 347 | 353 | ||
| 348 | /* Insert all strings in the hash table (except for the last two bytes). | 354 | /* insert dictionary into window and hash */ |
| 349 | * s->lookahead stays null, so s->ins_h will be recomputed at the next | 355 | avail = strm->avail_in; |
| 350 | * call of fill_window. | 356 | next = strm->next_in; |
| 351 | */ | 357 | strm->avail_in = dictLength; |
| 352 | s->ins_h = s->window[0]; | 358 | strm->next_in = (Bytef *)dictionary; |
| 353 | UPDATE_HASH(s, s->ins_h, s->window[1]); | 359 | fill_window(s); |
| 354 | for (n = 0; n <= length - MIN_MATCH; n++) { | 360 | while (s->lookahead >= MIN_MATCH) { |
| 355 | INSERT_STRING(s, n, hash_head); | 361 | str = s->strstart; |
| 362 | n = s->lookahead - (MIN_MATCH-1); | ||
| 363 | do { | ||
| 364 | UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); | ||
| 365 | #ifndef FASTEST | ||
| 366 | s->prev[str & s->w_mask] = s->head[s->ins_h]; | ||
| 367 | #endif | ||
| 368 | s->head[s->ins_h] = (Pos)str; | ||
| 369 | str++; | ||
| 370 | } while (--n); | ||
| 371 | s->strstart = str; | ||
| 372 | s->lookahead = MIN_MATCH-1; | ||
| 373 | fill_window(s); | ||
| 356 | } | 374 | } |
| 357 | if (hash_head) hash_head = 0; /* to make compiler happy */ | 375 | s->strstart += s->lookahead; |
| 376 | s->block_start = (long)s->strstart; | ||
| 377 | s->lookahead = 0; | ||
| 378 | s->match_length = s->prev_length = MIN_MATCH-1; | ||
| 379 | s->match_available = 0; | ||
| 380 | strm->next_in = next; | ||
| 381 | strm->avail_in = avail; | ||
| 382 | s->wrap = wrap; | ||
| 358 | return Z_OK; | 383 | return Z_OK; |
| 359 | } | 384 | } |
| 360 | 385 | ||
| 361 | /* ========================================================================= */ | 386 | /* ========================================================================= */ |
| 362 | int ZEXPORT deflateReset (strm) | 387 | int ZEXPORT deflateResetKeep (strm) |
| 363 | z_streamp strm; | 388 | z_streamp strm; |
| 364 | { | 389 | { |
| 365 | deflate_state *s; | 390 | deflate_state *s; |
| @@ -389,12 +414,23 @@ int ZEXPORT deflateReset (strm) | |||
| 389 | s->last_flush = Z_NO_FLUSH; | 414 | s->last_flush = Z_NO_FLUSH; |
| 390 | 415 | ||
| 391 | _tr_init(s); | 416 | _tr_init(s); |
| 392 | lm_init(s); | ||
| 393 | 417 | ||
| 394 | return Z_OK; | 418 | return Z_OK; |
| 395 | } | 419 | } |
| 396 | 420 | ||
| 397 | /* ========================================================================= */ | 421 | /* ========================================================================= */ |
| 422 | int ZEXPORT deflateReset (strm) | ||
| 423 | z_streamp strm; | ||
| 424 | { | ||
| 425 | int ret; | ||
| 426 | |||
| 427 | ret = deflateResetKeep(strm); | ||
| 428 | if (ret == Z_OK) | ||
| 429 | lm_init(strm->state); | ||
| 430 | return ret; | ||
| 431 | } | ||
| 432 | |||
| 433 | /* ========================================================================= */ | ||
| 398 | int ZEXPORT deflateSetHeader (strm, head) | 434 | int ZEXPORT deflateSetHeader (strm, head) |
| 399 | z_streamp strm; | 435 | z_streamp strm; |
| 400 | gz_headerp head; | 436 | gz_headerp head; |
| @@ -1232,7 +1232,7 @@ int flush; | |||
| 1232 | */ | 1232 | */ |
| 1233 | inf_leave: | 1233 | inf_leave: |
| 1234 | RESTORE(); | 1234 | RESTORE(); |
| 1235 | if (state->wsize || (state->mode < CHECK && out != strm->avail_out)) | 1235 | if (state->wsize || (state->mode < BAD && out != strm->avail_out)) |
| 1236 | if (updatewindow(strm, out)) { | 1236 | if (updatewindow(strm, out)) { |
| 1237 | state->mode = MEM; | 1237 | state->mode = MEM; |
| 1238 | return Z_MEM_ERROR; | 1238 | return Z_MEM_ERROR; |
| @@ -1274,6 +1274,9 @@ uInt dictLength; | |||
| 1274 | { | 1274 | { |
| 1275 | struct inflate_state FAR *state; | 1275 | struct inflate_state FAR *state; |
| 1276 | unsigned long id; | 1276 | unsigned long id; |
| 1277 | unsigned char *next; | ||
| 1278 | unsigned avail; | ||
| 1279 | int ret; | ||
| 1277 | 1280 | ||
| 1278 | /* check state */ | 1281 | /* check state */ |
| 1279 | if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; | 1282 | if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; |
| @@ -1289,21 +1292,19 @@ uInt dictLength; | |||
| 1289 | return Z_DATA_ERROR; | 1292 | return Z_DATA_ERROR; |
| 1290 | } | 1293 | } |
| 1291 | 1294 | ||
| 1292 | /* copy dictionary to window */ | 1295 | /* copy dictionary to window using updatewindow(), which will amend the |
| 1293 | if (updatewindow(strm, strm->avail_out)) { | 1296 | existing dictionary if appropriate */ |
| 1297 | next = strm->next_out; | ||
| 1298 | avail = strm->avail_out; | ||
| 1299 | strm->next_out = (Bytef *)dictionary + dictLength; | ||
| 1300 | strm->avail_out = 0; | ||
| 1301 | ret = updatewindow(strm, dictLength); | ||
| 1302 | strm->avail_out = avail; | ||
| 1303 | strm->next_out = next; | ||
| 1304 | if (ret) { | ||
| 1294 | state->mode = MEM; | 1305 | state->mode = MEM; |
| 1295 | return Z_MEM_ERROR; | 1306 | return Z_MEM_ERROR; |
| 1296 | } | 1307 | } |
| 1297 | if (dictLength > state->wsize) { | ||
| 1298 | zmemcpy(state->window, dictionary + dictLength - state->wsize, | ||
| 1299 | state->wsize); | ||
| 1300 | state->whave = state->wsize; | ||
| 1301 | } | ||
| 1302 | else { | ||
| 1303 | zmemcpy(state->window + state->wsize - dictLength, dictionary, | ||
| 1304 | dictLength); | ||
| 1305 | state->whave = dictLength; | ||
| 1306 | } | ||
| 1307 | state->havedict = 1; | 1308 | state->havedict = 1; |
| 1308 | Tracev((stderr, "inflate: dictionary set\n")); | 1309 | Tracev((stderr, "inflate: dictionary set\n")); |
| 1309 | return Z_OK; | 1310 | return Z_OK; |
diff --git a/win32/zlib.def b/win32/zlib.def index c420d8b..21bff1f 100644 --- a/win32/zlib.def +++ b/win32/zlib.def | |||
| @@ -78,5 +78,6 @@ EXPORTS | |||
| 78 | get_crc_table | 78 | get_crc_table |
| 79 | inflateUndermine | 79 | inflateUndermine |
| 80 | inflateResetKeep | 80 | inflateResetKeep |
| 81 | deflateResetKeep | ||
| 81 | gzgetc_ | 82 | gzgetc_ |
| 82 | gzflags | 83 | gzflags |
| @@ -46,6 +46,7 @@ | |||
| 46 | # define deflatePending z_deflatePending | 46 | # define deflatePending z_deflatePending |
| 47 | # define deflatePrime z_deflatePrime | 47 | # define deflatePrime z_deflatePrime |
| 48 | # define deflateReset z_deflateReset | 48 | # define deflateReset z_deflateReset |
| 49 | # define deflateResetKeep z_deflateResetKeep | ||
| 49 | # define deflateSetDictionary z_deflateSetDictionary | 50 | # define deflateSetDictionary z_deflateSetDictionary |
| 50 | # define deflateSetHeader z_deflateSetHeader | 51 | # define deflateSetHeader z_deflateSetHeader |
| 51 | # define deflateTune z_deflateTune | 52 | # define deflateTune z_deflateTune |
diff --git a/zconf.h.cmakein b/zconf.h.cmakein index b2d78b3..3ea5531 100644 --- a/zconf.h.cmakein +++ b/zconf.h.cmakein | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | # define deflatePending z_deflatePending | 48 | # define deflatePending z_deflatePending |
| 49 | # define deflatePrime z_deflatePrime | 49 | # define deflatePrime z_deflatePrime |
| 50 | # define deflateReset z_deflateReset | 50 | # define deflateReset z_deflateReset |
| 51 | # define deflateResetKeep z_deflateResetKeep | ||
| 51 | # define deflateSetDictionary z_deflateSetDictionary | 52 | # define deflateSetDictionary z_deflateSetDictionary |
| 52 | # define deflateSetHeader z_deflateSetHeader | 53 | # define deflateSetHeader z_deflateSetHeader |
| 53 | # define deflateTune z_deflateTune | 54 | # define deflateTune z_deflateTune |
| @@ -46,6 +46,7 @@ | |||
| 46 | # define deflatePending z_deflatePending | 46 | # define deflatePending z_deflatePending |
| 47 | # define deflatePrime z_deflatePrime | 47 | # define deflatePrime z_deflatePrime |
| 48 | # define deflateReset z_deflateReset | 48 | # define deflateReset z_deflateReset |
| 49 | # define deflateResetKeep z_deflateResetKeep | ||
| 49 | # define deflateSetDictionary z_deflateSetDictionary | 50 | # define deflateSetDictionary z_deflateSetDictionary |
| 50 | # define deflateSetHeader z_deflateSetHeader | 51 | # define deflateSetHeader z_deflateSetHeader |
| 51 | # define deflateTune z_deflateTune | 52 | # define deflateTune z_deflateTune |
| @@ -581,10 +581,15 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, | |||
| 581 | uInt dictLength)); | 581 | uInt dictLength)); |
| 582 | /* | 582 | /* |
| 583 | Initializes the compression dictionary from the given byte sequence | 583 | Initializes the compression dictionary from the given byte sequence |
| 584 | without producing any compressed output. This function must be called | 584 | without producing any compressed output. When using the zlib format, this |
| 585 | immediately after deflateInit, deflateInit2 or deflateReset, before any call | 585 | function must be called immediately after deflateInit, deflateInit2 or |
| 586 | of deflate. The compressor and decompressor must use exactly the same | 586 | deflateReset, and before any call of deflate. When doing raw deflate, this |
| 587 | dictionary (see inflateSetDictionary). | 587 | function must be called either before any call of deflate, or immediately |
| 588 | after the completion of a deflate block, i.e. after all input has been | ||
| 589 | consumed and all output has been delivered when using any of the flush | ||
| 590 | options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The | ||
| 591 | compressor and decompressor must use exactly the same dictionary (see | ||
| 592 | inflateSetDictionary). | ||
| 588 | 593 | ||
| 589 | The dictionary should consist of strings (byte sequences) that are likely | 594 | The dictionary should consist of strings (byte sequences) that are likely |
| 590 | to be encountered later in the data to be compressed, with the most commonly | 595 | to be encountered later in the data to be compressed, with the most commonly |
| @@ -611,8 +616,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, | |||
| 611 | deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a | 616 | deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a |
| 612 | parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is | 617 | parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is |
| 613 | inconsistent (for example if deflate has already been called for this stream | 618 | inconsistent (for example if deflate has already been called for this stream |
| 614 | or if the compression method is bsort). deflateSetDictionary does not | 619 | or if not at a block boundary for raw deflate). deflateSetDictionary does |
| 615 | perform any compression: this will be done by deflate(). | 620 | not perform any compression: this will be done by deflate(). |
| 616 | */ | 621 | */ |
| 617 | 622 | ||
| 618 | ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, | 623 | ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, |
| @@ -810,10 +815,11 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, | |||
| 810 | if that call returned Z_NEED_DICT. The dictionary chosen by the compressor | 815 | if that call returned Z_NEED_DICT. The dictionary chosen by the compressor |
| 811 | can be determined from the adler32 value returned by that call of inflate. | 816 | can be determined from the adler32 value returned by that call of inflate. |
| 812 | The compressor and decompressor must use exactly the same dictionary (see | 817 | The compressor and decompressor must use exactly the same dictionary (see |
| 813 | deflateSetDictionary). For raw inflate, this function can be called | 818 | deflateSetDictionary). For raw inflate, this function can be called at any |
| 814 | immediately after inflateInit2() or inflateReset() and before any call of | 819 | time to set the dictionary. If the provided dictionary is smaller than the |
| 815 | inflate() to set the dictionary. The application must insure that the | 820 | window and there is already data in the window, then the provided dictionary |
| 816 | dictionary that was used for compression is provided. | 821 | will amend what's there. The application must insure that the dictionary |
| 822 | that was used for compression is provided. | ||
| 817 | 823 | ||
| 818 | inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a | 824 | inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a |
| 819 | parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is | 825 | parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is |
| @@ -1694,6 +1700,7 @@ ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); | |||
| 1694 | ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); | 1700 | ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); |
| 1695 | ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); | 1701 | ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); |
| 1696 | ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); | 1702 | ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); |
| 1703 | ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); | ||
| 1697 | #ifndef Z_SOLO | 1704 | #ifndef Z_SOLO |
| 1698 | ZEXTERN unsigned long ZEXPORT gzflags OF((void)); | 1705 | ZEXTERN unsigned long ZEXPORT gzflags OF((void)); |
| 1699 | #endif | 1706 | #endif |
| @@ -76,3 +76,7 @@ ZLIB_1.2.5.2 { | |||
| 76 | gzgetc_; | 76 | gzgetc_; |
| 77 | inflateResetKeep; | 77 | inflateResetKeep; |
| 78 | } ZLIB_1.2.5.1; | 78 | } ZLIB_1.2.5.1; |
| 79 | |||
| 80 | ZLIB_1.2.5.3 { | ||
| 81 | deflateResetKeep; | ||
| 82 | } ZLIB_1.2.5.2; | ||
