SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/dedup/commit/8ef5e9d6666a818d...
Content-Typetext/plain; charset=utf-8