Changed the prototypes of trace-cmd internal compression API to be more generic. Suggested-by: Sebastian Andrzej Siewior <sebastian@xxxxxxxxxxxxx> Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@xxxxxxxxx> --- .../include/private/trace-cmd-private.h | 4 +-- lib/trace-cmd/trace-compress-zlib.c | 20 +++++------ lib/trace-cmd/trace-compress-zstd.c | 18 +++++----- lib/trace-cmd/trace-compress.c | 33 ++++++++----------- 4 files changed, 32 insertions(+), 43 deletions(-) diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h index 0ea37abc..45d89270 100644 --- a/lib/trace-cmd/include/private/trace-cmd-private.h +++ b/lib/trace-cmd/include/private/trace-cmd-private.h @@ -518,8 +518,8 @@ struct tracecmd_compression_proto { int weight; const char *name; const char *version; - int (*compress)(const char *in, unsigned int in_bytes, char *out, unsigned int *out_bytes); - int (*uncompress)(const char *in, unsigned int in_bytes, char *out, unsigned int *out_bytes); + int (*compress)(const void *in, int in_bytes, void *out, int out_bytes); + int (*uncompress)(const void *in, int in_bytes, void *out, int out_bytes); unsigned int (*compress_size)(unsigned int bytes); bool (*is_supported)(const char *name, const char *version); }; diff --git a/lib/trace-cmd/trace-compress-zlib.c b/lib/trace-cmd/trace-compress-zlib.c index 8b9758c9..41342597 100644 --- a/lib/trace-cmd/trace-compress-zlib.c +++ b/lib/trace-cmd/trace-compress-zlib.c @@ -13,19 +13,17 @@ #define __ZLIB_NAME "zlib" #define __ZLIB_WEIGTH 10 -static int zlib_compress(const char *in, unsigned int in_bytes, - char *out, unsigned int *out_bytes) +static int zlib_compress(const void *in, int in_bytes, void *out, int out_bytes) { - unsigned long out_size = *out_bytes; + unsigned long obytes = out_bytes; int ret; - ret = compress2((unsigned char *)out, &out_size, + ret = compress2((unsigned char *)out, &obytes, (unsigned char *)in, (unsigned long)in_bytes, Z_BEST_COMPRESSION); - *out_bytes = out_size; errno = 0; switch (ret) { case Z_OK: - return 0; + return obytes; case Z_BUF_ERROR: errno = -ENOBUFS; break; @@ -43,19 +41,17 @@ static int zlib_compress(const char *in, unsigned int in_bytes, return -1; } -static int zlib_decompress(const char *in, unsigned int in_bytes, - char *out, unsigned int *out_bytes) +static int zlib_decompress(const void *in, int in_bytes, void *out, int out_bytes) { - unsigned long out_size = *out_bytes; + unsigned long obytes = out_bytes; int ret; - ret = uncompress((unsigned char *)out, &out_size, + ret = uncompress((unsigned char *)out, &obytes, (unsigned char *)in, (unsigned long)in_bytes); - *out_bytes = out_size; errno = 0; switch (ret) { case Z_OK: - return 0; + return obytes; case Z_BUF_ERROR: errno = -ENOBUFS; break; diff --git a/lib/trace-cmd/trace-compress-zstd.c b/lib/trace-cmd/trace-compress-zstd.c index f99ad312..eee4e5d6 100644 --- a/lib/trace-cmd/trace-compress-zstd.c +++ b/lib/trace-cmd/trace-compress-zstd.c @@ -15,31 +15,29 @@ static ZSTD_CCtx *ctx_c; static ZSTD_DCtx *ctx_d; -static int zstd_compress(const char *in, unsigned int in_bytes, - char *out, unsigned int *out_bytes) +static int zstd_compress(const void *in, int in_bytes, void *out, int out_bytes) { size_t ret; - ret = ZSTD_compress2(ctx_c, out, *out_bytes, in, in_bytes); + ret = ZSTD_compress2(ctx_c, out, out_bytes, in, in_bytes); if (ZSTD_isError(ret)) return -1; - *out_bytes = ret; - return 0; + + return ret; } -static int zstd_decompress(const char *in, unsigned int in_bytes, - char *out, unsigned int *out_bytes) +static int zstd_decompress(const void *in, int in_bytes, void *out, int out_bytes) { size_t ret; - ret = ZSTD_decompressDCtx(ctx_d, out, *out_bytes, in, in_bytes); + ret = ZSTD_decompressDCtx(ctx_d, out, out_bytes, in, in_bytes); if (ZSTD_isError(ret)) { errno = -EINVAL; return -1; } - *out_bytes = ret; + errno = 0; - return 0; + return ret; } static unsigned int zstd_compress_bound(unsigned int in_bytes) diff --git a/lib/trace-cmd/trace-compress.c b/lib/trace-cmd/trace-compress.c index 66bfc356..6263439c 100644 --- a/lib/trace-cmd/trace-compress.c +++ b/lib/trace-cmd/trace-compress.c @@ -18,10 +18,8 @@ struct compress_proto { char *proto_version; int weight; - int (*compress_block)(const char *in, unsigned int in_bytes, - char *out, unsigned int *out_bytes); - int (*uncompress_block)(const char *in, unsigned int in_bytes, - char *out, unsigned int *out_bytes); + int (*compress_block)(const void *in, int in_bytes, void *out, int out_bytes); + int (*uncompress_block)(const void *in, int in_bytes, void *out, int out_bytes); unsigned int (*compress_size)(unsigned int bytes); bool (*is_supported)(const char *name, const char *version); }; @@ -273,15 +271,13 @@ int tracecmd_uncompress_block(struct tracecmd_compression *handle) if (read_fd(handle->fd, bytes, s_compressed) < 0) goto error; - s_uncompressed = size; - ret = handle->proto->uncompress_block(bytes, s_compressed, - handle->buffer, &s_uncompressed); - if (ret) + ret = handle->proto->uncompress_block(bytes, s_compressed, handle->buffer, size); + if (ret < 0) goto error; free(bytes); handle->pointer = 0; - handle->capacity_read = s_uncompressed; + handle->capacity_read = ret; handle->capacity = size; return 0; error: @@ -318,12 +314,12 @@ int tracecmd_compress_block(struct tracecmd_compression *handle) if (!buf) return -1; - ret = handle->proto->compress_block(handle->buffer, handle->pointer, buf, &size); + ret = handle->proto->compress_block(handle->buffer, handle->pointer, buf, size); if (ret < 0) goto out; /* Write compressed data size */ - endian4 = tep_read_number(handle->tep, &size, 4); + endian4 = tep_read_number(handle->tep, &ret, 4); ret = do_write(handle, &endian4, 4); if (ret != 4) goto out; @@ -710,12 +706,13 @@ int tracecmd_compress_copy_from(struct tracecmd_compression *handle, int fd, int rsize += all; size = csize; if (all > 0) { - ret = handle->proto->compress_block(buf_from, all, buf_to, &size); + ret = handle->proto->compress_block(buf_from, all, buf_to, size); if (ret < 0) { if (errno == EINTR) continue; break; } + size = ret; /* Write compressed data size */ endian4 = tep_read_number(handle->tep, &size, 4); ret = write_fd(handle->fd, &endian4, 4); @@ -851,7 +848,6 @@ int tracecmd_uncompress_chunk(struct tracecmd_compression *handle, struct tracecmd_compress_chunk *chunk, char *data) { char *bytes_in = NULL; - unsigned int size; int ret = -1; if (!handle || !handle->proto || !handle->proto->uncompress_block || !chunk || !data) @@ -867,8 +863,7 @@ int tracecmd_uncompress_chunk(struct tracecmd_compression *handle, if (read_fd(handle->fd, bytes_in, chunk->zsize) < 0) goto out; - size = chunk->size; - if (handle->proto->uncompress_block(bytes_in, chunk->zsize, data, &size)) + if (handle->proto->uncompress_block(bytes_in, chunk->zsize, data, chunk->size) < 0) goto out; ret = 0; @@ -954,12 +949,12 @@ int tracecmd_uncompress_copy_to(struct tracecmd_compression *handle, int fd, rsize += s_compressed; ret = handle->proto->uncompress_block(bytes_in, s_compressed, - bytes_out, &s_uncompressed); - if (ret) + bytes_out, s_uncompressed); + if (ret < 0) break; - write_fd(fd, bytes_out, s_uncompressed); - wsize += s_uncompressed; + write_fd(fd, bytes_out, ret); + wsize += ret; chunks--; } free(bytes_in); -- 2.34.1