iImplement {lock,unlock}repo() - 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 2fcad321a15f6d09e77b70650e9737bd2d370a6e /scm/dedup/commit/2fcad321a15f6d09e77b70650e9737bd2d370a6e.gph bitreich.org 70 1parent 3a24ddb8e397799f7af86d11941bd9c7e73470fd /scm/dedup/commit/3a24ddb8e397799f7af86d11941bd9c7e73470fd.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sun, 5 May 2019 17:34:48 +0100 Err bitreich.org 70 i Err bitreich.org 70 iImplement {lock,unlock}repo() Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 2 ++ Err bitreich.org 70 i A lock.c | 55 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i A lock.h | 2 ++ Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 59 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@@ -9,6 +9,7 @@ HDR = \ Err bitreich.org 70 i chunker.h \ Err bitreich.org 70 i config.h \ Err bitreich.org 70 i key.h \ Err bitreich.org 70 i+ lock.h \ 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@@ -22,6 +23,7 @@ COMMOBJ = \ Err bitreich.org 70 i bstorage.o \ Err bitreich.org 70 i chunker.o \ Err bitreich.org 70 i key.o \ Err bitreich.org 70 i+ lock.o \ 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 1diff --git a/lock.c b/lock.c /scm/dedup/file/lock.c.gph bitreich.org 70 i@@ -0,0 +1,55 @@ 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+ Err bitreich.org 70 i+int Err bitreich.org 70 i+lockrepo(char *repo) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ char path[PATH_MAX]; Err bitreich.org 70 i+ struct flock fl; Err bitreich.org 70 i+ int fd; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (snprintf(path, sizeof(path), "%s/lock", repo) >= Err bitreich.org 70 i+ sizeof(path)) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ fd = open(path, O_RDWR | O_CREAT, 0600); Err bitreich.org 70 i+ if (fd < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ fl.l_type = F_WRLCK; Err bitreich.org 70 i+ fl.l_whence = SEEK_SET; Err bitreich.org 70 i+ fl.l_start = 0; Err bitreich.org 70 i+ fl.l_len = 0; Err bitreich.org 70 i+ if (fcntl(fd, F_SETLK, &fl) < 0) { Err bitreich.org 70 i+ close(fd); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ return fd; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+unlockrepo(char *repo, int fd) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ char path[PATH_MAX]; Err bitreich.org 70 i+ struct flock fl; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (snprintf(path, sizeof(path), "%s/lock", repo) >= Err bitreich.org 70 i+ sizeof(path)) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (unlink(path) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ fl.l_type = F_UNLCK; Err bitreich.org 70 i+ fl.l_whence = SEEK_SET; Err bitreich.org 70 i+ fl.l_start = 0; Err bitreich.org 70 i+ fl.l_len = 0; Err bitreich.org 70 i+ if (fcntl(fd, F_SETLK, &fl) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (close(fd) < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 1diff --git a/lock.h b/lock.h /scm/dedup/file/lock.h.gph bitreich.org 70 i@@ -0,0 +1,2 @@ Err bitreich.org 70 i+int lockrepo(char *); Err bitreich.org 70 i+int unlockrepo(char *, int); Err bitreich.org 70 .