mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 04:50:31 -04:00
refactor: remove getattr version returning int
This commit is contained in:
parent
aa5f37bb99
commit
6a2cc3f860
@ -114,10 +114,6 @@ class filesystem_v2 {
|
|||||||
return impl_->find(inode, name);
|
return impl_->find(inode, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int getattr(inode_view entry, file_stat* stbuf) const {
|
|
||||||
return impl_->getattr(entry, stbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
file_stat getattr(inode_view entry, std::error_code& ec) const {
|
file_stat getattr(inode_view entry, std::error_code& ec) const {
|
||||||
return impl_->getattr(entry, ec);
|
return impl_->getattr(entry, ec);
|
||||||
}
|
}
|
||||||
@ -250,7 +246,6 @@ class filesystem_v2 {
|
|||||||
virtual std::optional<inode_view> find(int inode) const = 0;
|
virtual std::optional<inode_view> find(int inode) const = 0;
|
||||||
virtual std::optional<inode_view>
|
virtual std::optional<inode_view>
|
||||||
find(int inode, const char* name) const = 0;
|
find(int inode, const char* name) const = 0;
|
||||||
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, std::error_code& ec) const = 0;
|
||||||
virtual file_stat getattr(inode_view entry) const = 0;
|
virtual file_stat getattr(inode_view entry) const = 0;
|
||||||
virtual int access(inode_view entry, int mode, file_stat::uid_type uid,
|
virtual int access(inode_view entry, int mode, file_stat::uid_type uid,
|
||||||
|
@ -105,8 +105,8 @@ class metadata_v2 {
|
|||||||
return impl_->find(inode, name);
|
return impl_->find(inode, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int getattr(inode_view iv, file_stat* stbuf) const {
|
file_stat getattr(inode_view iv, std::error_code& ec) const {
|
||||||
return impl_->getattr(iv, stbuf);
|
return impl_->getattr(iv, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<directory_view> opendir(inode_view iv) const {
|
std::optional<directory_view> opendir(inode_view iv) const {
|
||||||
@ -190,7 +190,7 @@ class metadata_v2 {
|
|||||||
virtual std::optional<inode_view>
|
virtual std::optional<inode_view>
|
||||||
find(int inode, const char* name) const = 0;
|
find(int inode, const char* name) const = 0;
|
||||||
|
|
||||||
virtual int getattr(inode_view iv, file_stat* stbuf) const = 0;
|
virtual file_stat getattr(inode_view iv, std::error_code& ec) const = 0;
|
||||||
|
|
||||||
virtual std::optional<directory_view> opendir(inode_view iv) const = 0;
|
virtual std::optional<directory_view> opendir(inode_view iv) const = 0;
|
||||||
|
|
||||||
|
@ -347,11 +347,7 @@ bool filesystem_extractor_<LoggerPolicy>::extract(
|
|||||||
auto inode = entry.inode();
|
auto inode = entry.inode();
|
||||||
|
|
||||||
auto ae = ::archive_entry_new();
|
auto ae = ::archive_entry_new();
|
||||||
file_stat stbuf;
|
auto stbuf = fs.getattr(inode);
|
||||||
|
|
||||||
if (fs.getattr(inode, &stbuf) != 0) {
|
|
||||||
DWARFS_THROW(runtime_error, "getattr() failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
|
@ -439,7 +439,6 @@ class filesystem_ final : public filesystem_v2::impl {
|
|||||||
std::optional<inode_view> find(const char* path) const override;
|
std::optional<inode_view> find(const char* path) const override;
|
||||||
std::optional<inode_view> find(int inode) const override;
|
std::optional<inode_view> find(int inode) const override;
|
||||||
std::optional<inode_view> find(int inode, const char* name) const override;
|
std::optional<inode_view> find(int inode, const char* name) const override;
|
||||||
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, std::error_code& ec) const override;
|
||||||
file_stat getattr(inode_view entry) const override;
|
file_stat getattr(inode_view entry) const override;
|
||||||
int access(inode_view entry, int mode, file_stat::uid_type uid,
|
int access(inode_view entry, int mode, file_stat::uid_type uid,
|
||||||
@ -493,7 +492,6 @@ class filesystem_ final : public filesystem_v2::impl {
|
|||||||
private:
|
private:
|
||||||
filesystem_info const& get_info() const;
|
filesystem_info const& get_info() const;
|
||||||
void check_section(fs_section const& section) const;
|
void check_section(fs_section const& section) const;
|
||||||
file_stat getattr_ec(inode_view entry, std::error_code& ec) const;
|
|
||||||
std::string
|
std::string
|
||||||
readlink_ec(inode_view entry, readlink_mode mode, std::error_code& ec) const;
|
readlink_ec(inode_view entry, readlink_mode mode, std::error_code& ec) const;
|
||||||
std::vector<std::future<block_range>>
|
std::vector<std::future<block_range>>
|
||||||
@ -517,7 +515,6 @@ class filesystem_ final : public filesystem_v2::impl {
|
|||||||
PERFMON_CLS_TIMER_DECL(find_inode_name)
|
PERFMON_CLS_TIMER_DECL(find_inode_name)
|
||||||
PERFMON_CLS_TIMER_DECL(getattr)
|
PERFMON_CLS_TIMER_DECL(getattr)
|
||||||
PERFMON_CLS_TIMER_DECL(getattr_ec)
|
PERFMON_CLS_TIMER_DECL(getattr_ec)
|
||||||
PERFMON_CLS_TIMER_DECL(getattr_throw)
|
|
||||||
PERFMON_CLS_TIMER_DECL(access)
|
PERFMON_CLS_TIMER_DECL(access)
|
||||||
PERFMON_CLS_TIMER_DECL(access_ec)
|
PERFMON_CLS_TIMER_DECL(access_ec)
|
||||||
PERFMON_CLS_TIMER_DECL(opendir)
|
PERFMON_CLS_TIMER_DECL(opendir)
|
||||||
@ -600,7 +597,6 @@ filesystem_<LoggerPolicy>::filesystem_(
|
|||||||
PERFMON_CLS_TIMER_INIT(find_inode_name)
|
PERFMON_CLS_TIMER_INIT(find_inode_name)
|
||||||
PERFMON_CLS_TIMER_INIT(getattr)
|
PERFMON_CLS_TIMER_INIT(getattr)
|
||||||
PERFMON_CLS_TIMER_INIT(getattr_ec)
|
PERFMON_CLS_TIMER_INIT(getattr_ec)
|
||||||
PERFMON_CLS_TIMER_INIT(getattr_throw)
|
|
||||||
PERFMON_CLS_TIMER_INIT(access)
|
PERFMON_CLS_TIMER_INIT(access)
|
||||||
PERFMON_CLS_TIMER_INIT(access_ec)
|
PERFMON_CLS_TIMER_INIT(access_ec)
|
||||||
PERFMON_CLS_TIMER_INIT(opendir)
|
PERFMON_CLS_TIMER_INIT(opendir)
|
||||||
@ -1069,32 +1065,18 @@ filesystem_<LoggerPolicy>::find(int inode, const char* name) const {
|
|||||||
return meta_.find(inode, name);
|
return meta_.find(inode, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
|
||||||
int filesystem_<LoggerPolicy>::getattr(inode_view entry,
|
|
||||||
file_stat* stbuf) const {
|
|
||||||
PERFMON_CLS_SCOPED_SECTION(getattr)
|
|
||||||
return meta_.getattr(entry, stbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
|
||||||
file_stat filesystem_<LoggerPolicy>::getattr_ec(inode_view entry,
|
|
||||||
std::error_code& ec) const {
|
|
||||||
return call_int_error<file_stat>(
|
|
||||||
[&](auto& stbuf) { return meta_.getattr(entry, &stbuf); }, ec);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
file_stat filesystem_<LoggerPolicy>::getattr(inode_view entry,
|
file_stat filesystem_<LoggerPolicy>::getattr(inode_view entry,
|
||||||
std::error_code& ec) const {
|
std::error_code& ec) const {
|
||||||
PERFMON_CLS_SCOPED_SECTION(getattr_ec)
|
PERFMON_CLS_SCOPED_SECTION(getattr_ec)
|
||||||
return getattr_ec(entry, ec);
|
return meta_.getattr(entry, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
file_stat filesystem_<LoggerPolicy>::getattr(inode_view entry) const {
|
file_stat filesystem_<LoggerPolicy>::getattr(inode_view entry) const {
|
||||||
PERFMON_CLS_SCOPED_SECTION(getattr_throw)
|
PERFMON_CLS_SCOPED_SECTION(getattr)
|
||||||
return call_ec_throw(
|
return call_ec_throw(
|
||||||
[&](std::error_code& ec) { return getattr_ec(entry, ec); });
|
[&](std::error_code& ec) { return meta_.getattr(entry, ec); });
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
|
@ -483,7 +483,7 @@ class metadata_ final : public metadata_v2::impl {
|
|||||||
std::optional<inode_view> find(int inode) const override;
|
std::optional<inode_view> find(int inode) const override;
|
||||||
std::optional<inode_view> find(int inode, const char* name) const override;
|
std::optional<inode_view> find(int inode, const char* name) const override;
|
||||||
|
|
||||||
int getattr(inode_view iv, file_stat* stbuf) const override;
|
file_stat getattr(inode_view iv, std::error_code& ec) const override;
|
||||||
|
|
||||||
std::optional<directory_view> opendir(inode_view iv) const override;
|
std::optional<directory_view> opendir(inode_view iv) const override;
|
||||||
|
|
||||||
@ -1525,10 +1525,13 @@ metadata_<LoggerPolicy>::find(int inode, const char* name) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
int metadata_<LoggerPolicy>::getattr(inode_view iv, file_stat* stbuf) const {
|
file_stat
|
||||||
|
metadata_<LoggerPolicy>::getattr(inode_view iv, std::error_code& /*ec*/) const {
|
||||||
PERFMON_CLS_SCOPED_SECTION(getattr)
|
PERFMON_CLS_SCOPED_SECTION(getattr)
|
||||||
|
|
||||||
::memset(stbuf, 0, sizeof(*stbuf));
|
file_stat stbuf;
|
||||||
|
|
||||||
|
::memset(&stbuf, 0, sizeof(stbuf));
|
||||||
|
|
||||||
auto mode = iv.mode();
|
auto mode = iv.mode();
|
||||||
auto timebase = meta_.timestamp_base();
|
auto timebase = meta_.timestamp_base();
|
||||||
@ -1542,35 +1545,35 @@ int metadata_<LoggerPolicy>::getattr(inode_view iv, file_stat* stbuf) const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stbuf->mode = mode;
|
stbuf.mode = mode;
|
||||||
|
|
||||||
if (options_.readonly) {
|
if (options_.readonly) {
|
||||||
stbuf->mode &= READ_ONLY_MASK;
|
stbuf.mode &= READ_ONLY_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
stbuf->size = stbuf->is_directory() ? make_directory_view(iv).entry_count()
|
stbuf.size = stbuf.is_directory() ? make_directory_view(iv).entry_count()
|
||||||
: file_size(iv, mode);
|
: file_size(iv, mode);
|
||||||
stbuf->ino = inode + inode_offset_;
|
stbuf.ino = inode + inode_offset_;
|
||||||
stbuf->blksize = options_.block_size;
|
stbuf.blksize = options_.block_size;
|
||||||
stbuf->blocks = (stbuf->size + 511) / 512;
|
stbuf.blocks = (stbuf.size + 511) / 512;
|
||||||
stbuf->uid = iv.getuid();
|
stbuf.uid = iv.getuid();
|
||||||
stbuf->gid = iv.getgid();
|
stbuf.gid = iv.getgid();
|
||||||
stbuf->mtime = resolution * (timebase + iv.raw().mtime_offset());
|
stbuf.mtime = resolution * (timebase + iv.raw().mtime_offset());
|
||||||
if (mtime_only) {
|
if (mtime_only) {
|
||||||
stbuf->atime = stbuf->ctime = stbuf->mtime;
|
stbuf.atime = stbuf.ctime = stbuf.mtime;
|
||||||
} else {
|
} else {
|
||||||
stbuf->atime = resolution * (timebase + iv.raw().atime_offset());
|
stbuf.atime = resolution * (timebase + iv.raw().atime_offset());
|
||||||
stbuf->ctime = resolution * (timebase + iv.raw().ctime_offset());
|
stbuf.ctime = resolution * (timebase + iv.raw().ctime_offset());
|
||||||
}
|
}
|
||||||
stbuf->nlink = options_.enable_nlink && stbuf->is_regular_file()
|
stbuf.nlink = options_.enable_nlink && stbuf.is_regular_file()
|
||||||
? DWARFS_NOTHROW(nlinks_.at(inode - file_inode_offset_))
|
? DWARFS_NOTHROW(nlinks_.at(inode - file_inode_offset_))
|
||||||
: 1;
|
: 1;
|
||||||
|
|
||||||
if (stbuf->is_device()) {
|
if (stbuf.is_device()) {
|
||||||
stbuf->rdev = get_device_id(inode);
|
stbuf.rdev = get_device_id(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return stbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
|
@ -368,10 +368,10 @@ void op_lookup(fuse_req_t req, fuse_ino_t parent, char const* name) {
|
|||||||
return ENOENT;
|
return ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_stat stbuf;
|
std::error_code ec;
|
||||||
auto err = userdata.fs.getattr(*entry, &stbuf);
|
auto stbuf = userdata.fs.getattr(*entry, ec);
|
||||||
|
|
||||||
if (err == 0) {
|
if (!ec) {
|
||||||
struct ::fuse_entry_param e;
|
struct ::fuse_entry_param e;
|
||||||
|
|
||||||
::memset(&e.attr, 0, sizeof(e.attr));
|
::memset(&e.attr, 0, sizeof(e.attr));
|
||||||
@ -386,7 +386,7 @@ void op_lookup(fuse_req_t req, fuse_ino_t parent, char const* name) {
|
|||||||
fuse_reply_entry(req, &e);
|
fuse_reply_entry(req, &e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return ec.value();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -401,16 +401,15 @@ int op_getattr_common(LogProxy& log_, dwarfs_userdata& userdata,
|
|||||||
return ENOENT;
|
return ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_stat stbuf;
|
std::error_code ec;
|
||||||
|
auto stbuf = userdata.fs.getattr(*entry, ec);
|
||||||
|
|
||||||
auto err = userdata.fs.getattr(*entry, &stbuf);
|
if (!ec) {
|
||||||
|
|
||||||
if (err == 0) {
|
|
||||||
::memset(st, 0, sizeof(*st));
|
::memset(st, 0, sizeof(*st));
|
||||||
copy_file_stat(st, stbuf);
|
copy_file_stat(st, stbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return ec.value();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -769,7 +768,6 @@ int op_readdir_common(filesystem_v2& fs, Policy& policy, file_off_t off,
|
|||||||
}
|
}
|
||||||
|
|
||||||
file_off_t lastoff = fs.dirsize(*dir);
|
file_off_t lastoff = fs.dirsize(*dir);
|
||||||
file_stat stbuf;
|
|
||||||
native_stat st;
|
native_stat st;
|
||||||
|
|
||||||
::memset(&st, 0, sizeof(st));
|
::memset(&st, 0, sizeof(st));
|
||||||
@ -780,7 +778,13 @@ int op_readdir_common(filesystem_v2& fs, Policy& policy, file_off_t off,
|
|||||||
|
|
||||||
auto [entry, name] = *res;
|
auto [entry, name] = *res;
|
||||||
|
|
||||||
fs.getattr(entry, &stbuf);
|
std::error_code ec;
|
||||||
|
auto stbuf = fs.getattr(entry, ec);
|
||||||
|
|
||||||
|
if (ec) {
|
||||||
|
return ec.value();
|
||||||
|
}
|
||||||
|
|
||||||
copy_file_stat(&st, stbuf);
|
copy_file_stat(&st, stbuf);
|
||||||
|
|
||||||
if (!policy.add_entry(name, st, off)) {
|
if (!policy.add_entry(name, st, off)) {
|
||||||
|
@ -109,12 +109,10 @@ int dwarfsbench_main(int argc, sys_char** argv, iolayer const& iol) {
|
|||||||
if (inode_data.is_regular_file()) {
|
if (inode_data.is_regular_file()) {
|
||||||
pool.add_job([&fs, &iol, inode_data] {
|
pool.add_job([&fs, &iol, inode_data] {
|
||||||
try {
|
try {
|
||||||
file_stat stbuf;
|
auto stbuf = fs.getattr(inode_data);
|
||||||
if (fs.getattr(inode_data, &stbuf) == 0) {
|
|
||||||
std::vector<char> buf(stbuf.size);
|
std::vector<char> buf(stbuf.size);
|
||||||
int fh = fs.open(inode_data);
|
int fh = fs.open(inode_data);
|
||||||
fs.read(fh, buf.data(), buf.size());
|
fs.read(fh, buf.data(), buf.size());
|
||||||
}
|
|
||||||
} catch (std::exception const& e) {
|
} catch (std::exception const& e) {
|
||||||
iol.err << "error: " << exception_str(e) << "\n";
|
iol.err << "error: " << exception_str(e) << "\n";
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
@ -69,8 +69,7 @@ void do_list_files(filesystem_v2& fs, iolayer const& iol, bool verbose) {
|
|||||||
|
|
||||||
file_stat::off_type max_inode_size{0};
|
file_stat::off_type max_inode_size{0};
|
||||||
fs.walk([&](auto const& de) {
|
fs.walk([&](auto const& de) {
|
||||||
file_stat st;
|
auto st = fs.getattr(de.inode());
|
||||||
fs.getattr(de.inode(), &st);
|
|
||||||
max_inode_size = std::max(max_inode_size, st.size);
|
max_inode_size = std::max(max_inode_size, st.size);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -78,8 +77,7 @@ void do_list_files(filesystem_v2& fs, iolayer const& iol, bool verbose) {
|
|||||||
|
|
||||||
fs.walk([&](auto const& de) {
|
fs.walk([&](auto const& de) {
|
||||||
auto iv = de.inode();
|
auto iv = de.inode();
|
||||||
file_stat st;
|
auto st = fs.getattr(iv);
|
||||||
fs.getattr(iv, &st);
|
|
||||||
auto name = de.unix_path();
|
auto name = de.unix_path();
|
||||||
utf8_sanitize(name);
|
utf8_sanitize(name);
|
||||||
|
|
||||||
@ -111,14 +109,15 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol,
|
|||||||
auto iv = de.inode();
|
auto iv = de.inode();
|
||||||
|
|
||||||
if (iv.is_regular_file()) {
|
if (iv.is_regular_file()) {
|
||||||
file_stat st;
|
std::error_code ec;
|
||||||
|
auto st = fs.getattr(iv, ec);
|
||||||
|
|
||||||
if (fs.getattr(de.inode(), &st) != 0) {
|
if (ec) {
|
||||||
LOG_ERROR << "failed to get attributes for inode " << iv.inode_num();
|
LOG_ERROR << "failed to get attributes for inode " << iv.inode_num()
|
||||||
|
<< ": " << ec.message();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code ec;
|
|
||||||
auto ranges = fs.readv(iv.inode_num(), st.size, ec);
|
auto ranges = fs.readv(iv.inode_num(), st.size, ec);
|
||||||
|
|
||||||
if (ec) {
|
if (ec) {
|
||||||
|
@ -227,8 +227,7 @@ TEST_P(options_test, cache_stress) {
|
|||||||
for (auto& reqs : data) {
|
for (auto& reqs : data) {
|
||||||
while (reqs.size() < num_read_reqs) {
|
while (reqs.size() < num_read_reqs) {
|
||||||
auto iv = inodes[inode_dist(rng)];
|
auto iv = inodes[inode_dist(rng)];
|
||||||
file_stat stat;
|
auto stat = fs.getattr(iv);
|
||||||
EXPECT_EQ(0, fs.getattr(iv, &stat));
|
|
||||||
if (stat.is_regular_file()) {
|
if (stat.is_regular_file()) {
|
||||||
auto offset = rng() % stat.size;
|
auto offset = rng() % stat.size;
|
||||||
auto size = rng() % (stat.size - offset);
|
auto size = rng() % (stat.size - offset);
|
||||||
|
@ -836,10 +836,9 @@ void check_compat(logger& lgr, filesystem_v2 const& fs,
|
|||||||
EXPECT_GT(dumpss.str().size(), 1000) << dumpss.str();
|
EXPECT_GT(dumpss.str().size(), 1000) << dumpss.str();
|
||||||
|
|
||||||
auto entry = fs.find("/format.sh");
|
auto entry = fs.find("/format.sh");
|
||||||
file_stat st;
|
|
||||||
|
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(0, fs.getattr(*entry, &st));
|
auto st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(94, st.size);
|
EXPECT_EQ(94, st.size);
|
||||||
EXPECT_EQ(S_IFREG | 0755, st.mode);
|
EXPECT_EQ(S_IFREG | 0755, st.mode);
|
||||||
EXPECT_EQ(1000, st.uid);
|
EXPECT_EQ(1000, st.uid);
|
||||||
@ -953,8 +952,7 @@ void check_compat(logger& lgr, filesystem_v2 const& fs,
|
|||||||
std::vector<int> inodes;
|
std::vector<int> inodes;
|
||||||
|
|
||||||
(fs.*mp)([&](dir_entry_view e) {
|
(fs.*mp)([&](dir_entry_view e) {
|
||||||
file_stat stbuf;
|
auto stbuf = fs.getattr(e.inode());
|
||||||
ASSERT_EQ(0, fs.getattr(e.inode(), &stbuf));
|
|
||||||
inodes.push_back(stbuf.ino);
|
inodes.push_back(stbuf.ino);
|
||||||
EXPECT_TRUE(entries.emplace(e.unix_path(), stbuf).second);
|
EXPECT_TRUE(entries.emplace(e.unix_path(), stbuf).second);
|
||||||
});
|
});
|
||||||
@ -1268,8 +1266,7 @@ TEST_P(set_uidgid_test, read_legacy_image) {
|
|||||||
EXPECT_EQ(33333, v->getuid()) << path;
|
EXPECT_EQ(33333, v->getuid()) << path;
|
||||||
EXPECT_EQ(44444, v->getgid()) << path;
|
EXPECT_EQ(44444, v->getgid()) << path;
|
||||||
|
|
||||||
file_stat st;
|
auto st = fs.getattr(*v);
|
||||||
EXPECT_EQ(0, fs.getattr(*v, &st)) << path;
|
|
||||||
EXPECT_EQ(33333, st.uid) << path;
|
EXPECT_EQ(33333, st.uid) << path;
|
||||||
EXPECT_EQ(44444, st.gid) << path;
|
EXPECT_EQ(44444, st.gid) << path;
|
||||||
}
|
}
|
||||||
|
@ -224,8 +224,7 @@ class filesystem : public ::benchmark::Fixture {
|
|||||||
|
|
||||||
void read_bench(::benchmark::State& state, const char* file) {
|
void read_bench(::benchmark::State& state, const char* file) {
|
||||||
auto iv = fs->find(file);
|
auto iv = fs->find(file);
|
||||||
file_stat st;
|
auto st = fs->getattr(*iv);
|
||||||
fs->getattr(*iv, &st);
|
|
||||||
auto i = fs->open(*iv);
|
auto i = fs->open(*iv);
|
||||||
std::string buf;
|
std::string buf;
|
||||||
buf.resize(st.size);
|
buf.resize(st.size);
|
||||||
@ -238,8 +237,7 @@ class filesystem : public ::benchmark::Fixture {
|
|||||||
|
|
||||||
void readv_bench(::benchmark::State& state, char const* file) {
|
void readv_bench(::benchmark::State& state, char const* file) {
|
||||||
auto iv = fs->find(file);
|
auto iv = fs->find(file);
|
||||||
file_stat st;
|
auto st = fs->getattr(*iv);
|
||||||
fs->getattr(*iv, &st);
|
|
||||||
auto i = fs->open(*iv);
|
auto i = fs->open(*iv);
|
||||||
|
|
||||||
for (auto _ : state) {
|
for (auto _ : state) {
|
||||||
@ -251,8 +249,7 @@ class filesystem : public ::benchmark::Fixture {
|
|||||||
|
|
||||||
void readv_future_bench(::benchmark::State& state, char const* file) {
|
void readv_future_bench(::benchmark::State& state, char const* file) {
|
||||||
auto iv = fs->find(file);
|
auto iv = fs->find(file);
|
||||||
file_stat st;
|
auto st = fs->getattr(*iv);
|
||||||
fs->getattr(*iv, &st);
|
|
||||||
auto i = fs->open(*iv);
|
auto i = fs->open(*iv);
|
||||||
|
|
||||||
for (auto _ : state) {
|
for (auto _ : state) {
|
||||||
@ -275,8 +272,7 @@ class filesystem : public ::benchmark::Fixture {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (auto _ : state) {
|
for (auto _ : state) {
|
||||||
file_stat buf;
|
auto r = fs->getattr(ent[i++ % N]);
|
||||||
auto r = fs->getattr(ent[i++ % N], &buf);
|
|
||||||
::benchmark::DoNotOptimize(r);
|
::benchmark::DoNotOptimize(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -246,10 +246,9 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
EXPECT_GT(dumpss.str().size(), 1000) << dumpss.str();
|
EXPECT_GT(dumpss.str().size(), 1000) << dumpss.str();
|
||||||
|
|
||||||
auto entry = fs.find("/foo.pl");
|
auto entry = fs.find("/foo.pl");
|
||||||
file_stat st;
|
|
||||||
|
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
auto st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, 23456);
|
EXPECT_EQ(st.size, 23456);
|
||||||
EXPECT_EQ(st.uid, set_uid ? 0 : 1337);
|
EXPECT_EQ(st.uid, set_uid ? 0 : 1337);
|
||||||
EXPECT_EQ(st.gid, 0);
|
EXPECT_EQ(st.gid, 0);
|
||||||
@ -268,7 +267,7 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
entry = fs.find("/somelink");
|
entry = fs.find("/somelink");
|
||||||
|
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, 16);
|
EXPECT_EQ(st.size, 16);
|
||||||
EXPECT_EQ(st.uid, set_uid ? 0 : 1000);
|
EXPECT_EQ(st.uid, set_uid ? 0 : 1000);
|
||||||
EXPECT_EQ(st.gid, set_gid ? 0 : 100);
|
EXPECT_EQ(st.gid, set_gid ? 0 : 100);
|
||||||
@ -286,7 +285,7 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
entry = fs.find("/somedir/bad");
|
entry = fs.find("/somedir/bad");
|
||||||
|
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, 6);
|
EXPECT_EQ(st.size, 6);
|
||||||
|
|
||||||
EXPECT_EQ(fs.readlink(*entry, &link), 0);
|
EXPECT_EQ(fs.readlink(*entry, &link), 0);
|
||||||
@ -296,7 +295,7 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
|
|
||||||
if (with_specials) {
|
if (with_specials) {
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, 0);
|
EXPECT_EQ(st.size, 0);
|
||||||
EXPECT_EQ(st.uid, set_uid ? 0 : 1000);
|
EXPECT_EQ(st.uid, set_uid ? 0 : 1000);
|
||||||
EXPECT_EQ(st.gid, set_gid ? 0 : 100);
|
EXPECT_EQ(st.gid, set_gid ? 0 : 100);
|
||||||
@ -313,7 +312,7 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
|
|
||||||
if (with_devices) {
|
if (with_devices) {
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, 0);
|
EXPECT_EQ(st.size, 0);
|
||||||
EXPECT_EQ(st.uid, 0);
|
EXPECT_EQ(st.uid, 0);
|
||||||
EXPECT_EQ(st.gid, 0);
|
EXPECT_EQ(st.gid, 0);
|
||||||
@ -327,7 +326,7 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
|
|
||||||
if (with_devices) {
|
if (with_devices) {
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, 0);
|
EXPECT_EQ(st.size, 0);
|
||||||
EXPECT_EQ(st.uid, 0);
|
EXPECT_EQ(st.uid, 0);
|
||||||
EXPECT_EQ(st.gid, 0);
|
EXPECT_EQ(st.gid, 0);
|
||||||
@ -394,9 +393,8 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
|
|
||||||
EXPECT_EQ(entry->inode_num(), e2->inode_num());
|
EXPECT_EQ(entry->inode_num(), e2->inode_num());
|
||||||
|
|
||||||
file_stat st1, st2;
|
auto st1 = fs.getattr(*entry);
|
||||||
ASSERT_EQ(0, fs.getattr(*entry, &st1));
|
auto st2 = fs.getattr(*e2);
|
||||||
ASSERT_EQ(0, fs.getattr(*e2, &st2));
|
|
||||||
|
|
||||||
EXPECT_EQ(st1.ino, st2.ino);
|
EXPECT_EQ(st1.ino, st2.ino);
|
||||||
if (enable_nlink) {
|
if (enable_nlink) {
|
||||||
@ -413,14 +411,14 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
entry = fs.find(0, "baz.pl");
|
entry = fs.find(0, "baz.pl");
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_GT(entry->inode_num(), 0);
|
EXPECT_GT(entry->inode_num(), 0);
|
||||||
ASSERT_EQ(0, fs.getattr(*entry, &st1));
|
st1 = fs.getattr(*entry);
|
||||||
EXPECT_EQ(23456, st1.size);
|
EXPECT_EQ(23456, st1.size);
|
||||||
e2 = fs.find(0, "somedir");
|
e2 = fs.find(0, "somedir");
|
||||||
ASSERT_TRUE(e2);
|
ASSERT_TRUE(e2);
|
||||||
ASSERT_EQ(0, fs.getattr(*e2, &st2));
|
st2 = fs.getattr(*e2);
|
||||||
entry = fs.find(st2.ino, "ipsum.py");
|
entry = fs.find(st2.ino, "ipsum.py");
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
ASSERT_EQ(0, fs.getattr(*entry, &st1));
|
st1 = fs.getattr(*entry);
|
||||||
EXPECT_EQ(access_fail ? 0 : 10000, st1.size);
|
EXPECT_EQ(access_fail ? 0 : 10000, st1.size);
|
||||||
EXPECT_EQ(0, fs.access(*entry, R_OK, 1000, 100));
|
EXPECT_EQ(0, fs.access(*entry, R_OK, 1000, 100));
|
||||||
entry = fs.find(0, "baz.pl");
|
entry = fs.find(0, "baz.pl");
|
||||||
@ -432,8 +430,7 @@ void basic_end_to_end_test(std::string const& compressor,
|
|||||||
std::vector<int> inodes;
|
std::vector<int> inodes;
|
||||||
|
|
||||||
(fs.*mp)([&](dir_entry_view e) {
|
(fs.*mp)([&](dir_entry_view e) {
|
||||||
file_stat stbuf;
|
auto stbuf = fs.getattr(e.inode());
|
||||||
ASSERT_EQ(0, fs.getattr(e.inode(), &stbuf));
|
|
||||||
inodes.push_back(stbuf.ino);
|
inodes.push_back(stbuf.ino);
|
||||||
auto path = e.path();
|
auto path = e.path();
|
||||||
if (!path.empty()) {
|
if (!path.empty()) {
|
||||||
@ -647,8 +644,7 @@ TEST_P(packing_test, regression_empty_fs) {
|
|||||||
|
|
||||||
fs.walk([&](dir_entry_view e) {
|
fs.walk([&](dir_entry_view e) {
|
||||||
++num;
|
++num;
|
||||||
file_stat stbuf;
|
auto stbuf = fs.getattr(e.inode());
|
||||||
ASSERT_EQ(0, fs.getattr(e.inode(), &stbuf));
|
|
||||||
EXPECT_TRUE(stbuf.is_directory());
|
EXPECT_TRUE(stbuf.is_directory());
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -792,10 +788,9 @@ TEST_P(compression_regression, github45) {
|
|||||||
|
|
||||||
auto check_file = [&](char const* name, std::string const& contents) {
|
auto check_file = [&](char const* name, std::string const& contents) {
|
||||||
auto entry = fs.find(name);
|
auto entry = fs.find(name);
|
||||||
file_stat st;
|
|
||||||
|
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
auto st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(st.size, file_size);
|
EXPECT_EQ(st.size, file_size);
|
||||||
|
|
||||||
int inode = fs.open(*entry);
|
int inode = fs.open(*entry);
|
||||||
@ -1087,10 +1082,8 @@ TEST(filesystem, uid_gid_32bit) {
|
|||||||
EXPECT_TRUE(iv16);
|
EXPECT_TRUE(iv16);
|
||||||
EXPECT_TRUE(iv32);
|
EXPECT_TRUE(iv32);
|
||||||
|
|
||||||
file_stat st16, st32;
|
auto st16 = fs.getattr(*iv16);
|
||||||
|
auto st32 = fs.getattr(*iv32);
|
||||||
EXPECT_EQ(0, fs.getattr(*iv16, &st16));
|
|
||||||
EXPECT_EQ(0, fs.getattr(*iv32, &st32));
|
|
||||||
|
|
||||||
EXPECT_EQ(60000, st16.uid);
|
EXPECT_EQ(60000, st16.uid);
|
||||||
EXPECT_EQ(65535, st16.gid);
|
EXPECT_EQ(65535, st16.gid);
|
||||||
@ -1125,11 +1118,9 @@ TEST(filesystem, uid_gid_count) {
|
|||||||
EXPECT_TRUE(iv50000);
|
EXPECT_TRUE(iv50000);
|
||||||
EXPECT_TRUE(iv99999);
|
EXPECT_TRUE(iv99999);
|
||||||
|
|
||||||
file_stat st00000, st50000, st99999;
|
auto st00000 = fs.getattr(*iv00000);
|
||||||
|
auto st50000 = fs.getattr(*iv50000);
|
||||||
EXPECT_EQ(0, fs.getattr(*iv00000, &st00000));
|
auto st99999 = fs.getattr(*iv99999);
|
||||||
EXPECT_EQ(0, fs.getattr(*iv50000, &st50000));
|
|
||||||
EXPECT_EQ(0, fs.getattr(*iv99999, &st99999));
|
|
||||||
|
|
||||||
EXPECT_EQ(50000, st00000.uid);
|
EXPECT_EQ(50000, st00000.uid);
|
||||||
EXPECT_EQ(250000, st00000.gid);
|
EXPECT_EQ(250000, st00000.gid);
|
||||||
@ -1203,8 +1194,7 @@ TEST(section_index_regression, github183) {
|
|||||||
|
|
||||||
ASSERT_TRUE(entry);
|
ASSERT_TRUE(entry);
|
||||||
|
|
||||||
file_stat st;
|
auto st = fs.getattr(*entry);
|
||||||
EXPECT_EQ(fs.getattr(*entry, &st), 0);
|
|
||||||
|
|
||||||
int inode{-1};
|
int inode{-1};
|
||||||
|
|
||||||
@ -1266,10 +1256,8 @@ TEST(file_scanner, file_start_hash) {
|
|||||||
EXPECT_TRUE(link1);
|
EXPECT_TRUE(link1);
|
||||||
EXPECT_TRUE(link2);
|
EXPECT_TRUE(link2);
|
||||||
|
|
||||||
file_stat st1, st2;
|
auto st1 = fs.getattr(*link1);
|
||||||
|
auto st2 = fs.getattr(*link2);
|
||||||
EXPECT_EQ(0, fs.getattr(*link1, &st1));
|
|
||||||
EXPECT_EQ(0, fs.getattr(*link2, &st2));
|
|
||||||
|
|
||||||
EXPECT_EQ(st1.ino, st2.ino);
|
EXPECT_EQ(st1.ino, st2.ino);
|
||||||
EXPECT_EQ(st1.nlink, 2);
|
EXPECT_EQ(st1.nlink, 2);
|
||||||
|
@ -374,8 +374,7 @@ build_with_args(std::vector<std::string> opt_args = {}) {
|
|||||||
std::set<uint64_t> get_all_fs_times(filesystem_v2 const& fs) {
|
std::set<uint64_t> get_all_fs_times(filesystem_v2 const& fs) {
|
||||||
std::set<uint64_t> times;
|
std::set<uint64_t> times;
|
||||||
fs.walk([&](auto const& e) {
|
fs.walk([&](auto const& e) {
|
||||||
file_stat st;
|
auto st = fs.getattr(e.inode());
|
||||||
fs.getattr(e.inode(), &st);
|
|
||||||
times.insert(st.atime);
|
times.insert(st.atime);
|
||||||
times.insert(st.ctime);
|
times.insert(st.ctime);
|
||||||
times.insert(st.mtime);
|
times.insert(st.mtime);
|
||||||
@ -386,8 +385,7 @@ std::set<uint64_t> get_all_fs_times(filesystem_v2 const& fs) {
|
|||||||
std::set<uint64_t> get_all_fs_uids(filesystem_v2 const& fs) {
|
std::set<uint64_t> get_all_fs_uids(filesystem_v2 const& fs) {
|
||||||
std::set<uint64_t> uids;
|
std::set<uint64_t> uids;
|
||||||
fs.walk([&](auto const& e) {
|
fs.walk([&](auto const& e) {
|
||||||
file_stat st;
|
auto st = fs.getattr(e.inode());
|
||||||
fs.getattr(e.inode(), &st);
|
|
||||||
uids.insert(st.uid);
|
uids.insert(st.uid);
|
||||||
});
|
});
|
||||||
return uids;
|
return uids;
|
||||||
@ -396,8 +394,7 @@ std::set<uint64_t> get_all_fs_uids(filesystem_v2 const& fs) {
|
|||||||
std::set<uint64_t> get_all_fs_gids(filesystem_v2 const& fs) {
|
std::set<uint64_t> get_all_fs_gids(filesystem_v2 const& fs) {
|
||||||
std::set<uint64_t> gids;
|
std::set<uint64_t> gids;
|
||||||
fs.walk([&](auto const& e) {
|
fs.walk([&](auto const& e) {
|
||||||
file_stat st;
|
auto st = fs.getattr(e.inode());
|
||||||
fs.getattr(e.inode(), &st);
|
|
||||||
gids.insert(st.gid);
|
gids.insert(st.gid);
|
||||||
});
|
});
|
||||||
return gids;
|
return gids;
|
||||||
@ -878,11 +875,7 @@ TEST(mkdwarfs_test, metadata_path) {
|
|||||||
|
|
||||||
std::map<size_t, dir_entry_view> entries;
|
std::map<size_t, dir_entry_view> entries;
|
||||||
fs.walk([&](auto e) {
|
fs.walk([&](auto e) {
|
||||||
file_stat stat;
|
auto stat = fs.getattr(e.inode());
|
||||||
if (fs.getattr(e.inode(), &stat) != 0) {
|
|
||||||
throw std::runtime_error(
|
|
||||||
fmt::format("getattr() failed for {}", e.path()));
|
|
||||||
}
|
|
||||||
if (stat.is_regular_file()) {
|
if (stat.is_regular_file()) {
|
||||||
entries.emplace(stat.size, e);
|
entries.emplace(stat.size, e);
|
||||||
}
|
}
|
||||||
@ -1010,8 +1003,9 @@ TEST(mkdwarfs_test, metadata_specials) {
|
|||||||
auto iv = fs.find("/block");
|
auto iv = fs.find("/block");
|
||||||
ASSERT_TRUE(iv);
|
ASSERT_TRUE(iv);
|
||||||
|
|
||||||
file_stat stat;
|
std::error_code ec;
|
||||||
EXPECT_EQ(0, fs.getattr(*iv, &stat));
|
auto stat = fs.getattr(*iv, ec);
|
||||||
|
EXPECT_FALSE(ec);
|
||||||
|
|
||||||
EXPECT_TRUE(stat.is_device());
|
EXPECT_TRUE(stat.is_device());
|
||||||
EXPECT_EQ(77, stat.rdev);
|
EXPECT_EQ(77, stat.rdev);
|
||||||
@ -1035,8 +1029,9 @@ TEST(mkdwarfs_test, metadata_time_resolution) {
|
|||||||
auto iv = fs.find("/suid");
|
auto iv = fs.find("/suid");
|
||||||
ASSERT_TRUE(iv);
|
ASSERT_TRUE(iv);
|
||||||
|
|
||||||
file_stat stat;
|
std::error_code ec;
|
||||||
EXPECT_EQ(0, fs.getattr(*iv, &stat));
|
auto stat = fs.getattr(*iv, ec);
|
||||||
|
EXPECT_FALSE(ec);
|
||||||
EXPECT_EQ(3300, stat.atime);
|
EXPECT_EQ(3300, stat.atime);
|
||||||
EXPECT_EQ(2220, stat.mtime);
|
EXPECT_EQ(2220, stat.mtime);
|
||||||
EXPECT_EQ(1080, stat.ctime);
|
EXPECT_EQ(1080, stat.ctime);
|
||||||
@ -2549,11 +2544,8 @@ TEST_P(map_file_error_test, delayed) {
|
|||||||
ASSERT_TRUE(small_link2);
|
ASSERT_TRUE(small_link2);
|
||||||
EXPECT_EQ(large_link1->inode_num(), large_link2->inode_num());
|
EXPECT_EQ(large_link1->inode_num(), large_link2->inode_num());
|
||||||
EXPECT_EQ(small_link1->inode_num(), small_link2->inode_num());
|
EXPECT_EQ(small_link1->inode_num(), small_link2->inode_num());
|
||||||
file_stat st;
|
EXPECT_EQ(0, fs.getattr(*large_link1).size);
|
||||||
ASSERT_EQ(0, fs.getattr(*large_link1, &st));
|
EXPECT_EQ(0, fs.getattr(*small_link1).size);
|
||||||
EXPECT_EQ(0, st.size);
|
|
||||||
ASSERT_EQ(0, fs.getattr(*small_link1, &st));
|
|
||||||
EXPECT_EQ(0, st.size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unordered_map<fs::path, std::string, fs_path_hash> actual_files;
|
std::unordered_map<fs::path, std::string, fs_path_hash> actual_files;
|
||||||
@ -2561,8 +2553,7 @@ TEST_P(map_file_error_test, delayed) {
|
|||||||
auto iv = dev.inode();
|
auto iv = dev.inode();
|
||||||
if (iv.is_regular_file()) {
|
if (iv.is_regular_file()) {
|
||||||
std::string data;
|
std::string data;
|
||||||
file_stat stat;
|
auto stat = fs.getattr(iv);
|
||||||
ASSERT_EQ(0, fs.getattr(iv, &stat));
|
|
||||||
data.resize(stat.size);
|
data.resize(stat.size);
|
||||||
ASSERT_EQ(data.size(), fs.read(iv.inode_num(), data.data(), data.size()));
|
ASSERT_EQ(data.size(), fs.read(iv.inode_num(), data.data(), data.size()));
|
||||||
ASSERT_TRUE(actual_files.emplace(dev.fs_path(), std::move(data)).second);
|
ASSERT_TRUE(actual_files.emplace(dev.fs_path(), std::move(data)).second);
|
||||||
@ -2694,8 +2685,7 @@ TEST(block_cache, sequential_access_detector) {
|
|||||||
auto iv = fs.find(pstr.c_str());
|
auto iv = fs.find(pstr.c_str());
|
||||||
ASSERT_TRUE(iv);
|
ASSERT_TRUE(iv);
|
||||||
ASSERT_TRUE(iv->is_regular_file());
|
ASSERT_TRUE(iv->is_regular_file());
|
||||||
file_stat st;
|
auto st = fs.getattr(*iv);
|
||||||
ASSERT_EQ(0, fs.getattr(*iv, &st));
|
|
||||||
ASSERT_EQ(data.size(), st.size);
|
ASSERT_EQ(data.size(), st.size);
|
||||||
std::string buffer;
|
std::string buffer;
|
||||||
buffer.resize(data.size());
|
buffer.resize(data.size());
|
||||||
@ -2799,8 +2789,7 @@ TEST(file_scanner, large_file_handling) {
|
|||||||
for (size_t i = 0; i < data.size(); ++i) {
|
for (size_t i = 0; i < data.size(); ++i) {
|
||||||
auto iv = fs.find(fmt::format("f{}", i).c_str());
|
auto iv = fs.find(fmt::format("f{}", i).c_str());
|
||||||
ASSERT_TRUE(iv) << i;
|
ASSERT_TRUE(iv) << i;
|
||||||
file_stat st;
|
auto st = fs.getattr(*iv);
|
||||||
ASSERT_EQ(0, fs.getattr(*iv, &st)) << i;
|
|
||||||
std::string buffer;
|
std::string buffer;
|
||||||
buffer.resize(st.size);
|
buffer.resize(st.size);
|
||||||
auto nread = fs.read(iv->inode_num(), buffer.data(), st.size);
|
auto nread = fs.read(iv->inode_num(), buffer.data(), st.size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user