iRework bcput/bcget - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 115fc777eeeef685fee0f6ef3b7d2c182b03c1ed /scm/dedup/commit/115fc777eeeef685fee0f6ef3b7d2c182b03c1ed.gph bitreich.org 70 1parent 222099ba0a96a08af154641dbab342243afd1807 /scm/dedup/commit/222099ba0a96a08af154641dbab342243afd1807.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Thu, 2 May 2019 14:26:53 +0100 Err bitreich.org 70 i Err bitreich.org 70 iRework bcput/bcget Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M bcompress.c | 54 +++++++++++++++++++------------ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 34 insertions(+), 20 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/bcompress.c b/bcompress.c /scm/dedup/file/bcompress.c.gph bitreich.org 70 i@@ -151,26 +151,31 @@ bcput(struct bctx *bctx, void *buf, size_t n, unsigned char *md) Err bitreich.org 70 i char *cbuf; Err bitreich.org 70 i size_t cn; Err bitreich.org 70 i Err bitreich.org 70 i+ /* Calculate compressed block size */ Err bitreich.org 70 i cctx = bctx->cctx; Err bitreich.org 70 i- switch (cctx->type) { Err bitreich.org 70 i- case CDNONETYPE: Err bitreich.org 70 i+ if (cctx->type == CDNONETYPE) { Err bitreich.org 70 i cn = n; Err bitreich.org 70 i- cbuf = malloc(CDSIZE + cn); Err bitreich.org 70 i- if (cbuf == NULL) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- memcpy(&cbuf[CDSIZE], buf, cn); Err bitreich.org 70 i- break; Err bitreich.org 70 i- case CDSNAPPYTYPE: Err bitreich.org 70 i+ } else if (cctx->type == CDSNAPPYTYPE) { Err bitreich.org 70 i cn = snappy_max_compressed_length(n); Err bitreich.org 70 i- cbuf = malloc(CDSIZE + cn); Err bitreich.org 70 i- if (cbuf == NULL) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* Allocate compressed block */ Err bitreich.org 70 i+ cbuf = malloc(CDSIZE + cn); Err bitreich.org 70 i+ if (cbuf == NULL) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* Compress block */ Err bitreich.org 70 i+ if (cctx->type == CDNONETYPE) { Err bitreich.org 70 i+ memcpy(&cbuf[CDSIZE], buf, cn); Err bitreich.org 70 i+ } else if (cctx->type == CDSNAPPYTYPE) { Err bitreich.org 70 i if (snappy_compress(buf, n, &cbuf[CDSIZE], &cn) != SNAPPY_OK) { Err bitreich.org 70 i free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i- break; Err bitreich.org 70 i- default: Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -197,34 +202,44 @@ bcget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n) Err bitreich.org 70 i char *cbuf; Err bitreich.org 70 i size_t cn, un, size; Err bitreich.org 70 i Err bitreich.org 70 i+ /* Calculate maximum compressed block size */ Err bitreich.org 70 i size = *n; Err bitreich.org 70 i cn = snappy_max_compressed_length(size); Err bitreich.org 70 i if (cn > size) Err bitreich.org 70 i size = cn; Err bitreich.org 70 i size += CDSIZE; Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* Allocate compressed block */ Err bitreich.org 70 i cbuf = malloc(size); Err bitreich.org 70 i if (cbuf == NULL) Err bitreich.org 70 i return -1; Err bitreich.org 70 i Err bitreich.org 70 i+ /* Read compressed block */ Err bitreich.org 70 i bops = bstorageops(); Err bitreich.org 70 i if (bops->get(bctx, md, cbuf, &size) < 0) { Err bitreich.org 70 i free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+ /* Unpack compression descriptor */ Err bitreich.org 70 i unpackcd(cbuf, &cd); Err bitreich.org 70 i- switch (cd.type) { Err bitreich.org 70 i- case CDNONETYPE: Err bitreich.org 70 i+ Err bitreich.org 70 i+ /* Decompress block */ Err bitreich.org 70 i+ if (cd.type == CDNONETYPE) { Err bitreich.org 70 i un = cd.size; Err bitreich.org 70 i if (*n < un) { Err bitreich.org 70 i free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i memcpy(buf, &cbuf[CDSIZE], un); Err bitreich.org 70 i- break; Err bitreich.org 70 i- case CDSNAPPYTYPE: Err bitreich.org 70 i+ } else if (cd.type == CDSNAPPYTYPE) { Err bitreich.org 70 i if (snappy_uncompressed_length(&cbuf[CDSIZE], cd.size, Err bitreich.org 70 i- &un) != SNAPPY_OK || *n < un) { Err bitreich.org 70 i+ &un) != SNAPPY_OK) { Err bitreich.org 70 i+ free(cbuf); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (*n < un) { Err bitreich.org 70 i free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -234,8 +249,7 @@ bcget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n) Err bitreich.org 70 i free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i- break; Err bitreich.org 70 i- default: Err bitreich.org 70 i+ } else { Err bitreich.org 70 i free(cbuf); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 .