iImplement state file - 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 8ef5e9d6666a818d610e1e1b1ffefa552f2c76f6 /scm/dedup/commit/8ef5e9d6666a818d610e1e1b1ffefa552f2c76f6.gph bitreich.org 70
1parent a54afccf81b4152c8767ea4eaee2f93e39ac9eba /scm/dedup/commit/a54afccf81b4152c8767ea4eaee2f93e39ac9eba.gph bitreich.org 70
hAuthor: sin <sin@2f30.org> URL:mailto:sin@2f30.org bitreich.org 70
iDate: Wed, 8 May 2019 01:14:33 +0100 Err bitreich.org 70
i Err bitreich.org 70
iImplement state file Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 2 ++ Err bitreich.org 70
i A state.c | 140 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i A state.h | 4 ++++ Err bitreich.org 70
i Err bitreich.org 70
i3 files changed, 146 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/dedup/file/Makefile.gph bitreich.org 70
i@@ -13,6 +13,7 @@ HDR = \ Err bitreich.org 70
i misc.h \ Err bitreich.org 70
i queue.h \ Err bitreich.org 70
i snap.h \ Err bitreich.org 70
i+ state.h \ Err bitreich.org 70
i tree.h \ Err bitreich.org 70
i Err bitreich.org 70
i COMMOBJ = \ Err bitreich.org 70
i@@ -27,6 +28,7 @@ COMMOBJ = \ Err bitreich.org 70
i misc.o \ Err bitreich.org 70
i pack.o \ Err bitreich.org 70
i snap.o \ Err bitreich.org 70
i+ state.o \ Err bitreich.org 70
i unpack.o \ Err bitreich.org 70
i Err bitreich.org 70
i DCHECKOBJ = $(COMMOBJ) dup-check.o Err bitreich.org 70
1diff --git a/state.c b/state.c /scm/dedup/file/state.c.gph bitreich.org 70
i@@ -0,0 +1,140 @@ Err bitreich.org 70
i+#include <assert.h> Err bitreich.org 70
i+#include <stdint.h> Err bitreich.org 70
i+#include <stdio.h> Err bitreich.org 70
i+#include <string.h> Err bitreich.org 70
i+#include <strings.h> Err bitreich.org 70
i+ Err bitreich.org 70
i+#include "misc.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i+ Err bitreich.org 70
i+#define VMIN 0 Err bitreich.org 70
i+#define VMAJ 1 Err bitreich.org 70
i+#define VMINMASK 0xff Err bitreich.org 70
i+#define VMAJSHIFT 8 Err bitreich.org 70
i+#define VMAJMASK 0xff Err bitreich.org 70
i+ Err bitreich.org 70
i+#define CALGOSHIFT 16 Err bitreich.org 70
i+#define CALGOMASK 0x7 Err bitreich.org 70
i+#define CNONETYPE 0 Err bitreich.org 70
i+#define CSNAPPYTYPE 1 Err bitreich.org 70
i+#define CLZ4TYPE 2 Err bitreich.org 70
i+ Err bitreich.org 70
i+#define EALGOSHIFT 19 Err bitreich.org 70
i+#define EALGOMASK 0x7 Err bitreich.org 70
i+#define ENONETYPE 0 Err bitreich.org 70
i+#define ECHACHATYPE 1 Err bitreich.org 70
i+ Err bitreich.org 70
i+#define SHDRSIZE 8 Err bitreich.org 70
i+ Err bitreich.org 70
i+/* misc helpers */ Err bitreich.org 70
i+extern int pack(unsigned char *, char *, ...); Err bitreich.org 70
i+extern int unpack(unsigned char *, char *, ...); Err bitreich.org 70
i+ Err bitreich.org 70
i+struct shdr { Err bitreich.org 70
i+ uint64_t flags; Err bitreich.org 70
i+}; Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Read state header */ Err bitreich.org 70
i+static int Err bitreich.org 70
i+unpackshdr(int fd, struct shdr *shdr) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ unsigned char buf[SHDRSIZE]; Err bitreich.org 70
i+ int n; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (xread(fd, buf, sizeof(buf)) != sizeof(buf)) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ Err bitreich.org 70
i+ n = unpack(buf, "q", &shdr->flags); Err bitreich.org 70
i+ assert(n == sizeof(buf)); Err bitreich.org 70
i+ return n; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Write state header */ Err bitreich.org 70
i+static int Err bitreich.org 70
i+packshdr(int fd, struct shdr *shdr) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ unsigned char buf[SHDRSIZE]; Err bitreich.org 70
i+ int n; Err bitreich.org 70
i+ Err bitreich.org 70
i+ n = pack(buf, "q", shdr->flags); Err bitreich.org 70
i+ assert(n == SHDRSIZE); Err bitreich.org 70
i+ if (xwrite(fd, buf, n) != n) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ return n; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+int Err bitreich.org 70
i+savestate(int fd, struct param *par) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ struct shdr shdr; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Set version */ Err bitreich.org 70
i+ shdr.flags = (VMAJ << VMAJSHIFT) | VMIN; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Set compression type */ Err bitreich.org 70
i+ if (strcasecmp(par->calgo, "none") == 0) Err bitreich.org 70
i+ shdr.flags |= CNONETYPE << CALGOSHIFT; Err bitreich.org 70
i+ else if (strcasecmp(par->calgo, "snappy") == 0) Err bitreich.org 70
i+ shdr.flags |= CSNAPPYTYPE << CALGOSHIFT; Err bitreich.org 70
i+ else if (strcasecmp(par->calgo, "lz4") == 0) Err bitreich.org 70
i+ shdr.flags |= CLZ4TYPE << CALGOSHIFT; Err bitreich.org 70
i+ else Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Set encryption type */ Err bitreich.org 70
i+ if (strcasecmp(par->ealgo, "none") == 0) Err bitreich.org 70
i+ shdr.flags |= ENONETYPE << EALGOSHIFT; Err bitreich.org 70
i+ else if (strcasecmp(par->ealgo, "XChaCha20-Poly1305") == 0) Err bitreich.org 70
i+ shdr.flags |= ECHACHATYPE << EALGOSHIFT; Err bitreich.org 70
i+ else Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (packshdr(fd, &shdr) < 0) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+int Err bitreich.org 70
i+loadstate(int fd, struct param *par) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ struct shdr shdr; Err bitreich.org 70
i+ int algo; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (unpackshdr(fd, &shdr) < 0) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* If the major version is different, the format is incompatible */ Err bitreich.org 70
i+ if (((shdr.flags >> VMAJSHIFT) & VMAJMASK) != VMAJ) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Populate param compression algo */ Err bitreich.org 70
i+ algo = (shdr.flags >> CALGOSHIFT) & CALGOMASK; Err bitreich.org 70
i+ switch (algo) { Err bitreich.org 70
i+ case CNONETYPE: Err bitreich.org 70
i+ par->calgo = "none"; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ case CSNAPPYTYPE: Err bitreich.org 70
i+ par->calgo = "snappy"; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ case CLZ4TYPE: Err bitreich.org 70
i+ par->calgo = "lz4"; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ default: Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Populate param encryption algo */ Err bitreich.org 70
i+ algo = (shdr.flags >> EALGOSHIFT) & EALGOMASK; Err bitreich.org 70
i+ switch (algo) { Err bitreich.org 70
i+ case ENONETYPE: Err bitreich.org 70
i+ par->ealgo = "none"; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ case ECHACHATYPE: Err bitreich.org 70
i+ par->ealgo = "XChaCha20-Poly1305"; Err bitreich.org 70
i+ break; Err bitreich.org 70
i+ default: Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+} Err bitreich.org 70
1diff --git a/state.h b/state.h /scm/dedup/file/state.h.gph bitreich.org 70
i@@ -0,0 +1,4 @@ Err bitreich.org 70
i+struct param { Err bitreich.org 70
i+ char *calgo; Err bitreich.org 70
i+ char *ealgo; Err bitreich.org 70
i+}; Err bitreich.org 70
.
Response:
text/plain