1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
--- src/unionfs.c.orig 2015-01-14 10:08:20 UTC
+++ src/unionfs.c
@@ -65,6 +65,13 @@
#include "conf.h"
#include "uioctl.h"
+// Patch pushed upstream:
+// https://github.com/rpodgorny/unionfs-fuse/pull/40
+// Remove this as soon as pushed into a release.
+#ifdef IOCPARM_LEN
+#define _IOC_SIZE(nr) IOCPARM_LEN(nr)
+#endif
+
static struct fuse_opt unionfs_opts[] = {
FUSE_OPT_KEY("chroot=%s,", KEY_CHROOT),
FUSE_OPT_KEY("cow", KEY_COW),
@@ -92,7 +99,12 @@ static int unionfs_chmod(const char *pat
char p[PATHLEN_MAX];
if (BUILD_PATH(p, uopt.branches[i].path, path)) RETURN(-ENAMETOOLONG);
+// Unsure of origin. Patch needs review.
+#if __FreeBSD__
+ int res = lchmod(p, mode);
+#else
int res = chmod(p, mode);
+#endif
if (res == -1) RETURN(-errno);
RETURN(0);
@@ -671,6 +683,9 @@ static int unionfs_truncate(const char *
RETURN(0);
}
+// Patch pushed upstream:
+// https://github.com/rpodgorny/unionfs-fuse/pull/39
+// Remove this as soon as pushed into a release.
static int unionfs_utimens(const char *path, const struct timespec ts[2]) {
DBG("%s\n", path);
@@ -685,9 +700,9 @@ static int unionfs_utimens(const char *p
#else
struct timeval tv[2];
tv[0].tv_sec = ts[0].tv_sec;
- tv[0].tv_usec = ts[0].tv_nsec * 1000;
+ tv[0].tv_usec = ts[0].tv_nsec / 1000;
tv[1].tv_sec = ts[1].tv_sec;
- tv[1].tv_usec = ts[1].tv_nsec * 1000;
+ tv[1].tv_usec = ts[1].tv_nsec / 1000;
int res = utimes(p, tv);
#endif
|