ports/sysutils/fusefs-unionfs/files/patch-src__unionfs.c
2013-07-24 15:03:05 +00:00

40 lines
1.1 KiB
C

--- ./src/unionfs.c.orig 2012-09-11 00:06:32.000000000 +0200
+++ ./src/unionfs.c 2013-07-24 16:54:01.555073796 +0200
@@ -83,7 +83,11 @@
char p[PATHLEN_MAX];
if (BUILD_PATH(p, uopt.branches[i].path, path)) RETURN(-ENAMETOOLONG);
+#if __FreeBSD__
+ int res = lchmod(p, mode);
+#else
int res = chmod(p, mode);
+#endif
if (res == -1) RETURN(-errno);
RETURN(0);
@@ -190,7 +194,7 @@
DBG("%s\n", path);
if (uopt.stats_enabled && strcmp(path, STATS_FILENAME) == 0) {
- memset(stbuf, 0, sizeof(stbuf));
+ memset(stbuf, 0, sizeof(*stbuf));
stbuf->st_mode = S_IFREG | 0444;
stbuf->st_nlink = 1;
stbuf->st_size = STATS_SIZE;
@@ -663,7 +667,16 @@
char p[PATHLEN_MAX];
if (BUILD_PATH(p, uopt.branches[i].path, path)) RETURN(-ENAMETOOLONG);
+#ifdef __FreeBSD__
+ struct timeval tv[2];
+ tv[0].tv_sec = ts[0].tv_sec;
+ tv[0].tv_usec = ts[0].tv_nsec / 1000;
+ tv[1].tv_sec = ts[0].tv_sec;
+ tv[1].tv_usec = ts[0].tv_nsec / 1000;
+ int res = lutimes(p, tv);
+#else
int res = utimensat(0, p, ts, AT_SYMLINK_NOFOLLOW);
+#endif
if (res == -1) RETURN(-errno);