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
eventlib
expect_streq
fallocate_impl
fext
fgetattr
flac_version

View File

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

View File

@ -106,8 +106,8 @@ auto fuse_base::access_(const char *path, int mask) -> int {
};
return instance().instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().access_impl(api_path, mask);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().chflags_impl(api_path, flags);
function_name, path, [&](std::string api_path) -> api_error {
return instance().chflags_impl(std::move(api_path), flags);
});
}
#endif // __APPLE__
@ -132,8 +132,8 @@ auto fuse_base::chmod_(const char *path, mode_t mode,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().chmod_impl(api_path, mode, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().chmod_impl(std::move(api_path) mode, fi);
});
}
#else
@ -143,8 +143,8 @@ auto fuse_base::chmod_(const char *path, mode_t mode) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().chmod_impl(api_path, mode);
function_name, path, [&](std::string api_path) -> api_error {
return instance().chmod_impl(std::move(api_path), mode);
});
}
#endif
@ -157,8 +157,8 @@ auto fuse_base::chown_(const char *path, uid_t uid, gid_t gid,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().chown_impl(api_path, uid, gid, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().chown_impl(std::move(api_path), uid, gid, fi);
});
}
#else
@ -168,8 +168,8 @@ auto fuse_base::chown_(const char *path, uid_t uid, gid_t gid) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().chown_impl(api_path, uid, gid);
function_name, path, [&](std::string api_path) -> api_error {
return instance().chown_impl(std::move(api_path), uid, gid);
});
}
#endif
@ -181,8 +181,8 @@ auto fuse_base::create_(const char *path, mode_t mode,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().create_impl(api_path, mode, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().create_impl(std::move(api_path), mode, fi);
});
}
@ -237,7 +237,7 @@ auto fuse_base::execute_callback(
auto fuse_base::execute_callback(
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 {
const auto api_path = utils::path::create_api_path(path ? 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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().fallocate_impl(api_path, mode, offset, length, fi);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().fgetattr_impl(api_path, st, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().fgetattr_impl(std::move(api_path), st, fi);
});
}
#endif
@ -296,8 +297,8 @@ auto fuse_base::fsetattr_x_(const char *path, struct setattr_x *attr,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().fsetattr_x_impl(api_path, attr, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().fsetattr_x_impl(std::move(api_path), attr, fi);
});
}
#endif // __APPLE__
@ -309,8 +310,8 @@ auto fuse_base::fsync_(const char *path, int datasync,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().fsync_impl(api_path, datasync, fi);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().ftruncate_impl(api_path, size, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().ftruncate_impl(std::move(api_path), size, fi);
});
}
#endif
@ -336,8 +337,8 @@ auto fuse_base::getattr_(const char *path, struct stat *st,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().getattr_impl(api_path, st, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().getattr_impl(std::move(api_path), st, fi);
});
}
#else
@ -347,8 +348,8 @@ auto fuse_base::getattr_(const char *path, struct stat *st) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().getattr_impl(api_path, st);
function_name, path, [&](std::string api_path) -> api_error {
return instance().getattr_impl(std::move(api_path), st);
});
}
#endif
@ -361,8 +362,8 @@ auto fuse_base::getxtimes_(const char *path, struct timespec *bkuptime,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().getxtimes_impl(api_path, bkuptime, crtime);
function_name, path, [&](std::string api_path) -> api_error {
return instance().getxtimes_impl(std::move(api_path), bkuptime, crtime);
});
}
#endif // __APPLE__
@ -427,8 +428,8 @@ auto fuse_base::mkdir_(const char *path, mode_t mode) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().mkdir_impl(api_path, mode);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().open_impl(api_path, fi);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().opendir_impl(api_path, fi);
function_name, path, [&](std::string api_path) -> api_error {
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{};
const auto res = instance().execute_callback(
function_name, path,
[&](const std::string &api_path) -> api_error {
return instance().read_impl(api_path, buffer, read_size, read_offset,
fi, bytes_read);
[&](std::string api_path) -> api_error {
return instance().read_impl(std::move(api_path), buffer, read_size,
read_offset, fi, bytes_read);
},
true);
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().readdir_impl(api_path, buf, fuse_fill_dir, offset, fi,
flags);
function_name, path, [&](std::string api_path) -> api_error {
return instance().readdir_impl(std::move(api_path), buf, fuse_fill_dir,
offset, fi, flags);
});
}
#else
@ -543,9 +544,9 @@ auto fuse_base::readdir_(const char *path, void *buf,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().readdir_impl(api_path, buf, fuse_fill_dir, offset,
fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().readdir_impl(std::move(api_path), buf, fuse_fill_dir,
offset, fi);
});
}
#endif
@ -556,8 +557,8 @@ auto fuse_base::release_(const char *path, struct fuse_file_info *fi) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().release_impl(api_path, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().release_impl(std::move(api_path), fi);
});
}
@ -568,8 +569,8 @@ auto fuse_base::releasedir_(const char *path,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().releasedir_impl(api_path, fi);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().rmdir_impl(api_path);
function_name, path, [&](std::string api_path) -> api_error {
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;
const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().getxattr_impl(api_path, name, value, size, position,
attribute_size);
function_name, path, [&](std::string api_path) -> api_error {
return instance().getxattr_impl(std::move(api_path), name, value, size,
position, attribute_size);
});
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;
const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().getxattr_impl(api_path, name, value, size,
function_name, path, [&](std::string api_path) -> api_error {
return instance().getxattr_impl(std::move(api_path), name, value, size,
attribute_size);
});
@ -657,9 +658,9 @@ auto fuse_base::listxattr_(const char *path, char *buffer, size_t size) -> int {
bool return_size = false;
const auto res = instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().listxattr_impl(api_path, buffer, size, required_size,
return_size);
function_name, path, [&](std::string api_path) -> api_error {
return instance().listxattr_impl(std::move(api_path), buffer, size,
required_size, return_size);
});
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,
const std::string &api_path, int ret,
std::string_view api_path, int ret,
bool disable_logging) {
if ((ret >= 0) && disable_logging) {
return;
@ -766,7 +767,7 @@ void fuse_base::raise_fuse_event(std::string_view function_name,
(config_.get_event_level() >= event_level::trace)) {
std::string func{function_name};
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().removexattr_impl(api_path, name);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().setxattr_impl(api_path, name, value, size, flags,
position);
function_name, path, [&](std::string api_path) -> api_error {
return instance().setxattr_impl(std::move(api_path), name, value, size,
flags, position);
});
if (res != 0) {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().setxattr_impl(api_path, name, value, size, flags);
function_name, path, [&](std::string api_path) -> api_error {
return instance().setxattr_impl(std::move(api_path), name, value, size,
flags);
});
if (res != 0) {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().setattr_x_impl(api_path, attr);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().setbkuptime_impl(api_path, bkuptime);
function_name, path, [&](std::string api_path) -> api_error {
return instance().setbkuptime_impl(std::move(api_path), bkuptime);
});
}
@ -856,8 +858,8 @@ auto fuse_base::setchgtime_(const char *path,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().setchgtime_impl(api_path, chgtime);
function_name, path, [&](std::string api_path) -> api_error {
return instance().setchgtime_impl(std::move(api_path), chgtime);
});
}
@ -868,8 +870,8 @@ auto fuse_base::setcrtime_(const char *path,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().setcrtime_impl(api_path, crtime);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, volname, [&](const std::string &api_path) -> api_error {
return instance().setvolname_impl(volname);
function_name, volname, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().statfs_x_impl(api_path, stbuf);
function_name, path, [&](std::string api_path) -> api_error {
return instance().statfs_x_impl(std::move(api_path), stbuf);
});
}
#else // __APPLE__
@ -901,8 +903,8 @@ auto fuse_base::statfs_(const char *path, struct statvfs *stbuf) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().statfs_impl(api_path, stbuf);
function_name, path, [&](std::string api_path) -> api_error {
return instance().statfs_impl(std::move(api_path), stbuf);
});
}
#endif // __APPLE__
@ -915,8 +917,8 @@ auto fuse_base::truncate_(const char *path, off_t size,
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().truncate_impl(api_path, size, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().truncate_impl(std::move(api_path), size, fi);
});
}
#else
@ -926,8 +928,8 @@ auto fuse_base::truncate_(const char *path, off_t size) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().truncate_impl(api_path, size);
function_name, path, [&](std::string api_path) -> api_error {
return instance().truncate_impl(std::move(api_path), size);
});
}
#endif
@ -938,8 +940,8 @@ auto fuse_base::unlink_(const char *path) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().unlink_impl(api_path);
function_name, path, [&](std::string api_path) -> api_error {
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(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().utimens_impl(api_path, tv, fi);
function_name, path, [&](std::string api_path) -> api_error {
return instance().utimens_impl(std::move(api_path), tv, fi);
});
}
#else
@ -976,8 +978,8 @@ auto fuse_base::utimens_(const char *path, const struct timespec tv[2]) -> int {
};
return instance().execute_callback(
function_name, path, [&](const std::string &api_path) -> api_error {
return instance().utimens_impl(api_path, tv);
function_name, path, [&](std::string api_path) -> api_error {
return instance().utimens_impl(std::move(api_path), tv);
});
}
#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(
function_name, path,
[&](const std::string &api_path) -> api_error {
return instance().write_impl(api_path, buffer, write_size, write_offset,
fi, bytes_written);
[&](std::string api_path) -> api_error {
return instance().write_impl(std::move(api_path), buffer, write_size,
write_offset, fi, bytes_written);
},
true);
return (res == 0) ? static_cast<int>(bytes_written) : res;