This commit is contained in:
2024-08-23 14:25:14 -05:00
parent 3b4c590404
commit bc0901f6a2
3 changed files with 106 additions and 103 deletions

View File

@ -90,6 +90,7 @@ endforeach
endfunction endfunction
eventlib eventlib
expect_streq expect_streq
fallocate_impl
fext fext
fgetattr fgetattr
flac_version flac_version

View File

@ -64,15 +64,15 @@ private:
struct fuse_operations fuse_ops_ {}; struct fuse_operations fuse_ops_ {};
private: private:
[[nodiscard]] auto execute_callback( [[nodiscard]] auto
std::string_view function_name, const char *from, const char *to, execute_callback(std::string_view function_name, const char *from,
const std::function<api_error(const std::string &, const std::string &)> const char *to,
&cb, const std::function<api_error(std::string, std::string)> &cb,
bool disable_logging = false) -> int; bool disable_logging = false) -> int;
[[nodiscard]] auto [[nodiscard]] auto
execute_callback(std::string_view function_name, const char *path, execute_callback(std::string_view function_name, const char *path,
const std::function<api_error(const std::string &)> &cb, const std::function<api_error(std::string)> &cb,
bool disable_logging = false) -> int; bool disable_logging = false) -> int;
static void execute_void_callback(std::string_view function_name, static void execute_void_callback(std::string_view function_name,
@ -83,7 +83,7 @@ private:
const std::function<void *()> &cb) -> void *; const std::function<void *()> &cb) -> void *;
void raise_fuse_event(std::string_view function_name, void raise_fuse_event(std::string_view function_name,
const std::string &api_path, int ret, std::string_view api_path, int ret,
bool disable_logging); bool disable_logging);
private: private:

View File

