Mercurial > public > mercurial-scm > hg
diff contrib/python-zstandard/c-ext/compressoriterator.c @ 37495:b1fb341d8a61
zstandard: vendor python-zstandard 0.9.0
This was just released. It features a number of goodies. More info at
https://gregoryszorc.com/blog/2018/04/09/release-of-python-zstandard-0.9/.
The clang-format ignore list was updated to reflect the new source
of files.
The project contains a vendored copy of zstandard 1.3.4. The old
version was 1.1.3. One of the changes between those versions is that
zstandard is now dual licensed BSD + GPLv2 and the patent rights grant
has been removed. Good riddance.
The API should be backwards compatible. So no changes in core
should be needed. However, there were a number of changes in the
library that we'll want to adapt to. Those will be addressed in
subsequent commits.
Differential Revision: https://phab.mercurial-scm.org/D3198
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 09 Apr 2018 10:13:29 -0700 |
parents | e0dc40530c5a |
children | 675775c33ab6 |
line wrap: on
line diff
--- a/contrib/python-zstandard/c-ext/compressoriterator.c Sun Apr 08 01:08:43 2018 +0200 +++ b/contrib/python-zstandard/c-ext/compressoriterator.c Mon Apr 09 10:13:29 2018 -0700 @@ -21,10 +21,9 @@ Py_XDECREF(self->compressor); Py_XDECREF(self->reader); - if (self->buffer) { - PyBuffer_Release(self->buffer); - PyMem_FREE(self->buffer); - self->buffer = NULL; + if (self->buffer.buf) { + PyBuffer_Release(&self->buffer); + memset(&self->buffer, 0, sizeof(self->buffer)); } if (self->output.dst) { @@ -58,14 +57,8 @@ /* If we have data left in the input, consume it. */ if (self->input.pos < self->input.size) { Py_BEGIN_ALLOW_THREADS - if (self->compressor->mtcctx) { - zresult = ZSTDMT_compressStream(self->compressor->mtcctx, - &self->output, &self->input); - } - else { - zresult = ZSTD_compressStream(self->compressor->cstream, &self->output, - &self->input); - } + zresult = ZSTD_compress_generic(self->compressor->cctx, &self->output, + &self->input, ZSTD_e_continue); Py_END_ALLOW_THREADS /* Release the Python object holding the input buffer. */ @@ -107,14 +100,14 @@ PyBytes_AsStringAndSize(readResult, &readBuffer, &readSize); } else { - assert(self->buffer && self->buffer->buf); + assert(self->buffer.buf); /* Only support contiguous C arrays. */ - assert(self->buffer->strides == NULL && self->buffer->suboffsets == NULL); - assert(self->buffer->itemsize == 1); + assert(self->buffer.strides == NULL && self->buffer.suboffsets == NULL); + assert(self->buffer.itemsize == 1); - readBuffer = (char*)self->buffer->buf + self->bufferOffset; - bufferRemaining = self->buffer->len - self->bufferOffset; + readBuffer = (char*)self->buffer.buf + self->bufferOffset; + bufferRemaining = self->buffer.len - self->bufferOffset; readSize = min(bufferRemaining, (Py_ssize_t)self->inSize); self->bufferOffset += readSize; } @@ -130,12 +123,12 @@ /* EOF */ if (0 == readSize) { - if (self->compressor->mtcctx) { - zresult = ZSTDMT_endStream(self->compressor->mtcctx, &self->output); - } - else { - zresult = ZSTD_endStream(self->compressor->cstream, &self->output); - } + self->input.src = NULL; + self->input.size = 0; + self->input.pos = 0; + + zresult = ZSTD_compress_generic(self->compressor->cctx, &self->output, + &self->input, ZSTD_e_end); if (ZSTD_isError(zresult)) { PyErr_Format(ZstdError, "error ending compression stream: %s", ZSTD_getErrorName(zresult)); @@ -159,13 +152,8 @@ self->input.pos = 0; Py_BEGIN_ALLOW_THREADS - if (self->compressor->mtcctx) { - zresult = ZSTDMT_compressStream(self->compressor->mtcctx, &self->output, - &self->input); - } - else { - zresult = ZSTD_compressStream(self->compressor->cstream, &self->output, &self->input); - } + zresult = ZSTD_compress_generic(self->compressor->cctx, &self->output, + &self->input, ZSTD_e_continue); Py_END_ALLOW_THREADS /* The input buffer currently points to memory managed by Python