tlock.c - dedup - deduplicating backup program
(HTM) git clone git://git.z3bra.org/dedup.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
tlock.c (686B)
---
1 #include <fcntl.h>
2 #include <limits.h>
3 #include <stdio.h>
4 #include <unistd.h>
5
6 int
7 lockrepo(char *repo)
8 {
9 char path[PATH_MAX];
10 struct flock fl;
11 int fd;
12
13 if (snprintf(path, sizeof(path), "%s/lock", repo) >=
14 sizeof(path))
15 return -1;
16
17 fd = open(path, O_RDWR | O_CREAT, 0600);
18 if (fd < 0)
19 return -1;
20 fl.l_type = F_WRLCK;
21 fl.l_whence = SEEK_SET;
22 fl.l_start = 0;
23 fl.l_len = 0;
24 if (fcntl(fd, F_SETLK, &fl) < 0) {
25 close(fd);
26 return -1;
27 }
28 return fd;
29 }
30
31 int
32 unlockrepo(int fd)
33 {
34 struct flock fl;
35
36 fl.l_type = F_UNLCK;
37 fl.l_whence = SEEK_SET;
38 fl.l_start = 0;
39 fl.l_len = 0;
40 if (fcntl(fd, F_SETLK, &fl) < 0)
41 return -1;
42 if (close(fd) < 0)
43 return -1;
44 return 0;
45 }