iAvoid chdir calls in dup-gc(1) and dup-init(1) - 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 dcd160319defab89c482448737c8f80a6b005570 /scm/dedup/commit/dcd160319defab89c482448737c8f80a6b005570.gph bitreich.org 70 1parent 2fcad321a15f6d09e77b70650e9737bd2d370a6e /scm/dedup/commit/2fcad321a15f6d09e77b70650e9737bd2d370a6e.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sun, 5 May 2019 17:50:02 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAvoid chdir calls in dup-gc(1) and dup-init(1) Err bitreich.org 70 i Err bitreich.org 70 ichdir() interferes with the locking logic. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dup-gc.c | 15 +++++++++------ Err bitreich.org 70 i M dup-init.c | 24 ++++++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 25 insertions(+), 14 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/dup-gc.c b/dup-gc.c /scm/dedup/file/dup-gc.c.gph bitreich.org 70 i@@ -3,6 +3,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i@@ -26,6 +27,7 @@ usage(void) Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i+ char path[PATH_MAX]; Err bitreich.org 70 i unsigned char key[KEYSIZE]; Err bitreich.org 70 i struct bctx *bctx; /* block context */ Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i@@ -69,14 +71,15 @@ main(int argc, char *argv[]) Err bitreich.org 70 i bpar.key = NULL; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- if (chdir(repo) < 0) Err bitreich.org 70 i- err(1, "chdir: %s", repo); Err bitreich.org 70 i+ if (snprintf(path, sizeof(path), "%s/%s", Err bitreich.org 70 i+ repo, STORAGEPATH) >= sizeof(path)) Err bitreich.org 70 i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70 i Err bitreich.org 70 i- if (bopen(STORAGEPATH, B_RDWR, 0600, &bpar, &bctx) < 0) Err bitreich.org 70 i- berr("bopen: %s", STORAGEPATH); Err bitreich.org 70 i+ if (bopen(path, B_RDWR, 0600, &bpar, &bctx) < 0) Err bitreich.org 70 i+ berr("bopen: %s", path); Err bitreich.org 70 i if (bgc(bctx) < 0) Err bitreich.org 70 i- berr("bgc: %s", STORAGEPATH); Err bitreich.org 70 i+ berr("bgc: %s", path); Err bitreich.org 70 i if (bclose(bctx) < 0) Err bitreich.org 70 i- berr("bclose: %s", STORAGEPATH); Err bitreich.org 70 i+ berr("bclose: %s", path); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dup-init.c b/dup-init.c /scm/dedup/file/dup-init.c.gph bitreich.org 70 i@@ -3,6 +3,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i@@ -11,6 +12,7 @@ Err bitreich.org 70 i #include "block.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "misc.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i@@ -26,6 +28,8 @@ usage(void) Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i+ char spath[PATH_MAX]; Err bitreich.org 70 i+ char bpath[PATH_MAX]; Err bitreich.org 70 i unsigned char key[KEYSIZE]; Err bitreich.org 70 i struct bctx *bctx; /* block context */ Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i@@ -78,16 +82,20 @@ main(int argc, char *argv[]) Err bitreich.org 70 i bpar.key = NULL; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+ if (snprintf(spath, sizeof(spath), "%s/%s", Err bitreich.org 70 i+ repo, ARCHIVEPATH) >= sizeof(spath)) Err bitreich.org 70 i+ errx(1, "snprintf: %s: path too long", spath); Err bitreich.org 70 i+ if (snprintf(bpath, sizeof(bpath), "%s/%s", Err bitreich.org 70 i+ repo, STORAGEPATH) >= sizeof(bpath)) Err bitreich.org 70 i+ errx(1, "snprintf: %s: path too long", bpath); Err bitreich.org 70 i+ Err bitreich.org 70 i if (mkdir(repo, 0700) < 0) Err bitreich.org 70 i err(1, "mkdir: %s", repo); Err bitreich.org 70 i- if (chdir(repo) < 0) Err bitreich.org 70 i- err(1, "chdir: %s", repo); Err bitreich.org 70 i- Err bitreich.org 70 i- if (mkdir(ARCHIVEPATH, 0700) < 0) Err bitreich.org 70 i- err(1, "mkdir: %s", ARCHIVEPATH); Err bitreich.org 70 i- if (bcreat(STORAGEPATH, 0600, &bpar, &bctx) < 0) Err bitreich.org 70 i- berr("bcreat: %s", STORAGEPATH); Err bitreich.org 70 i+ if (mkdir(spath, 0700) < 0) Err bitreich.org 70 i+ err(1, "mkdir: %s", spath); Err bitreich.org 70 i+ if (bcreat(bpath, 0600, &bpar, &bctx) < 0) Err bitreich.org 70 i+ berr("bcreat: %s", bpath); Err bitreich.org 70 i if (bclose(bctx) < 0) Err bitreich.org 70 i- berr("bclose: %s", STORAGEPATH); Err bitreich.org 70 i+ berr("bclose: %s", bpath); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 .