diff options
| author | ruki <[email protected]> | 2022-05-10 23:08:13 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-05-10 23:08:13 +0800 |
| commit | 8cbd906643c7034ff53f44660ef84ee0f3f449ff (patch) | |
| tree | fcf03d4b0207185b6e249398f859dd6512ab1749 /core/src | |
| parent | 44ab25626452ebdc1317f0309be9439a321a8836 (diff) | |
fix lz4 stream
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/xmake/lz4/prefix.h | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/core/src/xmake/lz4/prefix.h b/core/src/xmake/lz4/prefix.h index dfc2b4823..04d3fb88a 100644 --- a/core/src/xmake/lz4/prefix.h +++ b/core/src/xmake/lz4/prefix.h @@ -41,7 +41,7 @@ typedef struct __xm_lz4_cstream_t tb_size_t buffer_size; tb_size_t buffer_maxn; tb_size_t write_maxn; - tb_bool_t header_written; + tb_size_t header_size; LZ4_byte header[LZ4F_HEADER_SIZE_MAX]; }xm_lz4_cstream_t; @@ -102,6 +102,8 @@ static __tb_inline__ xm_lz4_cstream_t* xm_lz4_cstream_init() if (LZ4F_isError(ret)) break; + stream->header_size = ret; + ok = tb_true; } while (0); @@ -145,15 +147,15 @@ static __tb_inline__ tb_long_t xm_lz4_cstream_read(xm_lz4_cstream_t* stream, tb_ { // check tb_assert_and_check_return_val(stream && stream->cctx && odata && osize, -1); - tb_assert_and_check_return_val(osize >= sizeof(stream->header), -1); + tb_assert_and_check_return_val(osize >= stream->header_size, -1); tb_size_t read = 0; - if (!stream->header_written) + if (stream->header_size) { - tb_memcpy(odata, stream->header, sizeof(stream->header)); - stream->header_written = tb_true; - read += sizeof(stream->header); - osize -= sizeof(stream->header); + tb_memcpy(odata, stream->header, stream->header_size); + read += stream->header_size; + osize -= stream->header_size; + stream->header_size = 0; } tb_size_t need = tb_min(stream->buffer_size, osize); @@ -255,9 +257,8 @@ static __tb_inline__ tb_long_t xm_lz4_dstream_write(xm_lz4_dstream_t* stream, tb stream->buffer = (LZ4_byte*)tb_malloc(stream->buffer_maxn); tb_assert_and_check_return_val(stream->buffer, -1); - // TODO - // stream->buffer_size = header_size - consumed_size; - // tb_memcpy(stream->buffer, stream->header + consumed_size, stream->buffer_size); + stream->buffer_size = header_size - consumed_size; + tb_memcpy(stream->buffer, stream->header + consumed_size, stream->buffer_size); } } tb_check_return_val(stream->header_size == header_size && isize, 0); |
