488 }
489
490 /* ========================================================================= */
491 int ZEXPORT deflateResetKeep (strm)
492 z_streamp strm;
493 {
494 deflate_state *s;
495
496 if (deflateStateCheck(strm)) {
497 return Z_STREAM_ERROR;
498 }
499
500 strm->total_in = strm->total_out = 0;
501 strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
502 strm->data_type = Z_UNKNOWN;
503
504 s = (deflate_state *)strm->state;
505 s->pending = 0;
506 s->pending_out = s->pending_buf;
507
508 s->high_water = 0; /* reset to its inital value 0 */
509
510 if (s->wrap < 0) {
511 s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
512 }
513 s->status =
514 #ifdef GZIP
515 s->wrap == 2 ? GZIP_STATE :
516 #endif
517 s->wrap ? INIT_STATE : BUSY_STATE;
518 strm->adler =
519 #ifdef GZIP
520 s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
521 #endif
522 adler32(0L, Z_NULL, 0);
523 s->last_flush = Z_NO_FLUSH;
524
525 _tr_init(s);
526
527 return Z_OK;
528 }
529
530 /* ========================================================================= */
531 int ZEXPORT deflateReset (strm)
532 z_streamp strm;
533 {
534 int ret;
535
536 ret = deflateResetKeep(strm);
537 if (ret == Z_OK)
538 lm_init(strm->state);
539 return ret;
540 }
541
542 /* ========================================================================= */
543 int ZEXPORT deflateSetHeader (strm, head)
596 int level;
597 int strategy;
598 {
599 deflate_state *s;
600 compress_func func;
601
602 if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
603 s = strm->state;
604
605 #ifdef FASTEST
606 if (level != 0) level = 1;
607 #else
608 if (level == Z_DEFAULT_COMPRESSION) level = 6;
609 #endif
610 if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
611 return Z_STREAM_ERROR;
612 }
613 func = configuration_table[s->level].func;
614
615 if ((strategy != s->strategy || func != configuration_table[level].func) &&
616 s->high_water) {
617 /* Flush the last buffer: */
618 int err = deflate(strm, Z_BLOCK);
619 if (err == Z_STREAM_ERROR)
620 return err;
621 if (strm->avail_out == 0)
622 return Z_BUF_ERROR;
623 }
624 if (s->level != level) {
625 if (s->level == 0 && s->matches != 0) {
626 if (s->matches == 1)
627 slide_hash(s);
628 else
629 CLEAR_HASH(s);
630 s->matches = 0;
631 }
632 s->level = level;
633 s->max_lazy_match = configuration_table[level].max_lazy;
634 s->good_match = configuration_table[level].good_length;
635 s->nice_match = configuration_table[level].nice_length;
636 s->max_chain_length = configuration_table[level].max_chain;
|
488 }
489
490 /* ========================================================================= */
491 int ZEXPORT deflateResetKeep (strm)
492 z_streamp strm;
493 {
494 deflate_state *s;
495
496 if (deflateStateCheck(strm)) {
497 return Z_STREAM_ERROR;
498 }
499
500 strm->total_in = strm->total_out = 0;
501 strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
502 strm->data_type = Z_UNKNOWN;
503
504 s = (deflate_state *)strm->state;
505 s->pending = 0;
506 s->pending_out = s->pending_buf;
507
508 if (s->wrap < 0) {
509 s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
510 }
511 s->status =
512 #ifdef GZIP
513 s->wrap == 2 ? GZIP_STATE :
514 #endif
515 s->wrap ? INIT_STATE : BUSY_STATE;
516 strm->adler =
517 #ifdef GZIP
518 s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
519 #endif
520 adler32(0L, Z_NULL, 0);
521 s->last_flush = -2;
522
523 _tr_init(s);
524
525 return Z_OK;
526 }
527
528 /* ========================================================================= */
529 int ZEXPORT deflateReset (strm)
530 z_streamp strm;
531 {
532 int ret;
533
534 ret = deflateResetKeep(strm);
535 if (ret == Z_OK)
536 lm_init(strm->state);
537 return ret;
538 }
539
540 /* ========================================================================= */
541 int ZEXPORT deflateSetHeader (strm, head)
594 int level;
595 int strategy;
596 {
597 deflate_state *s;
598 compress_func func;
599
600 if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
601 s = strm->state;
602
603 #ifdef FASTEST
604 if (level != 0) level = 1;
605 #else
606 if (level == Z_DEFAULT_COMPRESSION) level = 6;
607 #endif
608 if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
609 return Z_STREAM_ERROR;
610 }
611 func = configuration_table[s->level].func;
612
613 if ((strategy != s->strategy || func != configuration_table[level].func) &&
614 s->last_flush != -2) {
615 /* Flush the last buffer: */
616 int err = deflate(strm, Z_BLOCK);
617 if (err == Z_STREAM_ERROR)
618 return err;
619 if (strm->avail_out == 0)
620 return Z_BUF_ERROR;
621 }
622 if (s->level != level) {
623 if (s->level == 0 && s->matches != 0) {
624 if (s->matches == 1)
625 slide_hash(s);
626 else
627 CLEAR_HASH(s);
628 s->matches = 0;
629 }
630 s->level = level;
631 s->max_lazy_match = configuration_table[level].max_lazy;
632 s->good_match = configuration_table[level].good_length;
633 s->nice_match = configuration_table[level].nice_length;
634 s->max_chain_length = configuration_table[level].max_chain;
|