iImplement check function - 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 27d4cd35a9abcf80ec50ae3a55fff5fc22dd3e99 /scm/dedup/commit/27d4cd35a9abcf80ec50ae3a55fff5fc22dd3e99.gph bitreich.org 70 1parent e11aca811109d7e85694e8fbe2773ef5b9068e19 /scm/dedup/commit/e11aca811109d7e85694e8fbe2773ef5b9068e19.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Wed, 21 Mar 2018 10:21:23 +0000 Err bitreich.org 70 i Err bitreich.org 70 iImplement check function Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.c | 36 +++++++++++++++++++++++++------ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 29 insertions(+), 7 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -307,14 +307,16 @@ term(void) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-dump_index(void) Err bitreich.org 70 i+check(void) Err bitreich.org 70 i { Err bitreich.org 70 i- struct ent *ent; Err bitreich.org 70 i- uint64_t i; Err bitreich.org 70 i+ uint64_t i, j; Err bitreich.org 70 i Err bitreich.org 70 i- dump_enthdr(&enthdr); Err bitreich.org 70 i lseek(ifd, sizeof(enthdr), SEEK_SET); Err bitreich.org 70 i for (i = 0; i < enthdr.nents; i++) { Err bitreich.org 70 i+ unsigned char md[SHA256_DIGEST_LENGTH]; Err bitreich.org 70 i+ SHA256_CTX ctx; Err bitreich.org 70 i+ struct ent *ent; Err bitreich.org 70 i+ Err bitreich.org 70 i ent = alloc_ent(); Err bitreich.org 70 i if (xread(ifd, ent, sizeof(*ent)) == 0) Err bitreich.org 70 i errx(1, "unexpected EOF"); Err bitreich.org 70 i@@ -322,7 +324,19 @@ dump_index(void) Err bitreich.org 70 i if (xread(ifd, ent->blks, Err bitreich.org 70 i ent->nblks * sizeof(ent->blks[0])) == 0) Err bitreich.org 70 i errx(1, "unexpected EOF"); Err bitreich.org 70 i- dump_ent(ent); Err bitreich.org 70 i+ Err bitreich.org 70 i+ SHA256_Init(&ctx); Err bitreich.org 70 i+ for (j = 0; j < ent->nblks; j++) { Err bitreich.org 70 i+ struct blk blk; Err bitreich.org 70 i+ Err bitreich.org 70 i+ read_blk(&blk, ent->blks[j]); Err bitreich.org 70 i+ SHA256_Update(&ctx, blk.data, blk.sz); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ SHA256_Final(md, &ctx); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (memcmp(ent->md, md, sizeof(ent->md)) != 0) Err bitreich.org 70 i+ errx(1, "hash mismatch"); Err bitreich.org 70 i+ Err bitreich.org 70 i free(ent); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i@@ -347,7 +361,7 @@ list(void) Err bitreich.org 70 i void Err bitreich.org 70 i usage(void) Err bitreich.org 70 i { Err bitreich.org 70 i- fprintf(stderr, "usage: %s [-lv] [-e id]\n", argv0); Err bitreich.org 70 i+ fprintf(stderr, "usage: %s [-clv] [-e id]\n", argv0); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -355,9 +369,12 @@ int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i unsigned char *id = NULL; Err bitreich.org 70 i- int lflag = 0; Err bitreich.org 70 i+ int lflag = 0, cflag = 0; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i+ case 'c': Err bitreich.org 70 i+ cflag = 1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'e': Err bitreich.org 70 i id = EARGF(usage()); Err bitreich.org 70 i break; Err bitreich.org 70 i@@ -373,6 +390,11 @@ main(int argc, char *argv[]) Err bitreich.org 70 i Err bitreich.org 70 i init(); Err bitreich.org 70 i Err bitreich.org 70 i+ if (cflag) { Err bitreich.org 70 i+ check(); Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i if (lflag) { Err bitreich.org 70 i list(); Err bitreich.org 70 i return 0; Err bitreich.org 70 .