| 3768 | } |
| 3769 | |
| 3770 | tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, |
| 3771 | size_t *pIn_buf_size, void *pOut_buf, |
| 3772 | size_t *pOut_buf_size, tdefl_flush flush) { |
| 3773 | if (!d) { |
| 3774 | if (pIn_buf_size) |
| 3775 | *pIn_buf_size = 0; |
| 3776 | if (pOut_buf_size) |
| 3777 | *pOut_buf_size = 0; |
| 3778 | return TDEFL_STATUS_BAD_PARAM; |
| 3779 | } |
| 3780 | |
| 3781 | d->m_pIn_buf = pIn_buf; |
| 3782 | d->m_pIn_buf_size = pIn_buf_size; |
| 3783 | d->m_pOut_buf = pOut_buf; |
| 3784 | d->m_pOut_buf_size = pOut_buf_size; |
| 3785 | d->m_pSrc = (const mz_uint8 *)(pIn_buf); |
| 3786 | d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; |
| 3787 | d->m_out_buf_ofs = 0; |
| 3788 | d->m_flush = flush; |
| 3789 | |
| 3790 | if (((d->m_pPut_buf_func != NULL) == |
| 3791 | ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || |
| 3792 | (d->m_prev_return_status != TDEFL_STATUS_OKAY) || |
| 3793 | (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || |
| 3794 | (pIn_buf_size && *pIn_buf_size && !pIn_buf) || |
| 3795 | (pOut_buf_size && *pOut_buf_size && !pOut_buf)) { |
| 3796 | if (pIn_buf_size) |
| 3797 | *pIn_buf_size = 0; |
| 3798 | if (pOut_buf_size) |
| 3799 | *pOut_buf_size = 0; |
| 3800 | return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); |
| 3801 | } |
| 3802 | d->m_wants_to_finish |= (flush == TDEFL_FINISH); |
| 3803 | |
| 3804 | if ((d->m_output_flush_remaining) || (d->m_finished)) |
| 3805 | return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); |
| 3806 | |
| 3807 | #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN |
| 3808 | if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && |
| 3809 | ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && |
| 3810 | ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | |
| 3811 | TDEFL_RLE_MATCHES)) == 0)) { |
| 3812 | if (!tdefl_compress_fast(d)) |
| 3813 | return d->m_prev_return_status; |
| 3814 | } else |
| 3815 | #endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN |
| 3816 | { |
| 3817 | if (!tdefl_compress_normal(d)) |
| 3818 | return d->m_prev_return_status; |
| 3819 | } |
| 3820 | |
| 3821 | if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && |
| 3822 | (pIn_buf)) |
| 3823 | d->m_adler32 = |
| 3824 | (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, |
| 3825 | d->m_pSrc - (const mz_uint8 *)pIn_buf); |
| 3826 | |
| 3827 | if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && |
no test coverage detected