diff options
author | Luca Bruno <luca.bruno@coreos.com> | 2022-01-04 10:27:14 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-04 10:27:14 +0000 |
commit | a3555f4d1239c1c1aab356a5979e15665fef6ad6 (patch) | |
tree | fd89ec82bd474ba7e997950e435ed57801621552 /src/rofiles-fuse | |
parent | 4d47733f98f98d14a5e60d8015b90d0921602df5 (diff) | |
parent | 43859b58f6b76e958e54ec5d3d1250d906ce12bf (diff) | |
download | ostree-a3555f4d1239c1c1aab356a5979e15665fef6ad6.tar.gz |
Merge pull request #2376 from smcv/fuse3
rofiles-fuse: Build using FUSE 3 if possible, falling back to FUSE 2
Diffstat (limited to 'src/rofiles-fuse')
-rw-r--r-- | src/rofiles-fuse/main.c | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/src/rofiles-fuse/main.c b/src/rofiles-fuse/main.c index e8c916fa..7f49dd88 100644 --- a/src/rofiles-fuse/main.c +++ b/src/rofiles-fuse/main.c @@ -17,7 +17,11 @@ * License along with this library. If not, see <https://www.gnu.org/licenses/>. */ -#define FUSE_USE_VERSION 26 +#include "config.h" + +#ifndef FUSE_USE_VERSION +#error config.h needs to define FUSE_USE_VERSION +#endif #include <sys/types.h> #include <sys/stat.h> @@ -55,7 +59,11 @@ ENSURE_RELPATH (const char *path) } static int +#if FUSE_USE_VERSION >= 31 +callback_getattr (const char *path, struct stat *st_data, struct fuse_file_info *finfo) +#else callback_getattr (const char *path, struct stat *st_data) +#endif { path = ENSURE_RELPATH (path); if (!*path) @@ -89,8 +97,13 @@ callback_readlink (const char *path, char *buf, size_t size) } static int +#if FUSE_USE_VERSION >= 31 +callback_readdir (const char *path, void *buf, fuse_fill_dir_t filler, + off_t offset, struct fuse_file_info *fi, enum fuse_readdir_flags flags) +#else callback_readdir (const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) +#endif { DIR *dp; struct dirent *de; @@ -123,8 +136,14 @@ callback_readdir (const char *path, void *buf, fuse_fill_dir_t filler, memset (&st, 0, sizeof (st)); st.st_ino = de->d_ino; st.st_mode = de->d_type << 12; + +#if FUSE_USE_VERSION >= 31 + if (filler (buf, de->d_name, &st, 0, 0)) + break; +#else if (filler (buf, de->d_name, &st, 0)) break; +#endif } (void) closedir (dp); @@ -184,11 +203,21 @@ callback_symlink (const char *from, const char *to) } static int +#if FUSE_USE_VERSION >= 31 +callback_rename (const char *from, const char *to, unsigned int flags) +#else callback_rename (const char *from, const char *to) +#endif { +#if FUSE_USE_VERSION < 31 + unsigned int flags = 0; +#endif + from = ENSURE_RELPATH (from); to = ENSURE_RELPATH (to); - if (renameat (basefd, from, basefd, to) == -1) + + /* This assumes Linux 3.15+ */ + if (renameat2 (basefd, from, basefd, to, flags) == -1) return -errno; return 0; } @@ -299,7 +328,11 @@ verify_write_or_copyup (const char *path, const struct stat *stbuf, } while (0) static int +#if FUSE_USE_VERSION >= 31 +callback_chmod (const char *path, mode_t mode, struct fuse_file_info *finfo) +#else callback_chmod (const char *path, mode_t mode) +#endif { PATH_WRITE_ENTRYPOINT (path); @@ -313,7 +346,11 @@ callback_chmod (const char *path, mode_t mode) } static int +#if FUSE_USE_VERSION >= 31 +callback_chown (const char *path, uid_t uid, gid_t gid, struct fuse_file_info *finfo) +#else callback_chown (const char *path, uid_t uid, gid_t gid) +#endif { PATH_WRITE_ENTRYPOINT (path); @@ -323,7 +360,11 @@ callback_chown (const char *path, uid_t uid, gid_t gid) } static int +#if FUSE_USE_VERSION >= 31 +callback_truncate (const char *path, off_t size, struct fuse_file_info *finfo) +#else callback_truncate (const char *path, off_t size) +#endif { PATH_WRITE_ENTRYPOINT (path); @@ -338,7 +379,11 @@ callback_truncate (const char *path, off_t size) } static int +#if FUSE_USE_VERSION >= 31 +callback_utimens (const char *path, const struct timespec tv[2], struct fuse_file_info *finfo) +#else callback_utimens (const char *path, const struct timespec tv[2]) +#endif { /* This one isn't write-verified, we support changing times * even for hardlinked files. |