iRework bparam handling in the storage layer - 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 42901e4da4f38681c9cb7defdcce92d5f63b38a6 /scm/dedup/commit/42901e4da4f38681c9cb7defdcce92d5f63b38a6.gph bitreich.org 70 1parent 1e5d78e32e12ac882d187912f60107d025a4dc77 /scm/dedup/commit/1e5d78e32e12ac882d187912f60107d025a4dc77.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Fri, 26 Apr 2019 09:00:44 +0100 Err bitreich.org 70 i Err bitreich.org 70 iRework bparam handling in the storage layer Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M bstorage.c | 67 +++++++++++++------------------ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 27 insertions(+), 40 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/bstorage.c b/bstorage.c /scm/dedup/file/bstorage.c.gph bitreich.org 70 i@@ -44,6 +44,10 @@ Err bitreich.org 70 i #define BHDRSIZE (NBHDRMAGIC + 8 + 8) Err bitreich.org 70 i #define BDSIZE (8 + 8 + 8 + 8 + (MDSIZE)) Err bitreich.org 70 i Err bitreich.org 70 i+#define CNONETYPE 0 Err bitreich.org 70 i+#define CSNAPPYTYPE 1 Err bitreich.org 70 i+#define HBLAKE2BTYPE 0 Err bitreich.org 70 i+ Err bitreich.org 70 i extern int pack(unsigned char *dst, char *fmt, ...); Err bitreich.org 70 i extern int unpack(unsigned char *src, char *fmt, ...); Err bitreich.org 70 i Err bitreich.org 70 i@@ -93,19 +97,6 @@ struct sctx { Err bitreich.org 70 i int rdonly; /* when set to 1, the bssync() operation is a no-op */ Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i-#define NCALGOS 2 Err bitreich.org 70 i-static char *ctbl[] = { Err bitreich.org 70 i- "none", Err bitreich.org 70 i- "snappy", Err bitreich.org 70 i- NULL, Err bitreich.org 70 i-}; Err bitreich.org 70 i- Err bitreich.org 70 i-#define NHALGOS 1 Err bitreich.org 70 i-static char *htbl[] = { Err bitreich.org 70 i- "blake2b", Err bitreich.org 70 i- NULL, Err bitreich.org 70 i-}; Err bitreich.org 70 i- Err bitreich.org 70 i static int Err bitreich.org 70 i bd_cmp(struct bd *b1, struct bd *b2) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -318,7 +309,6 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70 i { Err bitreich.org 70 i struct sctx *sctx; Err bitreich.org 70 i struct bhdr *bhdr; Err bitreich.org 70 i- char **algo; Err bitreich.org 70 i int fd; Err bitreich.org 70 i Err bitreich.org 70 i fd = open(path, O_RDWR | O_CREAT | O_EXCL, mode); Err bitreich.org 70 i@@ -337,33 +327,21 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70 i memcpy(bhdr->magic, BHDRMAGIC, NBHDRMAGIC); Err bitreich.org 70 i bhdr->flags = (VMAJ << VMAJSHIFT) | VMIN; Err bitreich.org 70 i Err bitreich.org 70 i- /* Set compression algorithm */ Err bitreich.org 70 i- for (algo = ctbl; *algo; algo++) { Err bitreich.org 70 i- if (strcmp(*algo, bpar->calgo) == 0) { Err bitreich.org 70 i- uint64_t v; Err bitreich.org 70 i- Err bitreich.org 70 i- v = algo - ctbl; Err bitreich.org 70 i- bhdr->flags |= v << CALGOSHIFT; Err bitreich.org 70 i- break; Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i- if (*algo == NULL) { Err bitreich.org 70 i+ /* Set compression type */ Err bitreich.org 70 i+ if (strcmp(bpar->calgo, "none") == 0) { Err bitreich.org 70 i+ bhdr->flags |= CNONETYPE << CALGOSHIFT; Err bitreich.org 70 i+ } else if (strcmp(bpar->calgo, "snappy") == 0) { Err bitreich.org 70 i+ bhdr->flags |= CSNAPPYTYPE << CALGOSHIFT; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i close(fd); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- /* Set hash algorithm */ Err bitreich.org 70 i- for (algo = htbl; *algo; algo++) { Err bitreich.org 70 i- if (strcmp(*algo, bpar->halgo) == 0) { Err bitreich.org 70 i- uint64_t v; Err bitreich.org 70 i- Err bitreich.org 70 i- v = algo - htbl; Err bitreich.org 70 i- bhdr->flags |= v << HALGOSHIFT; Err bitreich.org 70 i- break; Err bitreich.org 70 i- } Err bitreich.org 70 i- } Err bitreich.org 70 i- if (*algo == NULL) { Err bitreich.org 70 i+ /* Set hash type */ Err bitreich.org 70 i+ if (strcmp(bpar->halgo, "blake2b") == 0) { Err bitreich.org 70 i+ bhdr->flags |= HBLAKE2BTYPE << HALGOSHIFT; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i close(fd); Err bitreich.org 70 i return -1; Err bitreich.org 70 i@@ -423,20 +401,29 @@ bsopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70 i Err bitreich.org 70 i /* Populate bparam */ Err bitreich.org 70 i calgo = (bhdr->flags >> CALGOSHIFT) & CALGOMASK; Err bitreich.org 70 i- if (calgo < 0 || calgo >= NCALGOS) { Err bitreich.org 70 i+ switch (calgo) { Err bitreich.org 70 i+ case CNONETYPE: Err bitreich.org 70 i+ bpar->calgo = "none"; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case CSNAPPYTYPE: Err bitreich.org 70 i+ bpar->calgo = "snappy"; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i close(fd); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i- bpar->calgo = ctbl[calgo]; Err bitreich.org 70 i Err bitreich.org 70 i halgo = (bhdr->flags >> HALGOSHIFT) & HALGOMASK; Err bitreich.org 70 i- if (halgo < 0 || halgo >= NHALGOS) { Err bitreich.org 70 i+ switch (halgo) { Err bitreich.org 70 i+ case HBLAKE2BTYPE: Err bitreich.org 70 i+ bpar->halgo = "blake2b"; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i free(sctx); Err bitreich.org 70 i close(fd); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i- bpar->halgo = htbl[halgo]; Err bitreich.org 70 i Err bitreich.org 70 i sctx->fd = fd; Err bitreich.org 70 i sctx->rdonly = flags == O_RDONLY; Err bitreich.org 70 .