|
|
@ -968,7 +968,11 @@ static int stream_zstd_init(handler_ctx *hctx) { |
|
|
|
const plugin_data * const p = hctx->plugin_data; |
|
|
|
if (p->conf.compression_level >= 0) { /* -1 is lighttpd default for "unset" */ |
|
|
|
int level = p->conf.compression_level; |
|
|
|
#if ZSTD_VERSION_NUMBER >= 10000+400+0 /* v1.4.0 */ |
|
|
|
ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, level); |
|
|
|
#else |
|
|
|
ZSTD_initCStream(cctx, level); |
|
|
|
#endif |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
@ -982,7 +986,11 @@ static int stream_zstd_compress(handler_ctx * const hctx, unsigned char * const |
|
|
|
hctx->output->used = 0; |
|
|
|
hctx->bytes_in += st_size; |
|
|
|
while (zib.pos < zib.size) { |
|
|
|
#if ZSTD_VERSION_NUMBER >= 10000+400+0 /* v1.4.0 */ |
|
|
|
const size_t rv = ZSTD_compressStream2(cctx,&zob,&zib,ZSTD_e_continue); |
|
|
|
#else |
|
|
|
const size_t rv = ZSTD_compressStream(cctx, &zob, &zib); |
|
|
|
#endif |
|
|
|
if (ZSTD_isError(rv)) return -1; |
|
|
|
if (zib.pos == zib.size) break; /* defer flush */ |
|
|
|
hctx->bytes_out += (off_t)zob.pos; |
|
|
@ -996,14 +1004,22 @@ static int stream_zstd_compress(handler_ctx * const hctx, unsigned char * const |
|
|
|
|
|
|
|
static int stream_zstd_flush(handler_ctx * const hctx, int end) { |
|
|
|
ZSTD_CStream * const cctx = hctx->u.cctx; |
|
|
|
#if ZSTD_VERSION_NUMBER >= 10000+400+0 /* v1.4.0 */ |
|
|
|
const ZSTD_EndDirective endOp = end ? ZSTD_e_end : ZSTD_e_flush; |
|
|
|
ZSTD_inBuffer zib = { NULL, 0, 0 }; |
|
|
|
#endif |
|
|
|
ZSTD_outBuffer zob = { hctx->output->ptr, |
|
|
|
hctx->output->size, |
|
|
|
hctx->output->used }; |
|
|
|
size_t rv; |
|
|
|
do { |
|
|
|
#if ZSTD_VERSION_NUMBER >= 10000+400+0 /* v1.4.0 */ |
|
|
|
rv = ZSTD_compressStream2(cctx, &zob, &zib, endOp); |
|
|
|
#else |
|
|
|
rv = end |
|
|
|
? ZSTD_endStream(cctx, &zob) |
|
|
|
: ZSTD_flushStream(cctx, &zob); |
|
|
|
#endif |
|
|
|
if (ZSTD_isError(rv)) return -1; |
|
|
|
hctx->bytes_out += (off_t)zob.pos; |
|
|
|
if (0 != stream_http_chunk_append_mem(hctx, zob.dst, zob.pos)) |
|
|
|