iRework additional data handling - 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 faf2fab2ac2febc631159913683d1c3dbc5166b3 /scm/dedup/commit/faf2fab2ac2febc631159913683d1c3dbc5166b3.gph bitreich.org 70 1parent 01c8fce481e7a253ac9a96c4bbc877aab2945586 /scm/dedup/commit/01c8fce481e7a253ac9a96c4bbc877aab2945586.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sun, 12 May 2019 16:36:27 +0100 Err bitreich.org 70 i Err bitreich.org 70 iRework additional data handling Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M snap.c | 75 +++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 36 insertions(+), 39 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/snap.c b/snap.c /scm/dedup/file/snap.c.gph bitreich.org 70 i@@ -61,18 +61,12 @@ struct sctx { Err bitreich.org 70 i struct shdr shdr; /* snapshot header */ Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i-/* Read snapshot header */ Err bitreich.org 70 i+/* Unpack snapshot header */ Err bitreich.org 70 i static int Err bitreich.org 70 i-unpackshdr(int fd, struct shdr *shdr) Err bitreich.org 70 i+unpackshdr(unsigned char *buf, 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- seterr("failed to read snapshot header: %s", strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i n = unpack(buf, "'16'24qq", Err bitreich.org 70 i shdr->magic, Err bitreich.org 70 i shdr->header, Err bitreich.org 70 i@@ -83,11 +77,10 @@ unpackshdr(int fd, struct shdr *shdr) Err bitreich.org 70 i return n; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-/* Write snapshot header */ Err bitreich.org 70 i+/* Pack snapshot header */ Err bitreich.org 70 i static int Err bitreich.org 70 i-packshdr(int fd, struct shdr *shdr) Err bitreich.org 70 i+packshdr(unsigned char *buf, 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, "'16'24qq", Err bitreich.org 70 i@@ -97,36 +90,25 @@ packshdr(int fd, struct shdr *shdr) Err bitreich.org 70 i shdr->nbd); Err bitreich.org 70 i Err bitreich.org 70 i assert(n == SHDRSIZE); Err bitreich.org 70 i- if (xwrite(fd, buf, n) != n) { Err bitreich.org 70 i- seterr("failed to write snapshot header: %s", strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i return n; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i initmdhead(struct sctx *sctx) Err bitreich.org 70 i { Err bitreich.org 70 i- unsigned char ad[SHDRSIZE]; Err bitreich.org 70 i struct shdr *shdr; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- if (lseek(sctx->fd, 0, SEEK_SET) < 0) { Err bitreich.org 70 i- seterr("lseek: %s", strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- if (xread(sctx->fd, ad, sizeof(ad)) != sizeof(ad)) { Err bitreich.org 70 i- seterr("failed to read snapshot header: %s\n", strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i shdr = &sctx->shdr; Err bitreich.org 70 i if (sctx->crypto) { Err bitreich.org 70 i+ unsigned char ad[SHDRSIZE]; Err bitreich.org 70 i crypto_secretstream_xchacha20poly1305_state state; Err bitreich.org 70 i struct shdr *shdr; Err bitreich.org 70 i Err bitreich.org 70 i shdr = &sctx->shdr; Err bitreich.org 70 i+ if (packshdr(ad, shdr) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i if (crypto_secretstream_xchacha20poly1305_init_pull(&state, Err bitreich.org 70 i shdr->header, Err bitreich.org 70 i param.key) != 0) { Err bitreich.org 70 i@@ -196,6 +178,7 @@ err0: Err bitreich.org 70 i int Err bitreich.org 70 i screat(char *path, int mode, struct sctx **sctx) Err bitreich.org 70 i { Err bitreich.org 70 i+ unsigned char buf[SHDRSIZE]; Err bitreich.org 70 i struct shdr *shdr; Err bitreich.org 70 i int crypto; Err bitreich.org 70 i int fd; Err bitreich.org 70 i@@ -249,18 +232,24 @@ screat(char *path, int mode, struct sctx **sctx) Err bitreich.org 70 i shdr->flags = (VMAJ << VMAJSHIFT) | VMIN; Err bitreich.org 70 i shdr->nbd = 0; Err bitreich.org 70 i Err bitreich.org 70 i- if (packshdr(fd, shdr) < 0) { Err bitreich.org 70 i+ if (packshdr(buf, shdr) < 0) { 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+ if (xwrite(fd, buf, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i+ seterr("failed to write snapshot header: %s", strerror(errno)); 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 i Err bitreich.org 70 i int Err bitreich.org 70 i sopen(char *path, int flags, int mode, struct sctx **sctx) Err bitreich.org 70 i { Err bitreich.org 70 i+ unsigned char buf[SHDRSIZE]; Err bitreich.org 70 i struct shdr *shdr; Err bitreich.org 70 i int crypto; Err bitreich.org 70 i int fd; Err bitreich.org 70 i@@ -312,7 +301,12 @@ sopen(char *path, int flags, int mode, struct sctx **sctx) Err bitreich.org 70 i Err bitreich.org 70 i shdr = &(*sctx)->shdr; Err bitreich.org 70 i Err bitreich.org 70 i- if (unpackshdr(fd, shdr) < 0) { Err bitreich.org 70 i+ if (xread(fd, buf, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i+ seterr("failed to read snapshot header: %s", strerror(errno)); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (unpackshdr(buf, shdr) < 0) { 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@@ -419,23 +413,18 @@ ssync(struct sctx *sctx) Err bitreich.org 70 i Err bitreich.org 70 i shdr = &sctx->shdr; Err bitreich.org 70 i if (sctx->crypto) { Err bitreich.org 70 i- unsigned char ad[SHDRSIZE]; Err bitreich.org 70 i+ unsigned char hdr[SHDRSIZE]; Err bitreich.org 70 i crypto_secretstream_xchacha20poly1305_state state; Err bitreich.org 70 i Err bitreich.org 70 i crypto_secretstream_xchacha20poly1305_init_push(&state, Err bitreich.org 70 i shdr->header, Err bitreich.org 70 i param.key); Err bitreich.org 70 i Err bitreich.org 70 i- if (packshdr(sctx->fd, shdr) < 0) Err bitreich.org 70 i+ if (packshdr(hdr, shdr) < 0) Err bitreich.org 70 i return -1; Err bitreich.org 70 i Err bitreich.org 70 i- if (lseek(sctx->fd, 0, SEEK_SET) < 0) { Err bitreich.org 70 i- seterr("lseek: %s", strerror(errno)); Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- if (xread(sctx->fd, ad, sizeof(ad)) != sizeof(ad)) { Err bitreich.org 70 i- seterr("failed to read snapshot header: %s\n", strerror(errno)); Err bitreich.org 70 i+ if (xwrite(sctx->fd, hdr, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i+ seterr("failed to write snapshot header: %s", strerror(errno)); Err bitreich.org 70 i return -1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -451,7 +440,7 @@ ssync(struct sctx *sctx) Err bitreich.org 70 i crypto_secretstream_xchacha20poly1305_push(&state, Err bitreich.org 70 i buf, NULL, Err bitreich.org 70 i mdnode->md, MDSIZE, Err bitreich.org 70 i- ad, sizeof(ad), tag); Err bitreich.org 70 i+ hdr, SHDRSIZE, tag); Err bitreich.org 70 i if (xwrite(sctx->fd, buf, sizeof(buf)) != sizeof(buf)) { Err bitreich.org 70 i seterr("failed to write block hash: %s", Err bitreich.org 70 i strerror(errno)); Err bitreich.org 70 i@@ -459,8 +448,16 @@ ssync(struct sctx *sctx) Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i } else { Err bitreich.org 70 i- if (packshdr(sctx->fd, shdr) < 0) Err bitreich.org 70 i+ unsigned char hdr[SHDRSIZE]; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (packshdr(hdr, shdr) < 0) Err bitreich.org 70 i return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (xwrite(sctx->fd, hdr, SHDRSIZE) != SHDRSIZE) { Err bitreich.org 70 i+ seterr("failed to write snapshot header: %s", strerror(errno)); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i TAILQ_FOREACH(mdnode, &sctx->mdhead, e) { Err bitreich.org 70 i if (xwrite(sctx->fd, mdnode->md, MDSIZE) != MDSIZE) { Err bitreich.org 70 i seterr("failed to write block hash: %s", Err bitreich.org 70 .