From: Jonathan Dieter Date: Thu, 26 Jul 2018 21:15:47 +0000 (+0100) Subject: Fix nocomp compression X-Git-Tag: archive/raspbian/1.1.9+ds1-1+rpi1~1^2~159 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=103a826b082db793447d1731034d9c39026a7e31;p=zchunk.git Fix nocomp compression Signed-off-by: Jonathan Dieter --- diff --git a/src/lib/comp/comp.c b/src/lib/comp/comp.c index 7682466..8581093 100644 --- a/src/lib/comp/comp.c +++ b/src/lib/comp/comp.c @@ -152,6 +152,8 @@ static ssize_t comp_write(zckCtx *zck, const char *src, const size_t src_size) { if(zck->comp.compress(zck, &(zck->comp), src, src_size, &dst, &dst_size, 1) < 0) return -1; + zck->comp.dc_data_size += src_size; + if(dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) { free(dst); return -1; @@ -221,6 +223,7 @@ int comp_init(zckCtx *zck) { if(zck->comp.compress(zck, comp, zck->comp.dict, zck->comp.dict_size, &dst, &dst_size, 0) < 0) return False; + zck->comp.dc_data_size = zck->comp.dict_size; if(!write_data(zck, zck->temp_fd, dst, dst_size)) { free(dst); return False; @@ -236,6 +239,7 @@ int comp_init(zckCtx *zck) { if(!zck->comp.end_cchunk(zck, comp, &dst, &dst_size, 0)) return False; + zck->comp.dc_data_size = 0; if(!write_data(zck, zck->temp_fd, dst, dst_size)) { free(dst); return False; @@ -545,7 +549,6 @@ ssize_t PUBLIC zck_write(zckCtx *zck, const char *src, const size_t src_size) { const char *loc = src; size_t loc_size = src_size; size_t loc_written = 0; - zck_log(ZCK_LOG_DDEBUG, "Size: %lu", zck->comp.dc_data_size + loc_size); if(zck->manual_chunk) { while(zck->comp.dc_data_size + loc_size > zck->chunk_max_size) { @@ -617,6 +620,7 @@ ssize_t PUBLIC zck_end_chunk(zckCtx *zck) { size_t dst_size = 0; if(!zck->comp.end_cchunk(zck, &(zck->comp), &dst, &dst_size, 1)) return -1; + zck->comp.dc_data_size = 0; if(dst_size > 0 && !write_data(zck, zck->temp_fd, dst, dst_size)) { free(dst); return -1; diff --git a/src/lib/comp/nocomp/nocomp.c b/src/lib/comp/nocomp/nocomp.c index 3ab7db6..233564d 100644 --- a/src/lib/comp/nocomp/nocomp.c +++ b/src/lib/comp/nocomp/nocomp.c @@ -32,13 +32,8 @@ #include "zck_private.h" static int init(zckCtx *zck, zckComp *comp) { - return True; -} - -static int end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, - int use_dict) { - *dst = NULL; - *dst_size = 0; + VALIDATE_BOOL(zck); + ALLOCD_BOOL(comp); return True; } @@ -46,6 +41,9 @@ static int end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, const size_t src_size, char **dst, size_t *dst_size, int use_dict) { + VALIDATE_INT(zck); + ALLOCD_INT(comp); + *dst = zmalloc(src_size); if(dst == NULL) { set_fatal_error(zck, "Unable to allocate %lu bytes", src_size); @@ -58,8 +56,21 @@ static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, return *dst_size; } +static int end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, + int use_dict) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(comp); + + *dst = NULL; + *dst_size = 0; + + return True; +} static int decompress(zckCtx *zck, zckComp *comp, const int use_dict) { + VALIDATE_BOOL(zck); + ALLOCD_BOOL(comp); + char *src = comp->data; char src_size = comp->data_size; comp->data = NULL; diff --git a/src/lib/comp/zstd/zstd.c b/src/lib/comp/zstd/zstd.c index 301dc04..e50f7cb 100644 --- a/src/lib/comp/zstd/zstd.c +++ b/src/lib/comp/zstd/zstd.c @@ -74,7 +74,6 @@ static ssize_t compress(zckCtx *zck, zckComp *comp, const char *src, memcpy(comp->dc_data + comp->dc_data_size, src, src_size); *dst = NULL; *dst_size = 0; - comp->dc_data_size += src_size; return 0; } @@ -106,7 +105,6 @@ static int end_cchunk(zckCtx *zck, zckComp *comp, char **dst, size_t *dst_size, } free(comp->dc_data); comp->dc_data = NULL; - comp->dc_data_size = 0; comp->dc_data_loc = 0; if(ZSTD_isError(*dst_size)) { set_fatal_error(zck, "zstd compression error: %s",