rofiles-fuse: Build using FUSE 3 if possible, falling back to FUSE 2
This adds build-time configuration logic to automatically detect and switch between libfuse 2.x and 3.x. Signed-off-by: Simon McVittie <smcv@collabora.com> Co-authored-by: Luca BRUNO <luca.bruno@coreos.com>
This commit is contained in:
1 parent
4d47733f98
commit
43859b58f6
4 files changed
+81
-6
No files matched your search
+47
-2
@@ -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.
|
||||
|
||||
Reference in new issue
Block a user