Skip to content

Instantly share code, notes, and snippets.

@nicoboss
Created November 20, 2022 23:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicoboss/81dd484dcba0e673696620ad0087482a to your computer and use it in GitHub Desktop.
Save nicoboss/81dd484dcba0e673696620ad0087482a to your computer and use it in GitHub Desktop.
u64 processChunk(std::vector<u8>& inputBuffer, bool finalize)
{
if (inputBuffer.size() == 0) return 1;
u64 bufferSize = inputBuffer.size();
m_deflateBuffer.resize(bufferSize);
m_deflateBuffer.resize(0);
u64 i = 0;
while (i < bufferSize)
{
u64 inSize = dStreamInSize;
if (dStreamInSize > bufferSize - i) {
inSize = bufferSize - i;
if (!finalize) {
if (m_deflateBuffer.size())
{
encrypt(m_deflateBuffer.buffer(), m_deflateBuffer.size(), m_offset);
queueBuffer(m_deflateBuffer, m_offset);
m_offset += m_deflateBuffer.size();
m_deflateBuffer.resize(0);
}
memcpy(inputBuffer.data(), inputBuffer.data() + i, inSize);
inputBuffer.resize(inSize);
return 1;
}
}
ZSTD_inBuffer input = { inputBuffer.data() + i, inSize, 0 };
ZSTD_outBuffer output = { buffOut, buffOutSize, 0 };
size_t const ret = ZSTD_decompressStream(dctx, &output, &input);
if (ZSTD_isError(ret))
{
log::Error() << ZSTD_getErrorName(ret);
return false;
}
m_deflateBuffer.writeBuffer(buffOut, output.pos);
if (m_deflateBuffer.size() >= NSZ_BUFFER_SIZE)
{
encrypt(m_deflateBuffer.buffer(), m_deflateBuffer.size(), m_offset);
queueBuffer(m_deflateBuffer, m_offset);
m_offset += m_deflateBuffer.size();
m_deflateBuffer.resize(0);
}
i += input.pos;
}
if (m_deflateBuffer.size())
{
encrypt(m_deflateBuffer.buffer(), m_deflateBuffer.size(), m_offset);
queueBuffer(m_deflateBuffer, m_offset);
m_offset += m_deflateBuffer.size();
m_deflateBuffer.resize(0);
}
inputBuffer.resize(0);
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment