in src/native/io/compressed/zlib_compression_writer.cpp [41:84]
void zlib_compression_writer::write_impl(std::string_view buffer)
{
if (buffer.size() == 0)
{
return;
}
auto new_processed_bytes = m_processed_bytes + buffer.size();
m_zstr.next_in = const_cast<Bytef *>(reinterpret_cast<const Bytef *>(buffer.data()));
m_zstr.avail_in = static_cast<uInt>(buffer.size());
while (true)
{
reset_output();
// ADU_LOG(
// "zlib_compression_writer::write_impl: Calling deflate. m_zstr.avail_in: {}, m_processed_bytes: {}",
// m_zstr.avail_in,
// m_processed_bytes);
auto ret = deflate(&m_zstr, Z_NO_FLUSH);
if (ret == Z_BUF_ERROR && m_zstr.avail_in == 0)
{
break;
}
if (ret != Z_OK && ret != Z_STREAM_END)
{
auto msg = "zlib_compression_writer::write_impl: deflate() failed. ret: " + std::to_string(ret);
throw errors::user_exception(errors::error_code::io_zlib_writer_deflate_failed, msg);
}
handle_output();
if (ret == Z_STREAM_END)
{
break;
}
}
m_processed_bytes = new_processed_bytes;
}