Compare commits

..

No commits in common. "144baf4371ffaec5bd3ee1699e97e5830a74f494" and "fb89cc08ae4d01c3a989b872a596e2ae35f76387" have entirely different histories.

4 changed files with 146 additions and 180 deletions

View File

@ -73,95 +73,92 @@ private:
protected: protected:
#if defined(__APPLE__) #if defined(__APPLE__)
[[nodiscard]] auto chflags_impl(std::string api_path, uint32_t flags) [[nodiscard]] auto chflags_impl(std::string api_path,
-> api_error override; uint32_t flags) -> api_error override;
#endif // __APPLE__ #endif // __APPLE__
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode, [[nodiscard]] auto
struct fuse_file_info *file_info) chmod_impl(std::string api_path, mode_t mode,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#else #else
[[nodiscard]] auto chmod_impl(std::string api_path, mode_t mode) [[nodiscard]] auto chmod_impl(std::string api_path,
-> api_error override; mode_t mode) -> api_error override;
#endif #endif
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid, [[nodiscard]] auto
struct fuse_file_info *file_info) chown_impl(std::string api_path, uid_t uid, gid_t gid,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#else #else
[[nodiscard]] auto chown_impl(std::string api_path, uid_t uid, gid_t gid) [[nodiscard]] auto chown_impl(std::string api_path, uid_t uid,
-> api_error override; gid_t gid) -> api_error override;
#endif #endif
[[nodiscard]] auto create_impl(std::string api_path, mode_t mode, [[nodiscard]] auto
struct fuse_file_info *file_info) create_impl(std::string api_path, mode_t mode,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
void destroy_impl(void *ptr) override; void destroy_impl(void *ptr) override;
[[nodiscard]] auto fallocate_impl(std::string api_path, int mode, [[nodiscard]] auto
off_t offset, off_t length, fallocate_impl(std::string api_path, int mode, off_t offset, off_t length,
struct fuse_file_info *file_info) struct fuse_file_info *file_info) -> api_error override;
-> api_error override;
[[nodiscard]] auto fgetattr_impl(std::string api_path, struct stat *unix_st, [[nodiscard]] auto
struct fuse_file_info *file_info) fgetattr_impl(std::string api_path, struct stat *unix_st,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#if defined(__APPLE__) #if defined(__APPLE__)
[[nodiscard]] auto fsetattr_x_impl(std::string api_path, [[nodiscard]] auto
struct setattr_x *attr, fsetattr_x_impl(std::string api_path, struct setattr_x *attr,
struct fuse_file_info *file_info) struct fuse_file_info *file_info) -> api_error override;
-> api_error override;
#endif // __APPLE__ #endif // __APPLE__
[[nodiscard]] auto fsync_impl(std::string api_path, int datasync, [[nodiscard]] auto
struct fuse_file_info *file_info) fsync_impl(std::string api_path, int datasync,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#if FUSE_USE_VERSION < 30 #if FUSE_USE_VERSION < 30
[[nodiscard]] auto ftruncate_impl(std::string api_path, off_t size, [[nodiscard]] auto
struct fuse_file_info *file_info) ftruncate_impl(std::string api_path, off_t size,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#endif #endif
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *unix_st, [[nodiscard]] auto
struct fuse_file_info *file_info) getattr_impl(std::string api_path, struct stat *unix_st,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#else #else
[[nodiscard]] auto getattr_impl(std::string api_path, struct stat *unix_st) [[nodiscard]] auto getattr_impl(std::string api_path,
-> api_error override; struct stat *unix_st) -> api_error override;
#endif #endif
#if defined(__APPLE__) #if defined(__APPLE__)
[[nodiscard]] auto getxtimes_impl(std::string api_path, [[nodiscard]] auto
struct timespec *bkuptime, getxtimes_impl(std::string api_path, struct timespec *bkuptime,
struct timespec *crtime) struct timespec *crtime) -> api_error override;
-> api_error override;
#endif // __APPLE__ #endif // __APPLE__
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
auto init_impl(struct fuse_conn_info *conn, struct fuse_config *cfg) auto init_impl(struct fuse_conn_info *conn,
-> void * override; struct fuse_config *cfg) -> void * override;
#else #else
auto init_impl(struct fuse_conn_info *conn) -> void * override; auto init_impl(struct fuse_conn_info *conn) -> void * override;
#endif #endif
[[nodiscard]] auto mkdir_impl(std::string api_path, mode_t mode) [[nodiscard]] auto mkdir_impl(std::string api_path,
-> api_error override; mode_t mode) -> api_error override;
void notify_fuse_main_exit(int &ret) override; void notify_fuse_main_exit(int &ret) override;
[[nodiscard]] auto open_impl(std::string api_path, [[nodiscard]] auto
struct fuse_file_info *file_info) open_impl(std::string api_path,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
[[nodiscard]] auto opendir_impl(std::string api_path, [[nodiscard]] auto
struct fuse_file_info *file_info) opendir_impl(std::string api_path,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
[[nodiscard]] auto read_impl(std::string api_path, char *buffer, [[nodiscard]] auto read_impl(std::string api_path, char *buffer,
size_t read_size, off_t read_offset, size_t read_size, off_t read_offset,
@ -169,30 +166,29 @@ protected:
std::size_t &bytes_read) -> api_error override; std::size_t &bytes_read) -> api_error override;
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto readdir_impl(std::string api_path, void *buf, [[nodiscard]] auto
fuse_fill_dir_t fuse_fill_dir, off_t offset, readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir,
struct fuse_file_info *file_info, off_t offset, struct fuse_file_info *file_info,
fuse_readdir_flags flags) fuse_readdir_flags flags) -> api_error override;
-> api_error override;
#else #else
[[nodiscard]] auto readdir_impl(std::string api_path, void *buf, [[nodiscard]] auto
fuse_fill_dir_t fuse_fill_dir, off_t offset, readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir,
struct fuse_file_info *file_info) off_t offset,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#endif #endif
[[nodiscard]] auto release_impl(std::string api_path, [[nodiscard]] auto
struct fuse_file_info *file_info) release_impl(std::string api_path,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
[[nodiscard]] auto releasedir_impl(std::string api_path, [[nodiscard]] auto
struct fuse_file_info *file_info) releasedir_impl(std::string api_path,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto rename_impl(std::string from_api_path, [[nodiscard]] auto rename_impl(std::string from_api_path,
std::string to_api_path, unsigned int flags) std::string to_api_path,
-> api_error override; unsigned int flags) -> api_error override;
#else #else
[[nodiscard]] auto rename_impl(std::string from_api_path, [[nodiscard]] auto rename_impl(std::string from_api_path,
std::string to_api_path) -> api_error override; std::string to_api_path) -> api_error override;
@ -203,8 +199,8 @@ protected:
#if defined(HAS_SETXATTR) #if defined(HAS_SETXATTR)
[[nodiscard]] auto getxattr_common(std::string api_path, const char *name, [[nodiscard]] auto getxattr_common(std::string api_path, const char *name,
char *value, size_t size, char *value, size_t size,
int &attribute_size, uint32_t *position) int &attribute_size,
-> api_error; uint32_t *position) -> api_error;
#if defined(__APPLE__) #if defined(__APPLE__)
[[nodiscard]] auto getxattr_impl(std::string api_path, const char *name, [[nodiscard]] auto getxattr_impl(std::string api_path, const char *name,
@ -220,8 +216,8 @@ protected:
size_t size, int &required_size, size_t size, int &required_size,
bool &return_size) -> api_error override; bool &return_size) -> api_error override;
[[nodiscard]] auto removexattr_impl(std::string api_path, const char *name) [[nodiscard]] auto removexattr_impl(std::string api_path,
-> api_error override; const char *name) -> api_error override;
#if defined(__APPLE__) #if defined(__APPLE__)
[[nodiscard]] auto setxattr_impl(std::string api_path, const char *name, [[nodiscard]] auto setxattr_impl(std::string api_path, const char *name,
@ -229,64 +225,62 @@ protected:
uint32_t position) -> api_error override; uint32_t position) -> api_error override;
#else // __APPLE__ #else // __APPLE__
[[nodiscard]] auto setxattr_impl(std::string api_path, const char *name, [[nodiscard]] auto setxattr_impl(std::string api_path, const char *name,
const char *value, size_t size, int flags) const char *value, size_t size,
-> api_error override; int flags) -> api_error override;
#endif // __APPLE__ #endif // __APPLE__
#endif // HAS_SETXATTR #endif // HAS_SETXATTR
#if defined(__APPLE__) #if defined(__APPLE__)
[[nodiscard]] auto setattr_x_impl(std::string api_path, [[nodiscard]] auto
struct setattr_x *attr) setattr_x_impl(std::string api_path,
-> api_error override; struct setattr_x *attr) -> api_error override;
[[nodiscard]] auto setbkuptime_impl(std::string api_path, [[nodiscard]] auto
const struct timespec *bkuptime) setbkuptime_impl(std::string api_path,
-> api_error override; const struct timespec *bkuptime) -> api_error override;
[[nodiscard]] auto setchgtime_impl(std::string api_path, [[nodiscard]] auto
const struct timespec *chgtime) setchgtime_impl(std::string api_path,
-> api_error override; const struct timespec *chgtime) -> api_error override;
[[nodiscard]] auto setcrtime_impl(std::string api_path, [[nodiscard]] auto
const struct timespec *crtime) setcrtime_impl(std::string api_path,
-> api_error override; const struct timespec *crtime) -> api_error override;
[[nodiscard]] auto setvolname_impl(const char *volname) -> api_error override; [[nodiscard]] auto setvolname_impl(const char *volname) -> api_error override;
[[nodiscard]] auto statfs_x_impl(std::string api_path, struct statfs *stbuf) [[nodiscard]] auto statfs_x_impl(std::string api_path,
-> api_error override; struct statfs *stbuf) -> api_error override;
#else // __APPLE__ #else // __APPLE__
[[nodiscard]] auto statfs_impl(std::string api_path, struct statvfs *stbuf) [[nodiscard]] auto statfs_impl(std::string api_path,
-> api_error override; struct statvfs *stbuf) -> api_error override;
#endif // __APPLE__ #endif // __APPLE__
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto truncate_impl(std::string api_path, off_t size, [[nodiscard]] auto
struct fuse_file_info *file_info) truncate_impl(std::string api_path, off_t size,
-> api_error override; struct fuse_file_info *file_info) -> api_error override;
#else #else
[[nodiscard]] auto truncate_impl(std::string api_path, off_t size) [[nodiscard]] auto truncate_impl(std::string api_path,
-> api_error override; off_t size) -> api_error override;
#endif #endif
[[nodiscard]] auto unlink_impl(std::string api_path) -> api_error override; [[nodiscard]] auto unlink_impl(std::string api_path) -> api_error override;
#if FUSE_USE_VERSION >= 30 #if FUSE_USE_VERSION >= 30
[[nodiscard]] auto utimens_impl(std::string api_path, [[nodiscard]] auto
const struct timespec tv[2], utimens_impl(std::string api_path, const struct timespec tv[2],
struct fuse_file_info *file_info) struct fuse_file_info *file_info) -> api_error override;
-> api_error override;
#else #else
[[nodiscard]] auto utimens_impl(std::string api_path, [[nodiscard]] auto
const struct timespec tv[2]) utimens_impl(std::string api_path,
-> api_error override; const struct timespec tv[2]) -> api_error override;
#endif #endif
[[nodiscard]] auto write_impl(std::string api_path, const char *buffer, [[nodiscard]] auto
size_t write_size, off_t write_offset, write_impl(std::string api_path, const char *buffer, size_t write_size,
struct fuse_file_info *file_info, off_t write_offset, struct fuse_file_info *file_info,
std::size_t &bytes_written) std::size_t &bytes_written) -> api_error override;
-> api_error override;
public: public:
[[nodiscard]] auto get_directory_item_count(const std::string &api_path) const [[nodiscard]] auto get_directory_item_count(const std::string &api_path) const
@ -295,17 +289,16 @@ public:
[[nodiscard]] auto get_directory_items(const std::string &api_path) const [[nodiscard]] auto get_directory_items(const std::string &api_path) const
-> directory_item_list override; -> directory_item_list override;
[[nodiscard]] auto get_file_size(const std::string &api_path) const [[nodiscard]] auto
-> std::uint64_t override; get_file_size(const std::string &api_path) const -> std::uint64_t override;
[[nodiscard]] auto get_item_meta(const std::string &api_path, [[nodiscard]] auto
api_meta_map &meta) const get_item_meta(const std::string &api_path,
-> api_error override; api_meta_map &meta) const -> api_error override;
[[nodiscard]] auto get_item_meta(const std::string &api_path, [[nodiscard]] auto
const std::string &name, get_item_meta(const std::string &api_path, const std::string &name,
std::string &value) const std::string &value) const -> api_error override;
-> api_error override;
[[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override; [[nodiscard]] auto get_total_drive_space() const -> std::uint64_t override;
@ -316,22 +309,19 @@ public:
void get_volume_info(UINT64 &total_size, UINT64 &free_size, void get_volume_info(UINT64 &total_size, UINT64 &free_size,
std::string &volume_label) const override; std::string &volume_label) const override;
[[nodiscard]] auto is_processing(const std::string &api_path) const [[nodiscard]] auto
-> bool override; is_processing(const std::string &api_path) const -> bool override;
[[nodiscard]] auto rename_directory(const std::string &from_api_path, [[nodiscard]] auto
const std::string &to_api_path) rename_directory(const std::string &from_api_path,
-> int override; const std::string &to_api_path) -> int override;
[[nodiscard]] auto rename_file(const std::string &from_api_path, [[nodiscard]] auto rename_file(const std::string &from_api_path,
const std::string &to_api_path, bool overwrite) const std::string &to_api_path,
-> int override; bool overwrite) -> int override;
void set_item_meta(const std::string &api_path, const std::string &key, void set_item_meta(const std::string &api_path, const std::string &key,
const std::string &value) override; const std::string &value) override;
void set_item_meta(const std::string &api_path,
const api_meta_map &meta) override;
}; };
} // namespace repertory } // namespace repertory

View File

@ -30,32 +30,29 @@ class i_fuse_drive {
INTERFACE_SETUP(i_fuse_drive); INTERFACE_SETUP(i_fuse_drive);
public: public:
[[nodiscard]] virtual auto check_owner(const std::string &api_path) const [[nodiscard]] virtual auto
-> api_error = 0; check_owner(const std::string &api_path) const -> api_error = 0;
[[nodiscard]] virtual auto check_parent_access(const std::string &api_path,
int mask) const
-> api_error = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto
get_directory_item_count(const std::string &api_path) const check_parent_access(const std::string &api_path,
-> std::uint64_t = 0; int mask) const -> api_error = 0;
[[nodiscard]] virtual auto get_directory_item_count(
const std::string &api_path) const -> std::uint64_t = 0;
[[nodiscard]] virtual auto get_directory_items(
const std::string &api_path) const -> directory_item_list = 0;
[[nodiscard]] virtual auto [[nodiscard]] virtual auto
get_directory_items(const std::string &api_path) const get_file_size(const std::string &api_path) const -> std::uint64_t = 0;
-> directory_item_list = 0;
[[nodiscard]] virtual auto get_file_size(const std::string &api_path) const [[nodiscard]] virtual auto
-> std::uint64_t = 0; get_item_meta(const std::string &api_path,
api_meta_map &meta) const -> api_error = 0;
[[nodiscard]] virtual auto get_item_meta(const std::string &api_path, [[nodiscard]] virtual auto
api_meta_map &meta) const get_item_meta(const std::string &api_path, const std::string &name,
-> api_error = 0; std::string &value) const -> api_error = 0;
[[nodiscard]] virtual auto get_item_meta(const std::string &api_path,
const std::string &name,
std::string &value) const
-> api_error = 0;
[[nodiscard]] virtual auto get_total_drive_space() const -> std::uint64_t = 0; [[nodiscard]] virtual auto get_total_drive_space() const -> std::uint64_t = 0;
@ -66,12 +63,12 @@ public:
virtual void get_volume_info(UINT64 &total_size, UINT64 &free_size, virtual void get_volume_info(UINT64 &total_size, UINT64 &free_size,
std::string &volume_label) const = 0; std::string &volume_label) const = 0;
[[nodiscard]] virtual auto is_processing(const std::string &api_path) const [[nodiscard]] virtual auto
-> bool = 0; is_processing(const std::string &api_path) const -> bool = 0;
[[nodiscard]] virtual auto rename_directory(const std::string &from_api_path, [[nodiscard]] virtual auto
const std::string &to_api_path) rename_directory(const std::string &from_api_path,
-> int = 0; const std::string &to_api_path) -> int = 0;
[[nodiscard]] virtual auto rename_file(const std::string &from_api_path, [[nodiscard]] virtual auto rename_file(const std::string &from_api_path,
const std::string &to_api_path, const std::string &to_api_path,
@ -80,9 +77,6 @@ public:
virtual void set_item_meta(const std::string &api_path, virtual void set_item_meta(const std::string &api_path,
const std::string &key, const std::string &key,
const std::string &value) = 0; const std::string &value) = 0;
virtual void set_item_meta(const std::string &api_path,
const api_meta_map &meta) = 0;
}; };
} // namespace repertory } // namespace repertory

View File

@ -1087,21 +1087,9 @@ void fuse_drive::set_item_meta(const std::string &api_path,
REPERTORY_USES_FUNCTION_NAME(); REPERTORY_USES_FUNCTION_NAME();
auto res = provider_.set_item_meta(api_path, key, value); auto res = provider_.set_item_meta(api_path, key, value);
if (res != api_error::success) {
utils::error::raise_api_path_error(
function_name, api_path, res,
fmt::format("failed to set item meta|key|{}", key));
}
}
void fuse_drive::set_item_meta(const std::string &api_path,
const api_meta_map &meta) {
REPERTORY_USES_FUNCTION_NAME();
auto res = provider_.set_item_meta(api_path, meta);
if (res != api_error::success) { if (res != api_error::success) {
utils::error::raise_api_path_error(function_name, api_path, res, utils::error::raise_api_path_error(function_name, api_path, res,
"failed to set item meta"); "key|" + key + "|value|" + value);
} }
} }

View File

@ -48,8 +48,8 @@ public:
return api_error::success; return api_error::success;
} }
auto check_parent_access(const std::string &, int) const auto check_parent_access(const std::string &,
-> api_error override { int) const -> api_error override {
return api_error::success; return api_error::success;
} }
@ -84,8 +84,8 @@ public:
return 0U; return 0U;
} }
auto get_item_meta(const std::string &api_path, api_meta_map &meta) const auto get_item_meta(const std::string &api_path,
-> api_error override { api_meta_map &meta) const -> api_error override {
meta = const_cast<mock_fuse_drive *>(this)->meta_[api_path]; meta = const_cast<mock_fuse_drive *>(this)->meta_[api_path];
return api_error::success; return api_error::success;
} }
@ -124,8 +124,8 @@ public:
} }
auto rename_file(const std::string &from_api_path, auto rename_file(const std::string &from_api_path,
const std::string &to_api_path, bool overwrite) const std::string &to_api_path,
-> int override { bool overwrite) -> int override {
const auto from_file_path = const auto from_file_path =
utils::path::combine(mount_location_, {from_api_path}); utils::path::combine(mount_location_, {from_api_path});
const auto to_file_path = const auto to_file_path =
@ -152,12 +152,6 @@ public:
const std::string &value) override { const std::string &value) override {
meta_[api_path][key] = value; meta_[api_path][key] = value;
} }
void set_item_meta(const std::string &api_path,
const api_meta_map &meta) override {
for (const auto &[key, value] : meta) {
meta_[api_path][key] = value;
}
}; };
} // namespace repertory } // namespace repertory