@ -106,8 +106,8 @@ auto fuse_base::access_(const char *path, int mask) -> int {
}; };
return instance().instance().execute_callback( return instance().instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().access_impl(api_path, mask); return instance().access_impl(std::move(api_path), mask);
}); });
} }
@ -118,8 +118,8 @@ auto fuse_base::chflags_(const char *path, uint32_t flags) -> int {
}; };
return instance().instance().execute_callback( return instance().instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().chflags_impl(api_path, flags); return instance().chflags_impl(std::move(api_path), flags);
}); });
} }
#endif // __APPLE__ #endif // __APPLE__
@ -132,8 +132,8 @@ auto fuse_base::chmod_(const char *path, mode_t mode,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().chmod_impl(api_path, mode, fi); return instance().chmod_impl(std::move(api_path) mode, fi);
}); });
} }
#else #else
@ -143,8 +143,8 @@ auto fuse_base::chmod_(const char *path, mode_t mode) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().chmod_impl(api_path, mode); return instance().chmod_impl(std::move(api_path), mode);
}); });
} }
#endif #endif
@ -157,8 +157,8 @@ auto fuse_base::chown_(const char *path, uid_t uid, gid_t gid,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().chown_impl(api_path, uid, gid, fi); return instance().chown_impl(std::move(api_path), uid, gid, fi);
}); });
} }
#else #else
@ -168,8 +168,8 @@ auto fuse_base::chown_(const char *path, uid_t uid, gid_t gid) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().chown_impl(api_path, uid, gid); return instance().chown_impl(std::move(api_path), uid, gid);
}); });
} }
#endif #endif
@ -181,8 +181,8 @@ auto fuse_base::create_(const char *path, mode_t mode,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().create_impl(api_path, mode, fi); return instance().create_impl(std::move(api_path), mode, fi);
}); });
} }
@ -237,7 +237,7 @@ auto fuse_base::execute_callback(
auto fuse_base::execute_callback( auto fuse_base::execute_callback(
std::string_view function_name, const char *path, std::string_view function_name, const char *path,
const std::function<api_error(const std::string &api_path)> &cb, const std::function<api_error(std::string api_path)> &cb,
bool disable_logging) -> int { bool disable_logging) -> int {
const auto api_path = utils::path::create_api_path(path ? path : ""); const auto api_path = utils::path::create_api_path(path ? path : "");
const auto res = utils::from_api_error(cb(api_path)); const auto res = utils::from_api_error(cb(api_path));
@ -269,8 +269,9 @@ auto fuse_base::fallocate_(const char *path, int mode, off_t offset,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().fallocate_impl(api_path, mode, offset, length, fi); return instance().fallocate_impl(std::move(api_path), mode, offset,
length, fi);
}); });
} }
@ -282,8 +283,8 @@ auto fuse_base::fgetattr_(const char *path, struct stat *st,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().fgetattr_impl(api_path, st, fi); return instance().fgetattr_impl(std::move(api_path), st, fi);
}); });
} }
#endif #endif
@ -296,8 +297,8 @@ auto fuse_base::fsetattr_x_(const char *path, struct setattr_x *attr,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().fsetattr_x_impl(api_path, attr, fi); return instance().fsetattr_x_impl(std::move(api_path), attr, fi);
}); });
} }
#endif // __APPLE__ #endif // __APPLE__
@ -309,8 +310,8 @@ auto fuse_base::fsync_(const char *path, int datasync,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().fsync_impl(api_path, datasync, fi); return instance().fsync_impl(std::move(api_path), datasync, fi);
}); });
} }
@ -322,8 +323,8 @@ auto fuse_base::ftruncate_(const char *path, off_t size,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().ftruncate_impl(api_path, size, fi); return instance().ftruncate_impl(std::move(api_path), size, fi);
}); });
} }
#endif #endif
@ -336,8 +337,8 @@ auto fuse_base::getattr_(const char *path, struct stat *st,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().getattr_impl(api_path, st, fi); return instance().getattr_impl(std::move(api_path), st, fi);
}); });
} }
#else #else
@ -347,8 +348,8 @@ auto fuse_base::getattr_(const char *path, struct stat *st) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().getattr_impl(api_path, st); return instance().getattr_impl(std::move(api_path), st);
}); });
} }
#endif #endif
@ -361,8 +362,8 @@ auto fuse_base::getxtimes_(const char *path, struct timespec *bkuptime,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().getxtimes_impl(api_path, bkuptime, crtime); return instance().getxtimes_impl(std::move(api_path), bkuptime, crtime);
}); });
} }
#endif // __APPLE__ #endif // __APPLE__
@ -427,8 +428,8 @@ auto fuse_base::mkdir_(const char *path, mode_t mode) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().mkdir_impl(api_path, mode); return instance().mkdir_impl(std::move(api_path), mode);
}); });
} }
@ -486,8 +487,8 @@ auto fuse_base::open_(const char *path, struct fuse_file_info *fi) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().open_impl(api_path, fi); return instance().open_impl(std::move(api_path), fi);
}); });
} }
@ -497,8 +498,8 @@ auto fuse_base::opendir_(const char *path, struct fuse_file_info *fi) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().opendir_impl(api_path, fi); return instance().opendir_impl(std::move(api_path), fi);
}); });
} }
@ -511,9 +512,9 @@ auto fuse_base::read_(const char *path, char *buffer, size_t read_size,
std::size_t bytes_read{}; std::size_t bytes_read{};
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, function_name, path,
[&](const std::string &api_path) -> api_error { [&](std::string api_path) -> api_error {
return instance().read_impl(api_path, buffer, read_size, read_offset, return instance().read_impl(std::move(api_path), buffer, read_size,
fi, bytes_read); read_offset, fi, bytes_read);
}, },
true); true);
return (res == 0) ? static_cast<int>(bytes_read) : res; return (res == 0) ? static_cast<int>(bytes_read) : res;
@ -529,9 +530,9 @@ auto fuse_base::readdir_(const char *path, void *buf,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().readdir_impl(api_path, buf, fuse_fill_dir, offset, fi, return instance().readdir_impl(std::move(api_path), buf, fuse_fill_dir,
flags); offset, fi, flags);
}); });
} }
#else #else
@ -543,9 +544,9 @@ auto fuse_base::readdir_(const char *path, void *buf,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().readdir_impl(api_path, buf, fuse_fill_dir, offset, return instance().readdir_impl(std::move(api_path), buf, fuse_fill_dir,
fi); offset, fi);
}); });
} }
#endif #endif
@ -556,8 +557,8 @@ auto fuse_base::release_(const char *path, struct fuse_file_info *fi) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().release_impl(api_path, fi); return instance().release_impl(std::move(api_path), fi);
}); });
} }
@ -568,8 +569,8 @@ auto fuse_base::releasedir_(const char *path,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().releasedir_impl(api_path, fi); return instance().releasedir_impl(std::move(api_path), fi);
}); });
} }
@ -608,8 +609,8 @@ auto fuse_base::rmdir_(const char *path) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().rmdir_impl(api_path); return instance().rmdir_impl(std::move(api_path));
}); });
} }
@ -623,9 +624,9 @@ auto fuse_base::getxattr_(const char *path, const char *name, char *value,
int attribute_size = 0; int attribute_size = 0;
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().getxattr_impl(api_path, name, value, size, position, return instance().getxattr_impl(std::move(api_path), name, value, size,
attribute_size); position, attribute_size);
}); });
return res == 0 ? attribute_size : res; return res == 0 ? attribute_size : res;
@ -639,8 +640,8 @@ auto fuse_base::getxattr_(const char *path, const char *name, char *value,
int attribute_size = 0; int attribute_size = 0;
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().getxattr_impl(api_path, name, value, size, return instance().getxattr_impl(std::move(api_path), name, value, size,
attribute_size); attribute_size);
}); });
@ -657,9 +658,9 @@ auto fuse_base::listxattr_(const char *path, char *buffer, size_t size) -> int {
bool return_size = false; bool return_size = false;
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().listxattr_impl(api_path, buffer, size, required_size, return instance().listxattr_impl(std::move(api_path), buffer, size,
return_size); required_size, return_size);
}); });
return return_size ? required_size : res; return return_size ? required_size : res;
@ -752,7 +753,7 @@ auto fuse_base::parse_args(std::vector<std::string> &args) -> int {
} }
void fuse_base::raise_fuse_event(std::string_view function_name, void fuse_base::raise_fuse_event(std::string_view function_name,
const std::string &api_path, int ret, std::string_view api_path, int ret,
bool disable_logging) { bool disable_logging) {
if ((ret >= 0) && disable_logging) { if ((ret >= 0) && disable_logging) {
return; return;
@ -766,7 +767,7 @@ void fuse_base::raise_fuse_event(std::string_view function_name,
(config_.get_event_level() >= event_level::trace)) { (config_.get_event_level() >= event_level::trace)) {
std::string func{function_name}; std::string func{function_name};
event_system::instance().raise<fuse_event>( event_system::instance().raise<fuse_event>(
utils::string::right_trim(func, '_'), api_path, ret); utils::string::right_trim(func, '_'), std::string{api_path}, ret);
} }
} }
@ -776,8 +777,8 @@ auto fuse_base::removexattr_(const char *path, const char *name) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().removexattr_impl(api_path, name); return instance().removexattr_impl(std::move(api_path), name);
}); });
} }
@ -789,9 +790,9 @@ auto fuse_base::setxattr_(const char *path, const char *name, const char *value,
}; };
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().setxattr_impl(api_path, name, value, size, flags, return instance().setxattr_impl(std::move(api_path), name, value, size,
position); flags, position);
}); });
if (res != 0) { if (res != 0) {
errno = std::abs(res); errno = std::abs(res);
@ -807,8 +808,9 @@ auto fuse_base::setxattr_(const char *path, const char *name, const char *value,
}; };
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().setxattr_impl(api_path, name, value, size, flags); return instance().setxattr_impl(std::move(api_path), name, value, size,
flags);
}); });
if (res != 0) { if (res != 0) {
errno = std::abs(res); errno = std::abs(res);
@ -832,8 +834,8 @@ auto fuse_base::setattr_x_(const char *path, struct setattr_x *attr) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().setattr_x_impl(api_path, attr); return instance().setattr_x_impl(std::move(api_path), attr);
}); });
} }
@ -844,8 +846,8 @@ auto fuse_base::setbkuptime_(const char *path,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().setbkuptime_impl(api_path, bkuptime); return instance().setbkuptime_impl(std::move(api_path), bkuptime);
}); });
} }
@ -856,8 +858,8 @@ auto fuse_base::setchgtime_(const char *path,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().setchgtime_impl(api_path, chgtime); return instance().setchgtime_impl(std::move(api_path), chgtime);
}); });
} }
@ -868,8 +870,8 @@ auto fuse_base::setcrtime_(const char *path,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().setcrtime_impl(api_path, crtime); return instance().setcrtime_impl(std::move(api_path), crtime);
}); });
} }
@ -879,8 +881,8 @@ auto fuse_base::setvolname_(const char *volname) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, volname, [&](const std::string &api_path) -> api_error { function_name, volname, [&](std::string api_path) -> api_error {
return instance().setvolname_impl(volname); return instance().setvolname_impl(std::move(volname));
}); });
} }
@ -890,8 +892,8 @@ auto fuse_base::statfs_x_(const char *path, struct statfs *stbuf) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().statfs_x_impl(api_path, stbuf); return instance().statfs_x_impl(std::move(api_path), stbuf);
}); });
} }
#else // __APPLE__ #else // __APPLE__
@ -901,8 +903,8 @@ auto fuse_base::statfs_(const char *path, struct statvfs *stbuf) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().statfs_impl(api_path, stbuf); return instance().statfs_impl(std::move(api_path), stbuf);
}); });
} }
#endif // __APPLE__ #endif // __APPLE__
@ -915,8 +917,8 @@ auto fuse_base::truncate_(const char *path, off_t size,
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().truncate_impl(api_path, size, fi); return instance().truncate_impl(std::move(api_path), size, fi);
}); });
} }
#else #else
@ -926,8 +928,8 @@ auto fuse_base::truncate_(const char *path, off_t size) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().truncate_impl(api_path, size); return instance().truncate_impl(std::move(api_path), size);
}); });
} }
#endif #endif
@ -938,8 +940,8 @@ auto fuse_base::unlink_(const char *path) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().unlink_impl(api_path); return instance().unlink_impl(std::move(api_path));
}); });
} }
@ -965,8 +967,8 @@ auto fuse_base::utimens_(const char *path, const struct timespec tv[2],
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().utimens_impl(api_path, tv, fi); return instance().utimens_impl(std::move(api_path), tv, fi);
}); });
} }
#else #else
@ -976,8 +978,8 @@ auto fuse_base::utimens_(const char *path, const struct timespec tv[2]) -> int {
}; };
return instance().execute_callback( return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error { function_name, path, [&](std::string api_path) -> api_error {
return instance().utimens_impl(api_path, tv); return instance().utimens_impl(std::move(api_path), tv);
}); });
} }
#endif #endif
@ -992,9 +994,9 @@ auto fuse_base::write_(const char *path, const char *buffer, size_t write_size,
const auto res = instance().execute_callback( const auto res = instance().execute_callback(
function_name, path, function_name, path,
[&](const std::string &api_path) -> api_error { [&](std::string api_path) -> api_error {
return instance().write_impl(api_path, buffer, write_size, write_offset, return instance().write_impl(std::move(api_path), buffer, write_size,
fi, bytes_written); write_offset, fi, bytes_written);
}, },
true); true);
return (res == 0) ? static_cast<int>(bytes_written) : res; return (res == 0) ? static_cast<int>(bytes_written) : res;