iMove block helpers to utils.c - 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 94a49be0c19300d3a57a3d25ba58236c67e912a2 /scm/dedup/commit/94a49be0c19300d3a57a3d25ba58236c67e912a2.gph bitreich.org 70 1parent 78273e89af8024ff892a83cdb04b8b2374aa9521 /scm/dedup/commit/78273e89af8024ff892a83cdb04b8b2374aa9521.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Thu, 18 Apr 2019 10:42:49 +0100 Err bitreich.org 70 i Err bitreich.org 70 iMove block helpers to utils.c Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dcheck.c | 45 ++----------------------------- Err bitreich.org 70 i M dedup.h | 6 ++++++ Err bitreich.org 70 i M dpack.c | 37 ++----------------------------- Err bitreich.org 70 i M dunpack.c | 32 +------------------------------ Err bitreich.org 70 i M utils.c | 52 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 63 insertions(+), 109 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/dcheck.c b/dcheck.c /scm/dedup/file/dcheck.c.gph bitreich.org 70 i@@ -36,47 +36,6 @@ print_md(FILE *fp, uint8_t *md, size_t size) Err bitreich.org 70 i fprintf(fp, "%02x", md[i]); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-static uint8_t * Err bitreich.org 70 i-alloc_buf(size_t size) Err bitreich.org 70 i-{ Err bitreich.org 70 i- void *p; Err bitreich.org 70 i- Err bitreich.org 70 i- p = calloc(1, size); Err bitreich.org 70 i- if (p == NULL) Err bitreich.org 70 i- err(1, "%s", __func__); Err bitreich.org 70 i- return p; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-free_buf(uint8_t *buf) Err bitreich.org 70 i-{ Err bitreich.org 70 i- free(buf); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-hash_blk(uint8_t *buf, size_t size, uint8_t *md) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct hash_ctx ctx; Err bitreich.org 70 i- Err bitreich.org 70 i- if (hash_init(&ctx, hash_algo, MD_SIZE) < 0) Err bitreich.org 70 i- errx(1, "hash_init failed"); Err bitreich.org 70 i- hash_update(&ctx, buf, size); Err bitreich.org 70 i- hash_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-read_blk(uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i-{ Err bitreich.org 70 i- ssize_t n; Err bitreich.org 70 i- Err bitreich.org 70 i- xlseek(sfd, blk_desc->offset, SEEK_SET); Err bitreich.org 70 i- n = xread(sfd, buf, blk_desc->size); Err bitreich.org 70 i- if (n == 0) Err bitreich.org 70 i- errx(1, "%s: unexpected EOF", __func__); Err bitreich.org 70 i- if (n != blk_desc->size) Err bitreich.org 70 i- errx(1, "%s: short read", __func__); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i /* Err bitreich.org 70 i * Hash every block referenced by the given snapshot Err bitreich.org 70 i * and compare its hash with the one stored in the corresponding Err bitreich.org 70 i@@ -104,8 +63,8 @@ check_snap(struct snap *snap, void *arg) Err bitreich.org 70 i struct blk_desc *blk_desc; Err bitreich.org 70 i Err bitreich.org 70 i blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i- read_blk(buf, blk_desc); Err bitreich.org 70 i- hash_blk(buf, blk_desc->size, md); Err bitreich.org 70 i+ read_blk(sfd, buf, blk_desc); Err bitreich.org 70 i+ hash_blk(buf, blk_desc->size, md, hash_algo); Err bitreich.org 70 i Err bitreich.org 70 i if (memcmp(blk_desc->md, md, sizeof(blk_desc->md)) == 0) Err bitreich.org 70 i continue; Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -222,3 +222,9 @@ void append_snap(int fd, struct snap_hdr *hdr, struct snap *snap); Err bitreich.org 70 i void hash_snap(struct snap *snap, uint8_t *md, int hash_algo); Err bitreich.org 70 i void walk_snap(int fd, struct snap_hdr *hdr, Err bitreich.org 70 i int (*fn)(struct snap *, void *), void *arg); Err bitreich.org 70 i+uint8_t *alloc_buf(size_t size); Err bitreich.org 70 i+void free_buf(uint8_t *buf); Err bitreich.org 70 i+void read_blk(int fd, uint8_t *buf, struct blk_desc *blk_desc); Err bitreich.org 70 i+void append_blk(int fd, struct blk_hdr *hdr, uint8_t *buf, Err bitreich.org 70 i+ struct blk_desc *blk_desc); Err bitreich.org 70 i+void hash_blk(uint8_t *buf, size_t size, uint8_t *md, int hash_algo); Err bitreich.org 70 1diff --git a/dpack.c b/dpack.c /scm/dedup/file/dpack.c.gph bitreich.org 70 i@@ -28,39 +28,6 @@ static int compr_algo = COMPR_LZ4; Err bitreich.org 70 i int verbose; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i Err bitreich.org 70 i-static uint8_t * Err bitreich.org 70 i-alloc_buf(size_t size) Err bitreich.org 70 i-{ Err bitreich.org 70 i- void *p; Err bitreich.org 70 i- Err bitreich.org 70 i- p = calloc(1, size); Err bitreich.org 70 i- if (p == NULL) Err bitreich.org 70 i- err(1, "%s", __func__); Err bitreich.org 70 i- return p; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-hash_blk(uint8_t *buf, size_t size, uint8_t *md) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct hash_ctx ctx; Err bitreich.org 70 i- Err bitreich.org 70 i- if (hash_init(&ctx, hash_algo, MD_SIZE) < 0) Err bitreich.org 70 i- errx(1, "hash_init failed"); Err bitreich.org 70 i- hash_update(&ctx, buf, size); Err bitreich.org 70 i- hash_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-append_blk(uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i-{ Err bitreich.org 70 i- xlseek(sfd, blk_hdr.size, SEEK_SET); Err bitreich.org 70 i- xwrite(sfd, buf, blk_desc->size); Err bitreich.org 70 i- Err bitreich.org 70 i- if (blk_hdr.size > UINT64_MAX - blk_desc->size) Err bitreich.org 70 i- errx(1, "%s: overflow", __func__); Err bitreich.org 70 i- blk_hdr.size += blk_desc->size; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i static void Err bitreich.org 70 i dedup_chunk(struct snap *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -76,7 +43,7 @@ dedup_chunk(struct snap *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i compr_buf = alloc_buf(csize); Err bitreich.org 70 i Err bitreich.org 70 i n = compr(&ctx, chunkp, compr_buf, chunk_size, csize); Err bitreich.org 70 i- hash_blk(compr_buf, n, md); Err bitreich.org 70 i+ hash_blk(compr_buf, n, md, hash_algo); Err bitreich.org 70 i Err bitreich.org 70 i snap_hdr.st.orig_size += chunk_size; Err bitreich.org 70 i snap_hdr.st.compr_size += n; Err bitreich.org 70 i@@ -87,7 +54,7 @@ dedup_chunk(struct snap *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i blk_desc.size = n; Err bitreich.org 70 i Err bitreich.org 70 i snap->blk_desc[snap->nr_blk_descs++] = blk_desc; Err bitreich.org 70 i- append_blk(compr_buf, &blk_desc); Err bitreich.org 70 i+ append_blk(sfd, &blk_hdr, compr_buf, &blk_desc); Err bitreich.org 70 i Err bitreich.org 70 i insert_icache(icache, &blk_desc); Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/dunpack.c b/dunpack.c /scm/dedup/file/dunpack.c.gph bitreich.org 70 i@@ -33,36 +33,6 @@ static int compr_algo = COMPR_LZ4; Err bitreich.org 70 i int verbose; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i Err bitreich.org 70 i-static uint8_t * Err bitreich.org 70 i-alloc_buf(size_t size) Err bitreich.org 70 i-{ Err bitreich.org 70 i- void *p; Err bitreich.org 70 i- Err bitreich.org 70 i- p = calloc(1, size); Err bitreich.org 70 i- if (p == NULL) Err bitreich.org 70 i- err(1, "%s", __func__); Err bitreich.org 70 i- return p; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-free_buf(uint8_t *buf) Err bitreich.org 70 i-{ Err bitreich.org 70 i- free(buf); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-read_blk(uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i-{ Err bitreich.org 70 i- ssize_t n; Err bitreich.org 70 i- Err bitreich.org 70 i- xlseek(sfd, blk_desc->offset, SEEK_SET); Err bitreich.org 70 i- n = xread(sfd, buf, blk_desc->size); Err bitreich.org 70 i- if (n == 0) Err bitreich.org 70 i- errx(1, "%s: unexpected EOF", __func__); Err bitreich.org 70 i- if (n != blk_desc->size) Err bitreich.org 70 i- errx(1, "%s: short read", __func__); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i static int Err bitreich.org 70 i extract(struct snap *snap, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -83,7 +53,7 @@ extract(struct snap *snap, void *arg) Err bitreich.org 70 i size_t blksize; Err bitreich.org 70 i Err bitreich.org 70 i blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i- read_blk(buf[1], blk_desc); Err bitreich.org 70 i+ read_blk(sfd, buf[1], blk_desc); Err bitreich.org 70 i blksize = decompr(&ctx, buf[1], buf[0], blk_desc->size, BLKSIZE_MAX); Err bitreich.org 70 i xwrite(args->fd, buf[0], blksize); Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/utils.c b/utils.c /scm/dedup/file/utils.c.gph bitreich.org 70 i@@ -234,3 +234,55 @@ walk_snap(int fd, struct snap_hdr *hdr, Err bitreich.org 70 i break; Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i+ Err bitreich.org 70 i+uint8_t * Err bitreich.org 70 i+alloc_buf(size_t size) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ void *p; Err bitreich.org 70 i+ Err bitreich.org 70 i+ p = calloc(1, size); Err bitreich.org 70 i+ if (p == NULL) Err bitreich.org 70 i+ err(1, "%s", __func__); Err bitreich.org 70 i+ return p; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+free_buf(uint8_t *buf) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ free(buf); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+read_blk(int fd, uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ ssize_t n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ xlseek(fd, blk_desc->offset, SEEK_SET); Err bitreich.org 70 i+ n = xread(fd, buf, blk_desc->size); Err bitreich.org 70 i+ if (n == 0) Err bitreich.org 70 i+ errx(1, "%s: unexpected EOF", __func__); Err bitreich.org 70 i+ if (n != blk_desc->size) Err bitreich.org 70 i+ errx(1, "%s: short read", __func__); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+append_blk(int fd, struct blk_hdr *hdr, uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ xlseek(fd, hdr->size, SEEK_SET); Err bitreich.org 70 i+ xwrite(fd, buf, blk_desc->size); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (hdr->size > UINT64_MAX - blk_desc->size) Err bitreich.org 70 i+ errx(1, "%s: overflow", __func__); Err bitreich.org 70 i+ hdr->size += blk_desc->size; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+hash_blk(uint8_t *buf, size_t size, uint8_t *md, int hash_algo) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct hash_ctx ctx; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (hash_init(&ctx, hash_algo, MD_SIZE) < 0) Err bitreich.org 70 i+ errx(1, "hash_init failed"); Err bitreich.org 70 i+ hash_update(&ctx, buf, size); Err bitreich.org 70 i+ hash_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+} Err bitreich.org 70 .