iRework types - 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 ec64133a5a57e21b3565368df37eae469c260755 /scm/dedup/commit/ec64133a5a57e21b3565368df37eae469c260755.gph bitreich.org 70 1parent 4029c846bc6e9b84ba02740fecae68cd8232c765 /scm/dedup/commit/4029c846bc6e9b84ba02740fecae68cd8232c765.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Thu, 28 Feb 2019 13:01:18 +0000 Err bitreich.org 70 i Err bitreich.org 70 iRework types Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.c | 134 +++++++++++++++++++++---------- Err bitreich.org 70 i M dedup.h | 24 ++++++++++++++++-------- Err bitreich.org 70 i M types.c | 99 ++++++++++++++++++++++--------- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 178 insertions(+), 79 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@@ -31,7 +31,8 @@ struct extract_args { Err bitreich.org 70 i int ret; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i-static struct snapshot_hdr snaphdr; Err bitreich.org 70 i+static struct snapshot_hdr snap_hdr; Err bitreich.org 70 i+static struct blk_hdr blk_hdr; Err bitreich.org 70 i static struct cache *cache; Err bitreich.org 70 i static int ifd; Err bitreich.org 70 i static int sfd; Err bitreich.org 70 i@@ -105,15 +106,11 @@ print_stats(struct stats *st) Err bitreich.org 70 i static void Err bitreich.org 70 i append_snap(struct snapshot *snap) Err bitreich.org 70 i { Err bitreich.org 70 i- /* Update snapshot header */ Err bitreich.org 70 i- snaphdr.nr_snapshots++; Err bitreich.org 70 i- xlseek(ifd, 0, SEEK_SET); Err bitreich.org 70 i- write_snaphdr(ifd, &snaphdr); Err bitreich.org 70 i- Err bitreich.org 70 i- /* Append snapshot */ Err bitreich.org 70 i- xlseek(ifd, 0, SEEK_END); Err bitreich.org 70 i+ xlseek(ifd, snap_hdr.size, SEEK_SET); Err bitreich.org 70 i write_snapshot(ifd, snap); Err bitreich.org 70 i write_snapshot_blk_descs(ifd, snap); Err bitreich.org 70 i+ snap_hdr.size += snap->size; Err bitreich.org 70 i+ snap_hdr.nr_snapshots++; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static struct snapshot * Err bitreich.org 70 i@@ -190,9 +187,9 @@ read_blk(uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i static void Err bitreich.org 70 i append_blk(uint8_t *buf, struct blk_desc *blk_desc) Err bitreich.org 70 i { Err bitreich.org 70 i- xlseek(sfd, snaphdr.store_size, SEEK_SET); Err bitreich.org 70 i+ xlseek(sfd, blk_hdr.size, SEEK_SET); Err bitreich.org 70 i xwrite(sfd, buf, blk_desc->size); Err bitreich.org 70 i- snaphdr.store_size += blk_desc->size; Err bitreich.org 70 i+ blk_hdr.size += blk_desc->size; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -208,15 +205,15 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i n = comp(chunkp, comp_buf, chunk_size, comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i hash_blk(comp_buf, n, md); Err bitreich.org 70 i Err bitreich.org 70 i- snaphdr.st.orig_size += chunk_size; Err bitreich.org 70 i- snaphdr.st.comp_size += n; Err bitreich.org 70 i+ blk_hdr.st.orig_size += chunk_size; Err bitreich.org 70 i+ blk_hdr.st.comp_size += n; Err bitreich.org 70 i Err bitreich.org 70 i memcpy(cache_entry.md, md, sizeof(cache_entry.md)); Err bitreich.org 70 i if (lookup_cache_entry(cache, &cache_entry) < 0) { Err bitreich.org 70 i struct blk_desc blk_desc; Err bitreich.org 70 i Err bitreich.org 70 i memcpy(&blk_desc.md, md, sizeof(blk_desc.md)); Err bitreich.org 70 i- blk_desc.offset = snaphdr.store_size; Err bitreich.org 70 i+ blk_desc.offset = blk_hdr.size; Err bitreich.org 70 i blk_desc.size = n; Err bitreich.org 70 i Err bitreich.org 70 i snap->blk_desc[snap->nr_blk_descs++] = blk_desc; Err bitreich.org 70 i@@ -228,13 +225,13 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i add_cache_entry(cache, &cache_entry); Err bitreich.org 70 i cache_misses++; Err bitreich.org 70 i Err bitreich.org 70 i- snaphdr.st.dedup_size += blk_desc.size; Err bitreich.org 70 i- snaphdr.st.nr_blks++; Err bitreich.org 70 i+ blk_hdr.st.dedup_size += blk_desc.size; Err bitreich.org 70 i+ blk_hdr.st.nr_blks++; Err bitreich.org 70 i Err bitreich.org 70 i- if (blk_desc.size > snaphdr.st.max_blk_size) Err bitreich.org 70 i- snaphdr.st.max_blk_size = blk_desc.size; Err bitreich.org 70 i- if (blk_desc.size < snaphdr.st.min_blk_size) Err bitreich.org 70 i- snaphdr.st.min_blk_size = blk_desc.size; Err bitreich.org 70 i+ if (blk_desc.size > blk_hdr.st.max_blk_size) Err bitreich.org 70 i+ blk_hdr.st.max_blk_size = blk_desc.size; Err bitreich.org 70 i+ if (blk_desc.size < blk_hdr.st.min_blk_size) Err bitreich.org 70 i+ blk_hdr.st.min_blk_size = blk_desc.size; Err bitreich.org 70 i } else { Err bitreich.org 70 i struct blk_desc blk_desc; Err bitreich.org 70 i Err bitreich.org 70 i@@ -406,7 +403,7 @@ walk_snap(int (*fn)(struct snapshot *, void *), void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- for (i = 0; i < snaphdr.nr_snapshots; i++) { Err bitreich.org 70 i+ for (i = 0; i < snap_hdr.nr_snapshots; i++) { Err bitreich.org 70 i struct snapshot *snap; Err bitreich.org 70 i int ret; Err bitreich.org 70 i Err bitreich.org 70 i@@ -422,6 +419,19 @@ walk_snap(int (*fn)(struct snapshot *, void *), void *arg) Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+static void Err bitreich.org 70 i+match_ver(uint64_t v) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ uint8_t maj, min; Err bitreich.org 70 i+ Err bitreich.org 70 i+ min = v & 0xff; Err bitreich.org 70 i+ maj = (v >> 8) & 0xff; Err bitreich.org 70 i+ if (maj == VER_MAJ && min == VER_MIN) Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ errx(1, "format version mismatch: expected %u.%u but got %u.%u", Err bitreich.org 70 i+ VER_MAJ, VER_MIN, maj, min); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i static int Err bitreich.org 70 i flush_cache(struct cache_entry *cache_entry) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -441,7 +451,7 @@ load_cache(void) Err bitreich.org 70 i Err bitreich.org 70 i nr_entries = sb.st_size / CACHE_ENTRY_LEN; Err bitreich.org 70 i if (nr_entries == 0) { Err bitreich.org 70 i- xlseek(ifd, SNAPHDR_LEN, SEEK_SET); Err bitreich.org 70 i+ xlseek(ifd, SNAP_HDR_LEN, SEEK_SET); Err bitreich.org 70 i walk_snap(rebuild_cache, NULL); Err bitreich.org 70 i return; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -455,26 +465,63 @@ load_cache(void) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-load_snaphdr(void) Err bitreich.org 70 i+save_cache(void) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ if (cache_dirty) { Err bitreich.org 70 i+ xlseek(cfd, 0, SEEK_SET); Err bitreich.org 70 i+ walk_cache(cache, flush_cache); Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static void Err bitreich.org 70 i+load_blk_hdr(void) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct stat sb; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (fstat(sfd, &sb) < 0) Err bitreich.org 70 i+ err(1, "fstat %s", STOREF); Err bitreich.org 70 i+ if (sb.st_size == 0) { Err bitreich.org 70 i+ blk_hdr.flags = (VER_MAJ << 8) | VER_MIN; Err bitreich.org 70 i+ blk_hdr.size = BLK_HDR_LEN; Err bitreich.org 70 i+ blk_hdr.st.min_blk_size = comp_size(BLKSIZE_MAX); Err bitreich.org 70 i+ write_blk_hdr(sfd, &blk_hdr); Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ read_blk_hdr(sfd, &blk_hdr); Err bitreich.org 70 i+ match_ver(blk_hdr.flags); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static void Err bitreich.org 70 i+save_blk_hdr(void) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ xlseek(sfd, 0, SEEK_SET); Err bitreich.org 70 i+ write_blk_hdr(sfd, &blk_hdr); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static void Err bitreich.org 70 i+load_snap_hdr(void) Err bitreich.org 70 i { Err bitreich.org 70 i- uint8_t maj, min; Err bitreich.org 70 i struct stat sb; Err bitreich.org 70 i Err bitreich.org 70 i if (fstat(ifd, &sb) < 0) Err bitreich.org 70 i err(1, "fstat %s", SNAPSF); Err bitreich.org 70 i if (sb.st_size == 0) { Err bitreich.org 70 i- snaphdr.flags = (VER_MAJ << 8) | VER_MIN; Err bitreich.org 70 i- snaphdr.st.min_blk_size = comp_size(BLKSIZE_MAX); Err bitreich.org 70 i- write_snaphdr(ifd, &snaphdr); Err bitreich.org 70 i+ snap_hdr.flags = (VER_MAJ << 8) | VER_MIN; Err bitreich.org 70 i+ snap_hdr.size = SNAP_HDR_LEN; Err bitreich.org 70 i+ write_snap_hdr(ifd, &snap_hdr); Err bitreich.org 70 i return; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- read_snaphdr(ifd, &snaphdr); Err bitreich.org 70 i- min = snaphdr.flags & 0xff; Err bitreich.org 70 i- maj = (snaphdr.flags >> 8) & 0xff; Err bitreich.org 70 i- if (maj != VER_MAJ || min != VER_MIN) Err bitreich.org 70 i- errx(1, "format version mismatch: expected %u.%u but got %u.%u", Err bitreich.org 70 i- VER_MAJ, VER_MIN, maj, min); Err bitreich.org 70 i+ read_snap_hdr(ifd, &snap_hdr); Err bitreich.org 70 i+ match_ver(snap_hdr.flags); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static void Err bitreich.org 70 i+save_snap_hdr(void) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ xlseek(ifd, 0, SEEK_SET); Err bitreich.org 70 i+ write_snap_hdr(ifd, &snap_hdr); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -499,21 +546,20 @@ init(void) Err bitreich.org 70 i flock(cfd, LOCK_NB | LOCK_EX) < 0) Err bitreich.org 70 i errx(1, "busy lock"); Err bitreich.org 70 i Err bitreich.org 70 i- load_snaphdr(); Err bitreich.org 70 i+ load_snap_hdr(); Err bitreich.org 70 i+ load_blk_hdr(); Err bitreich.org 70 i load_cache(); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i term(void) Err bitreich.org 70 i { Err bitreich.org 70 i- if (verbose) Err bitreich.org 70 i- print_stats(&snaphdr.st); Err bitreich.org 70 i+ if (verbose > 0) Err bitreich.org 70 i+ print_stats(&blk_hdr.st); Err bitreich.org 70 i Err bitreich.org 70 i- if (cache_dirty) { Err bitreich.org 70 i- xlseek(cfd, 0, SEEK_SET); Err bitreich.org 70 i- walk_cache(cache, flush_cache); Err bitreich.org 70 i- } Err bitreich.org 70 i- free_cache(cache); Err bitreich.org 70 i+ save_snap_hdr(); Err bitreich.org 70 i+ save_blk_hdr(); Err bitreich.org 70 i+ save_cache(); Err bitreich.org 70 i Err bitreich.org 70 i fsync(ifd); Err bitreich.org 70 i fsync(sfd); Err bitreich.org 70 i@@ -522,6 +568,8 @@ term(void) Err bitreich.org 70 i close(ifd); Err bitreich.org 70 i close(sfd); Err bitreich.org 70 i close(cfd); Err bitreich.org 70 i+ Err bitreich.org 70 i+ free_cache(cache); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -589,14 +637,14 @@ main(int argc, char *argv[]) Err bitreich.org 70 i init(); Err bitreich.org 70 i Err bitreich.org 70 i if (cflag) { Err bitreich.org 70 i- xlseek(ifd, SNAPHDR_LEN, SEEK_SET); Err bitreich.org 70 i+ xlseek(ifd, SNAP_HDR_LEN, SEEK_SET); Err bitreich.org 70 i walk_snap(check, NULL); Err bitreich.org 70 i term(); 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- xlseek(ifd, SNAPHDR_LEN, SEEK_SET); Err bitreich.org 70 i+ xlseek(ifd, SNAP_HDR_LEN, SEEK_SET); Err bitreich.org 70 i walk_snap(list, NULL); Err bitreich.org 70 i term(); Err bitreich.org 70 i return 0; Err bitreich.org 70 i@@ -605,7 +653,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i if (id) { Err bitreich.org 70 i struct extract_args args; Err bitreich.org 70 i Err bitreich.org 70 i- xlseek(ifd, SNAPHDR_LEN, SEEK_SET); Err bitreich.org 70 i+ xlseek(ifd, SNAP_HDR_LEN, SEEK_SET); Err bitreich.org 70 i str2bin(id, md); Err bitreich.org 70 i args.md = md; Err bitreich.org 70 i args.fd = fd; Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -6,16 +6,17 @@ Err bitreich.org 70 i * using the helpers from types.c. Any modification made to Err bitreich.org 70 i * the structs below will need to be reflected here and in types.c. Err bitreich.org 70 i */ Err bitreich.org 70 i-#define SNAPHDR_LEN 152 Err bitreich.org 70 i-#define BLKDESC_LEN 48 Err bitreich.org 70 i+#define SNAP_HDR_LEN 56 Err bitreich.org 70 i+#define BLK_HDR_LEN 112 Err bitreich.org 70 i+#define BLK_DESC_LEN 48 Err bitreich.org 70 i #define SNAPSHOT_LEN 304 Err bitreich.org 70 i #define CACHE_ENTRY_LEN 48 Err bitreich.org 70 i Err bitreich.org 70 i #define MSGSIZE 256 Err bitreich.org 70 i #define MDSIZE 32 Err bitreich.org 70 i Err bitreich.org 70 i-/* snashot file format version */ Err bitreich.org 70 i-#define VER_MIN 1 Err bitreich.org 70 i+/* file format version */ Err bitreich.org 70 i+#define VER_MIN 2 Err bitreich.org 70 i #define VER_MAJ 0 Err bitreich.org 70 i Err bitreich.org 70 i struct cache; Err bitreich.org 70 i@@ -33,9 +34,14 @@ struct stats { Err bitreich.org 70 i Err bitreich.org 70 i struct snapshot_hdr { Err bitreich.org 70 i uint64_t flags; Err bitreich.org 70 i+ uint64_t size; Err bitreich.org 70 i uint64_t nr_snapshots; Err bitreich.org 70 i- uint64_t store_size; Err bitreich.org 70 i uint64_t reserved[4]; Err bitreich.org 70 i+}; Err bitreich.org 70 i+ Err bitreich.org 70 i+struct blk_hdr { Err bitreich.org 70 i+ uint64_t flags; Err bitreich.org 70 i+ uint64_t size; Err bitreich.org 70 i struct stats st; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i@@ -83,9 +89,11 @@ int pack(unsigned char *dst, char *fmt, ...); Err bitreich.org 70 i int unpack(unsigned char *src, char *fmt, ...); Err bitreich.org 70 i Err bitreich.org 70 i /* types.c */ Err bitreich.org 70 i-void read_snaphdr(int fd, struct snapshot_hdr *hdr); Err bitreich.org 70 i-void write_snaphdr(int fd, struct snapshot_hdr *hdr); Err bitreich.org 70 i-void write_snaphdr(int fd, struct snapshot_hdr *hdr); Err bitreich.org 70 i+void read_snap_hdr(int fd, struct snapshot_hdr *hdr); Err bitreich.org 70 i+void write_snap_hdr(int fd, struct snapshot_hdr *hdr); Err bitreich.org 70 i+void read_blk_hdr(int fd, struct blk_hdr *hdr); Err bitreich.org 70 i+void write_blk_hdr(int fd, struct blk_hdr *hdr); Err bitreich.org 70 i+void read_blk_desc(int fd, struct blk_desc *desc); Err bitreich.org 70 i void write_blk_desc(int fd, struct blk_desc *desc); Err bitreich.org 70 i void read_snapshot(int fd, struct snapshot *snap); Err bitreich.org 70 i void read_snapshot_descs(int fd, struct snapshot *snap); Err bitreich.org 70 1diff --git a/types.c b/types.c /scm/dedup/file/types.c.gph bitreich.org 70 i@@ -7,18 +7,18 @@ Err bitreich.org 70 i #include "dedup.h" Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-read_snaphdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i+read_snap_hdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i { Err bitreich.org 70 i- uint8_t buf[SNAPHDR_LEN]; Err bitreich.org 70 i+ uint8_t buf[SNAP_HDR_LEN]; Err bitreich.org 70 i int n; Err bitreich.org 70 i Err bitreich.org 70 i if (xread(fd, buf, sizeof(buf)) == 0) Err bitreich.org 70 i- errx(1, "read_snaphdr: unexpected EOF"); Err bitreich.org 70 i+ errx(1, "read_snap_hdr: unexpected EOF"); Err bitreich.org 70 i Err bitreich.org 70 i n = unpack(buf, "qqq", Err bitreich.org 70 i &hdr->flags, Err bitreich.org 70 i- &hdr->nr_snapshots, Err bitreich.org 70 i- &hdr->store_size); Err bitreich.org 70 i+ &hdr->size, Err bitreich.org 70 i+ &hdr->nr_snapshots); Err bitreich.org 70 i Err bitreich.org 70 i n += unpack(&buf[n], "qqqq", Err bitreich.org 70 i &hdr->reserved[0], Err bitreich.org 70 i@@ -26,6 +26,57 @@ read_snaphdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i &hdr->reserved[2], Err bitreich.org 70 i &hdr->reserved[3]); Err bitreich.org 70 i Err bitreich.org 70 i+ if (verbose > 1) Err bitreich.org 70 i+ printf("%s: flags = %llx, size = %llx, nr_snapshots = %llx\n", Err bitreich.org 70 i+ __func__, Err bitreich.org 70 i+ (unsigned long long)hdr->flags, Err bitreich.org 70 i+ (unsigned long long)hdr->size, Err bitreich.org 70 i+ (unsigned long long)hdr->nr_snapshots); Err bitreich.org 70 i+ Err bitreich.org 70 i+ assert(n == SNAP_HDR_LEN); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+write_snap_hdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ uint8_t buf[SNAP_HDR_LEN]; Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ n = pack(buf, "qqq", Err bitreich.org 70 i+ hdr->flags, Err bitreich.org 70 i+ hdr->size, Err bitreich.org 70 i+ hdr->nr_snapshots); Err bitreich.org 70 i+ Err bitreich.org 70 i+ n += pack(&buf[n], "qqqq", Err bitreich.org 70 i+ hdr->reserved[0], Err bitreich.org 70 i+ hdr->reserved[1], Err bitreich.org 70 i+ hdr->reserved[2], Err bitreich.org 70 i+ hdr->reserved[3]); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (verbose > 1) Err bitreich.org 70 i+ printf("%s: flags = %llx, size = %llx, nr_snapshots = %llx\n", Err bitreich.org 70 i+ __func__, Err bitreich.org 70 i+ (unsigned long long)hdr->flags, Err bitreich.org 70 i+ (unsigned long long)hdr->size, Err bitreich.org 70 i+ (unsigned long long)hdr->nr_snapshots); Err bitreich.org 70 i+ Err bitreich.org 70 i+ assert(n == SNAP_HDR_LEN); Err bitreich.org 70 i+ xwrite(fd, buf, n); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+read_blk_hdr(int fd, struct blk_hdr *hdr) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ uint8_t buf[BLK_HDR_LEN]; Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (xread(fd, buf, sizeof(buf)) == 0) Err bitreich.org 70 i+ errx(1, "read_blk_desc: unexpected EOF"); Err bitreich.org 70 i+ Err bitreich.org 70 i+ n = unpack(buf, "qq", Err bitreich.org 70 i+ &hdr->flags, Err bitreich.org 70 i+ &hdr->size); Err bitreich.org 70 i+ Err bitreich.org 70 i n += unpack(&buf[n], "qqqqqq", Err bitreich.org 70 i &hdr->st.orig_size, Err bitreich.org 70 i &hdr->st.comp_size, Err bitreich.org 70 i@@ -42,25 +93,18 @@ read_snaphdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i &hdr->st.reserved[4], Err bitreich.org 70 i &hdr->st.reserved[5]); Err bitreich.org 70 i Err bitreich.org 70 i- assert(n == SNAPHDR_LEN); Err bitreich.org 70 i+ assert(n == BLK_HDR_LEN); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-write_snaphdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i+write_blk_hdr(int fd, struct blk_hdr *hdr) Err bitreich.org 70 i { Err bitreich.org 70 i- uint8_t buf[SNAPHDR_LEN]; Err bitreich.org 70 i+ uint8_t buf[BLK_HDR_LEN]; Err bitreich.org 70 i int n; Err bitreich.org 70 i Err bitreich.org 70 i- n = pack(buf, "qqq", Err bitreich.org 70 i+ n = pack(buf, "qq", Err bitreich.org 70 i hdr->flags, Err bitreich.org 70 i- hdr->nr_snapshots, Err bitreich.org 70 i- hdr->store_size); Err bitreich.org 70 i- Err bitreich.org 70 i- n += pack(&buf[n], "qqqq", Err bitreich.org 70 i- hdr->reserved[0], Err bitreich.org 70 i- hdr->reserved[1], Err bitreich.org 70 i- hdr->reserved[2], Err bitreich.org 70 i- hdr->reserved[3]); Err bitreich.org 70 i+ hdr->size); Err bitreich.org 70 i Err bitreich.org 70 i n += pack(&buf[n], "qqqqqq", Err bitreich.org 70 i hdr->st.orig_size, Err bitreich.org 70 i@@ -78,14 +122,14 @@ write_snaphdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i hdr->st.reserved[4], Err bitreich.org 70 i hdr->st.reserved[5]); Err bitreich.org 70 i Err bitreich.org 70 i- assert(n == SNAPHDR_LEN); Err bitreich.org 70 i+ assert(n == BLK_HDR_LEN); Err bitreich.org 70 i xwrite(fd, buf, n); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i read_blk_desc(int fd, struct blk_desc *desc) Err bitreich.org 70 i { Err bitreich.org 70 i- uint8_t buf[BLKDESC_LEN]; Err bitreich.org 70 i+ uint8_t buf[BLK_DESC_LEN]; Err bitreich.org 70 i char fmt[BUFSIZ]; Err bitreich.org 70 i int n; Err bitreich.org 70 i Err bitreich.org 70 i@@ -98,13 +142,13 @@ read_blk_desc(int fd, struct blk_desc *desc) Err bitreich.org 70 i &desc->offset, Err bitreich.org 70 i &desc->size); Err bitreich.org 70 i Err bitreich.org 70 i- assert(n == BLKDESC_LEN); Err bitreich.org 70 i+ assert(n == BLK_DESC_LEN); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i write_blk_desc(int fd, struct blk_desc *desc) Err bitreich.org 70 i { Err bitreich.org 70 i- uint8_t buf[BLKDESC_LEN]; Err bitreich.org 70 i+ uint8_t buf[BLK_DESC_LEN]; Err bitreich.org 70 i char fmt[BUFSIZ]; Err bitreich.org 70 i int n; Err bitreich.org 70 i Err bitreich.org 70 i@@ -114,7 +158,7 @@ write_blk_desc(int fd, struct blk_desc *desc) Err bitreich.org 70 i desc->offset, Err bitreich.org 70 i desc->size); Err bitreich.org 70 i Err bitreich.org 70 i- assert(n == BLKDESC_LEN); Err bitreich.org 70 i+ assert(n == BLK_DESC_LEN); Err bitreich.org 70 i xwrite(fd, buf, n); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -154,16 +198,15 @@ write_snapshot(int fd, struct snapshot *snap) Err bitreich.org 70 i char fmt[BUFSIZ]; Err bitreich.org 70 i int n; Err bitreich.org 70 i Err bitreich.org 70 i- snprintf(fmt, sizeof(fmt), "q'%d'%dq", MSGSIZE, MDSIZE); Err bitreich.org 70 i- Err bitreich.org 70 i- if (mul_overflow(snap->nr_blk_descs, BLKDESC_LEN)) Err bitreich.org 70 i+ if (mul_overflow(snap->nr_blk_descs, BLK_DESC_LEN)) Err bitreich.org 70 i errx(1, "write_snapshot: overflow"); Err bitreich.org 70 i- snap->size = snap->nr_blk_descs * BLKDESC_LEN; Err bitreich.org 70 i+ snap->size = snap->nr_blk_descs * BLK_DESC_LEN; Err bitreich.org 70 i Err bitreich.org 70 i- if (add_overflow(SNAPHDR_LEN, snap->size)) Err bitreich.org 70 i+ if (add_overflow(SNAPSHOT_LEN, snap->size)) Err bitreich.org 70 i errx(1, "write_snapshot: overflow"); Err bitreich.org 70 i- snap->size += SNAPHDR_LEN; Err bitreich.org 70 i+ snap->size += SNAPSHOT_LEN; Err bitreich.org 70 i Err bitreich.org 70 i+ snprintf(fmt, sizeof(fmt), "q'%d'%dq", MSGSIZE, MDSIZE); Err bitreich.org 70 i n = pack(buf, fmt, Err bitreich.org 70 i snap->size, Err bitreich.org 70 i snap->msg, Err bitreich.org 70 .