Precalculate discriminator - dedup - deduplicating backup program HTML git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 5f4ef6bbdd11dbb7469365a3f244789e4ea15013 DIR parent 5e1aa604d5f99e97f55d41dd0324cec8b4badd5b HTML Author: sin <sin@2f30.org> Date: Fri, 22 Feb 2019 14:00:37 +0000 Precalculate discriminator Diffstat: M chunker.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) --- DIR diff --git a/chunker.c b/chunker.c @@ -12,6 +12,7 @@ struct chunker { size_t cap; size_t rpos; size_t wpos; + size_t discr; int fd; }; @@ -22,15 +23,13 @@ calc_discr(size_t avg) } static int -match_pattern(size_t chunk_size, uint32_t fp) +match_pattern(struct chunker *chunker, size_t chunk_size, uint32_t fp) { - size_t discr = calc_discr(BLKSIZE_AVG); - if (chunk_size >= BLKSIZE_MAX) return 1; if (chunk_size < BLKSIZE_MIN) return 0; - return (fp % discr) == discr - 1; + return (fp % chunker->discr) == chunker->discr - 1; } static size_t @@ -60,7 +59,7 @@ get_chunk_size(struct chunker *chunker) if (i > 0) fp = buzh_update(fp, bp[i - 1], bp[chunk_size - 1], WINSIZE); - if (match_pattern(chunk_size, fp) == 1) + if (match_pattern(chunker, chunk_size, fp) == 1) return chunk_size; } return chunk_size; @@ -82,6 +81,7 @@ alloc_chunker(size_t cap, int fd) chunker->rpos = 0; chunker->wpos = 0; chunker->fd = fd; + chunker->discr = calc_discr(BLKSIZE_AVG); return chunker; }