diff --git a/include/dwarfs/filesystem_v2.h b/include/dwarfs/filesystem_v2.h index 88a8668c..69232642 100644 --- a/include/dwarfs/filesystem_v2.h +++ b/include/dwarfs/filesystem_v2.h @@ -124,12 +124,13 @@ class filesystem_v2 { file_stat getattr(inode_view entry) const { return impl_->getattr(entry); } - int access(inode_view entry, int mode, uid_t uid, gid_t gid) const { + int access(inode_view entry, int mode, file_stat::uid_type uid, + file_stat::gid_type gid) const { return impl_->access(entry, mode, uid, gid); } - void access(inode_view entry, int mode, uid_t uid, gid_t gid, - std::error_code& ec) const { + void access(inode_view entry, int mode, file_stat::uid_type uid, + file_stat::gid_type gid, std::error_code& ec) const { impl_->access(entry, mode, uid, gid, ec); } @@ -252,10 +253,10 @@ class filesystem_v2 { virtual int getattr(inode_view entry, file_stat* stbuf) const = 0; virtual file_stat getattr(inode_view entry, std::error_code& ec) const = 0; virtual file_stat getattr(inode_view entry) const = 0; - virtual int - access(inode_view entry, int mode, uid_t uid, gid_t gid) const = 0; - virtual void access(inode_view entry, int mode, uid_t uid, gid_t gid, - std::error_code& ec) const = 0; + virtual int access(inode_view entry, int mode, file_stat::uid_type uid, + file_stat::gid_type gid) const = 0; + virtual void access(inode_view entry, int mode, file_stat::uid_type uid, + file_stat::gid_type gid, std::error_code& ec) const = 0; virtual std::optional opendir(inode_view entry) const = 0; virtual std::optional> readdir(directory_view dir, size_t offset) const = 0; diff --git a/include/dwarfs/internal/metadata_v2.h b/include/dwarfs/internal/metadata_v2.h index 807c7c51..b25b43e2 100644 --- a/include/dwarfs/internal/metadata_v2.h +++ b/include/dwarfs/internal/metadata_v2.h @@ -120,7 +120,8 @@ class metadata_v2 { size_t dirsize(directory_view dir) const { return impl_->dirsize(dir); } - int access(inode_view iv, int mode, uid_t uid, gid_t gid) const { + int access(inode_view iv, int mode, file_stat::uid_type uid, + file_stat::gid_type gid) const { return impl_->access(iv, mode, uid, gid); } @@ -198,7 +199,8 @@ class metadata_v2 { virtual size_t dirsize(directory_view dir) const = 0; - virtual int access(inode_view iv, int mode, uid_t uid, gid_t gid) const = 0; + virtual int access(inode_view iv, int mode, file_stat::uid_type uid, + file_stat::gid_type gid) const = 0; virtual int open(inode_view iv) const = 0; diff --git a/src/dwarfs/filesystem_v2.cpp b/src/dwarfs/filesystem_v2.cpp index 7da18596..1b05c23f 100644 --- a/src/dwarfs/filesystem_v2.cpp +++ b/src/dwarfs/filesystem_v2.cpp @@ -442,9 +442,10 @@ class filesystem_ final : public filesystem_v2::impl { int getattr(inode_view entry, file_stat* stbuf) const override; file_stat getattr(inode_view entry, std::error_code& ec) const override; file_stat getattr(inode_view entry) const override; - int access(inode_view entry, int mode, uid_t uid, gid_t gid) const override; - void access(inode_view entry, int mode, uid_t uid, gid_t gid, - std::error_code& ec) const override; + int access(inode_view entry, int mode, file_stat::uid_type uid, + file_stat::gid_type gid) const override; + void access(inode_view entry, int mode, file_stat::uid_type uid, + file_stat::gid_type gid, std::error_code& ec) const override; std::optional opendir(inode_view entry) const override; std::optional> readdir(directory_view dir, size_t offset) const override; @@ -1097,15 +1098,18 @@ file_stat filesystem_::getattr(inode_view entry) const { } template -int filesystem_::access(inode_view entry, int mode, uid_t uid, - gid_t gid) const { +int filesystem_::access(inode_view entry, int mode, + file_stat::uid_type uid, + file_stat::gid_type gid) const { PERFMON_CLS_SCOPED_SECTION(access) return meta_.access(entry, mode, uid, gid); } template -void filesystem_::access(inode_view entry, int mode, uid_t uid, - gid_t gid, std::error_code& ec) const { +void filesystem_::access(inode_view entry, int mode, + file_stat::uid_type uid, + file_stat::gid_type gid, + std::error_code& ec) const { PERFMON_CLS_SCOPED_SECTION(access_ec) call_int_error([&] { return meta_.access(entry, mode, uid, gid); }, ec); } diff --git a/src/dwarfs/internal/metadata_v2.cpp b/src/dwarfs/internal/metadata_v2.cpp index 75cc7153..51882d4d 100644 --- a/src/dwarfs/internal/metadata_v2.cpp +++ b/src/dwarfs/internal/metadata_v2.cpp @@ -494,7 +494,8 @@ class metadata_ final : public metadata_v2::impl { return 2 + dir.entry_count(); // adds '.' and '..', which we fake in ;-) } - int access(inode_view iv, int mode, uid_t uid, gid_t gid) const override; + int access(inode_view iv, int mode, file_stat::uid_type uid, + file_stat::gid_type gid) const override; int open(inode_view iv) const override; @@ -1614,8 +1615,9 @@ metadata_::readdir(directory_view dir, size_t offset) const { } template -int metadata_::access(inode_view iv, int mode, uid_t uid, - gid_t gid) const { +int metadata_::access(inode_view iv, int mode, + file_stat::uid_type uid, + file_stat::gid_type gid) const { LOG_DEBUG << fmt::format("access([{}, {:o}, {}, {}], {:o}, {}, {})", iv.inode_num(), iv.mode(), iv.getuid(), iv.getgid(), mode, uid, gid); diff --git a/src/dwarfs_main.cpp b/src/dwarfs_main.cpp index 1636982b..c6ea02ab 100644 --- a/src/dwarfs_main.cpp +++ b/src/dwarfs_main.cpp @@ -456,7 +456,8 @@ int op_getattr(char const* path, native_stat* st, struct fuse_file_info*) { template int op_access_common(LogProxy& log_, dwarfs_userdata& userdata, int mode, - uid_t uid, gid_t gid, Find const& find) { + file_stat::uid_type uid, file_stat::gid_type gid, + Find const& find) { return checked_call(log_, [&] { if (auto entry = find()) { return userdata.fs.access(*entry, mode, uid, gid);