All checks were successful
Test / Create distribution (push) Successful in 43s
Test / Sandbox (push) Successful in 2m21s
Test / ShareFS (push) Successful in 3m26s
Test / Hpkg (push) Successful in 4m14s
Test / Sandbox (race detector) (push) Successful in 4m31s
Test / Hakurei (race detector) (push) Successful in 5m31s
Test / Hakurei (push) Successful in 2m34s
Test / Flake checks (push) Successful in 1m39s
This also removes global state used by sharefs_init. Signed-off-by: Ophestra <cat@gensokyo.uk>
38 lines
2.3 KiB
C
38 lines
2.3 KiB
C
#define FUSE_USE_VERSION FUSE_MAKE_VERSION(3, 4)
|
|
#include <fuse.h>
|
|
#include <fuse_lowlevel.h> /* for fuse_cmdline_help */
|
|
|
|
#if (FUSE_VERSION < FUSE_MAKE_VERSION(3, 4))
|
|
#error This package requires libfuse >= v3.4
|
|
#endif
|
|
|
|
#define SHAREFS_MEDIA_RW_ID (1 << 10) - 1 /* owning gid presented to userspace */
|
|
#define SHAREFS_PERM_DIR 0700 /* permission bits for directories presented to userspace */
|
|
#define SHAREFS_PERM_REG 0600 /* permission bits for regular files presented to userspace */
|
|
#define SHAREFS_FORBIDDEN_FLAGS O_DIRECT /* these open flags are cleared unconditionally */
|
|
|
|
/* sharefs_private is populated by sharefs_init and contains process-wide context */
|
|
struct sharefs_private {
|
|
int dirfd; /* source dirfd opened during sharefs_init */
|
|
bool init_failed; /* whether sharefs_init failed */
|
|
uintptr_t source_handle; /* cgo handle of pathname to open for dirfd, freed during sharefs_init */
|
|
uintptr_t setuid; /* uid to set by sharefs_init when running as root */
|
|
uintptr_t setgid; /* gid to set by sharefs_init when running as root */
|
|
};
|
|
|
|
int sharefs_getattr(const char *pathname, struct stat *statbuf, struct fuse_file_info *fi);
|
|
int sharefs_readdir(const char *pathname, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi, enum fuse_readdir_flags flags);
|
|
int sharefs_mkdir(const char *pathname, mode_t mode);
|
|
int sharefs_unlink(const char *pathname);
|
|
int sharefs_rmdir(const char *pathname);
|
|
int sharefs_rename(const char *oldpath, const char *newpath, unsigned int flags);
|
|
int sharefs_truncate(const char *pathname, off_t length, struct fuse_file_info *fi);
|
|
int sharefs_utimens(const char *pathname, const struct timespec times[2], struct fuse_file_info *fi);
|
|
int sharefs_create(const char *pathname, mode_t mode, struct fuse_file_info *fi);
|
|
int sharefs_open(const char *pathname, struct fuse_file_info *fi);
|
|
int sharefs_read(const char *pathname, char *buf, size_t count, off_t offset, struct fuse_file_info *fi);
|
|
int sharefs_write(const char *pathname, const char *buf, size_t count, off_t offset, struct fuse_file_info *fi);
|
|
int sharefs_statfs(const char *pathname, struct statvfs *statbuf);
|
|
int sharefs_release(const char *pathname, struct fuse_file_info *fi);
|
|
int sharefs_fsync(const char *pathname, int datasync, struct fuse_file_info *fi);
|