From 6a2cc3f86078cdf65f503ca53f705df8cc73b10b Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sun, 28 Jul 2024 16:33:10 +0200 Subject: [PATCH] refactor: remove getattr version returning int --- include/dwarfs/filesystem_v2.h | 5 --- include/dwarfs/internal/metadata_v2.h | 6 +-- src/dwarfs/filesystem_extractor.cpp | 6 +-- src/dwarfs/filesystem_v2.cpp | 24 ++---------- src/dwarfs/internal/metadata_v2.cpp | 47 +++++++++++----------- src/dwarfs_main.cpp | 26 +++++++------ src/dwarfsbench_main.cpp | 10 ++--- src/dwarfsck_main.cpp | 15 ++++--- test/block_cache_test.cpp | 3 +- test/compat_test.cpp | 9 ++--- test/dwarfs_benchmark.cpp | 12 ++---- test/dwarfs_test.cpp | 56 +++++++++++---------------- test/tool_main_test.cpp | 41 +++++++------------- 13 files changed, 103 insertions(+), 157 deletions(-) diff --git a/include/dwarfs/filesystem_v2.h b/include/dwarfs/filesystem_v2.h index 69232642..08b792a0 100644 --- a/include/dwarfs/filesystem_v2.h +++ b/include/dwarfs/filesystem_v2.h @@ -114,10 +114,6 @@ class filesystem_v2 { 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 { return impl_->getattr(entry, ec); } @@ -250,7 +246,6 @@ class filesystem_v2 { virtual std::optional find(int inode) const = 0; virtual std::optional 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) const = 0; virtual int access(inode_view entry, int mode, file_stat::uid_type uid, diff --git a/include/dwarfs/internal/metadata_v2.h b/include/dwarfs/internal/metadata_v2.h index b25b43e2..d9de05be 100644 --- a/include/dwarfs/internal/metadata_v2.h +++ b/include/dwarfs/internal/metadata_v2.h @@ -105,8 +105,8 @@ class metadata_v2 { return impl_->find(inode, name); } - int getattr(inode_view iv, file_stat* stbuf) const { - return impl_->getattr(iv, stbuf); + file_stat getattr(inode_view iv, std::error_code& ec) const { + return impl_->getattr(iv, ec); } std::optional opendir(inode_view iv) const { @@ -190,7 +190,7 @@ class metadata_v2 { virtual std::optional 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 opendir(inode_view iv) const = 0; diff --git a/src/dwarfs/filesystem_extractor.cpp b/src/dwarfs/filesystem_extractor.cpp index bafb9190..b7cfa703 100644 --- a/src/dwarfs/filesystem_extractor.cpp +++ b/src/dwarfs/filesystem_extractor.cpp @@ -347,11 +347,7 @@ bool filesystem_extractor_::extract( auto inode = entry.inode(); auto ae = ::archive_entry_new(); - file_stat stbuf; - - if (fs.getattr(inode, &stbuf) != 0) { - DWARFS_THROW(runtime_error, "getattr() failed"); - } + auto stbuf = fs.getattr(inode); struct stat st; diff --git a/src/dwarfs/filesystem_v2.cpp b/src/dwarfs/filesystem_v2.cpp index 1b05c23f..f79ffcbd 100644 --- a/src/dwarfs/filesystem_v2.cpp +++ b/src/dwarfs/filesystem_v2.cpp @@ -439,7 +439,6 @@ class filesystem_ final : public filesystem_v2::impl { std::optional find(const char* path) const override; std::optional find(int inode) const override; std::optional 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) const override; int access(inode_view entry, int mode, file_stat::uid_type uid, @@ -493,7 +492,6 @@ class filesystem_ final : public filesystem_v2::impl { private: filesystem_info const& get_info() const; void check_section(fs_section const& section) const; - file_stat getattr_ec(inode_view entry, std::error_code& ec) const; std::string readlink_ec(inode_view entry, readlink_mode mode, std::error_code& ec) const; std::vector> @@ -517,7 +515,6 @@ class filesystem_ final : public filesystem_v2::impl { PERFMON_CLS_TIMER_DECL(find_inode_name) PERFMON_CLS_TIMER_DECL(getattr) PERFMON_CLS_TIMER_DECL(getattr_ec) - PERFMON_CLS_TIMER_DECL(getattr_throw) PERFMON_CLS_TIMER_DECL(access) PERFMON_CLS_TIMER_DECL(access_ec) PERFMON_CLS_TIMER_DECL(opendir) @@ -600,7 +597,6 @@ filesystem_::filesystem_( PERFMON_CLS_TIMER_INIT(find_inode_name) PERFMON_CLS_TIMER_INIT(getattr) PERFMON_CLS_TIMER_INIT(getattr_ec) - PERFMON_CLS_TIMER_INIT(getattr_throw) PERFMON_CLS_TIMER_INIT(access) PERFMON_CLS_TIMER_INIT(access_ec) PERFMON_CLS_TIMER_INIT(opendir) @@ -1069,32 +1065,18 @@ filesystem_::find(int inode, const char* name) const { return meta_.find(inode, name); } -template -int filesystem_::getattr(inode_view entry, - file_stat* stbuf) const { - PERFMON_CLS_SCOPED_SECTION(getattr) - return meta_.getattr(entry, stbuf); -} - -template -file_stat filesystem_::getattr_ec(inode_view entry, - std::error_code& ec) const { - return call_int_error( - [&](auto& stbuf) { return meta_.getattr(entry, &stbuf); }, ec); -} - template file_stat filesystem_::getattr(inode_view entry, std::error_code& ec) const { PERFMON_CLS_SCOPED_SECTION(getattr_ec) - return getattr_ec(entry, ec); + return meta_.getattr(entry, ec); } template file_stat filesystem_::getattr(inode_view entry) const { - PERFMON_CLS_SCOPED_SECTION(getattr_throw) + PERFMON_CLS_SCOPED_SECTION(getattr) return call_ec_throw( - [&](std::error_code& ec) { return getattr_ec(entry, ec); }); + [&](std::error_code& ec) { return meta_.getattr(entry, ec); }); } template diff --git a/src/dwarfs/internal/metadata_v2.cpp b/src/dwarfs/internal/metadata_v2.cpp index 51882d4d..36901475 100644 --- a/src/dwarfs/internal/metadata_v2.cpp +++ b/src/dwarfs/internal/metadata_v2.cpp @@ -483,7 +483,7 @@ class metadata_ final : public metadata_v2::impl { std::optional find(int inode) const override; std::optional 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 opendir(inode_view iv) const override; @@ -1525,10 +1525,13 @@ metadata_::find(int inode, const char* name) const { } template -int metadata_::getattr(inode_view iv, file_stat* stbuf) const { +file_stat +metadata_::getattr(inode_view iv, std::error_code& /*ec*/) const { PERFMON_CLS_SCOPED_SECTION(getattr) - ::memset(stbuf, 0, sizeof(*stbuf)); + file_stat stbuf; + + ::memset(&stbuf, 0, sizeof(stbuf)); auto mode = iv.mode(); auto timebase = meta_.timestamp_base(); @@ -1542,35 +1545,35 @@ int metadata_::getattr(inode_view iv, file_stat* stbuf) const { } } - stbuf->mode = mode; + stbuf.mode = mode; if (options_.readonly) { - stbuf->mode &= READ_ONLY_MASK; + stbuf.mode &= READ_ONLY_MASK; } - stbuf->size = stbuf->is_directory() ? make_directory_view(iv).entry_count() - : file_size(iv, mode); - stbuf->ino = inode + inode_offset_; - stbuf->blksize = options_.block_size; - stbuf->blocks = (stbuf->size + 511) / 512; - stbuf->uid = iv.getuid(); - stbuf->gid = iv.getgid(); - stbuf->mtime = resolution * (timebase + iv.raw().mtime_offset()); + stbuf.size = stbuf.is_directory() ? make_directory_view(iv).entry_count() + : file_size(iv, mode); + stbuf.ino = inode + inode_offset_; + stbuf.blksize = options_.block_size; + stbuf.blocks = (stbuf.size + 511) / 512; + stbuf.uid = iv.getuid(); + stbuf.gid = iv.getgid(); + stbuf.mtime = resolution * (timebase + iv.raw().mtime_offset()); if (mtime_only) { - stbuf->atime = stbuf->ctime = stbuf->mtime; + stbuf.atime = stbuf.ctime = stbuf.mtime; } else { - stbuf->atime = resolution * (timebase + iv.raw().atime_offset()); - stbuf->ctime = resolution * (timebase + iv.raw().ctime_offset()); + stbuf.atime = resolution * (timebase + iv.raw().atime_offset()); + stbuf.ctime = resolution * (timebase + iv.raw().ctime_offset()); } - stbuf->nlink = options_.enable_nlink && stbuf->is_regular_file() - ? DWARFS_NOTHROW(nlinks_.at(inode - file_inode_offset_)) - : 1; + stbuf.nlink = options_.enable_nlink && stbuf.is_regular_file() + ? DWARFS_NOTHROW(nlinks_.at(inode - file_inode_offset_)) + : 1; - if (stbuf->is_device()) { - stbuf->rdev = get_device_id(inode); + if (stbuf.is_device()) { + stbuf.rdev = get_device_id(inode); } - return 0; + return stbuf; } template diff --git a/src/dwarfs_main.cpp b/src/dwarfs_main.cpp index c6ea02ab..66da2d1d 100644 --- a/src/dwarfs_main.cpp +++ b/src/dwarfs_main.cpp @@ -368,10 +368,10 @@ void op_lookup(fuse_req_t req, fuse_ino_t parent, char const* name) { return ENOENT; } - file_stat stbuf; - auto err = userdata.fs.getattr(*entry, &stbuf); + std::error_code ec; + auto stbuf = userdata.fs.getattr(*entry, ec); - if (err == 0) { + if (!ec) { struct ::fuse_entry_param e; ::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); } - return err; + return ec.value(); }); } #endif @@ -401,16 +401,15 @@ int op_getattr_common(LogProxy& log_, dwarfs_userdata& userdata, return ENOENT; } - file_stat stbuf; + std::error_code ec; + auto stbuf = userdata.fs.getattr(*entry, ec); - auto err = userdata.fs.getattr(*entry, &stbuf); - - if (err == 0) { + if (!ec) { ::memset(st, 0, sizeof(*st)); 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_stat stbuf; native_stat 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; - fs.getattr(entry, &stbuf); + std::error_code ec; + auto stbuf = fs.getattr(entry, ec); + + if (ec) { + return ec.value(); + } + copy_file_stat(&st, stbuf); if (!policy.add_entry(name, st, off)) { diff --git a/src/dwarfsbench_main.cpp b/src/dwarfsbench_main.cpp index 08dce3a7..aefac4b4 100644 --- a/src/dwarfsbench_main.cpp +++ b/src/dwarfsbench_main.cpp @@ -109,12 +109,10 @@ int dwarfsbench_main(int argc, sys_char** argv, iolayer const& iol) { if (inode_data.is_regular_file()) { pool.add_job([&fs, &iol, inode_data] { try { - file_stat stbuf; - if (fs.getattr(inode_data, &stbuf) == 0) { - std::vector buf(stbuf.size); - int fh = fs.open(inode_data); - fs.read(fh, buf.data(), buf.size()); - } + auto stbuf = fs.getattr(inode_data); + std::vector buf(stbuf.size); + int fh = fs.open(inode_data); + fs.read(fh, buf.data(), buf.size()); } catch (std::exception const& e) { iol.err << "error: " << exception_str(e) << "\n"; } catch (...) { diff --git a/src/dwarfsck_main.cpp b/src/dwarfsck_main.cpp index e8105e08..073832d5 100644 --- a/src/dwarfsck_main.cpp +++ b/src/dwarfsck_main.cpp @@ -69,8 +69,7 @@ void do_list_files(filesystem_v2& fs, iolayer const& iol, bool verbose) { file_stat::off_type max_inode_size{0}; fs.walk([&](auto const& de) { - file_stat st; - fs.getattr(de.inode(), &st); + auto st = fs.getattr(de.inode()); 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) { auto iv = de.inode(); - file_stat st; - fs.getattr(iv, &st); + auto st = fs.getattr(iv); auto name = de.unix_path(); utf8_sanitize(name); @@ -111,14 +109,15 @@ void do_checksum(logger& lgr, filesystem_v2& fs, iolayer const& iol, auto iv = de.inode(); 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) { - LOG_ERROR << "failed to get attributes for inode " << iv.inode_num(); + if (ec) { + LOG_ERROR << "failed to get attributes for inode " << iv.inode_num() + << ": " << ec.message(); return; } - std::error_code ec; auto ranges = fs.readv(iv.inode_num(), st.size, ec); if (ec) { diff --git a/test/block_cache_test.cpp b/test/block_cache_test.cpp index 744871ad..f1ebfe88 100644 --- a/test/block_cache_test.cpp +++ b/test/block_cache_test.cpp @@ -227,8 +227,7 @@ TEST_P(options_test, cache_stress) { for (auto& reqs : data) { while (reqs.size() < num_read_reqs) { auto iv = inodes[inode_dist(rng)]; - file_stat stat; - EXPECT_EQ(0, fs.getattr(iv, &stat)); + auto stat = fs.getattr(iv); if (stat.is_regular_file()) { auto offset = rng() % stat.size; auto size = rng() % (stat.size - offset); diff --git a/test/compat_test.cpp b/test/compat_test.cpp index ddd492ce..68e1f1ab 100644 --- a/test/compat_test.cpp +++ b/test/compat_test.cpp @@ -836,10 +836,9 @@ void check_compat(logger& lgr, filesystem_v2 const& fs, EXPECT_GT(dumpss.str().size(), 1000) << dumpss.str(); auto entry = fs.find("/format.sh"); - file_stat st; ASSERT_TRUE(entry); - EXPECT_EQ(0, fs.getattr(*entry, &st)); + auto st = fs.getattr(*entry); EXPECT_EQ(94, st.size); EXPECT_EQ(S_IFREG | 0755, st.mode); EXPECT_EQ(1000, st.uid); @@ -953,8 +952,7 @@ void check_compat(logger& lgr, filesystem_v2 const& fs, std::vector inodes; (fs.*mp)([&](dir_entry_view e) { - file_stat stbuf; - ASSERT_EQ(0, fs.getattr(e.inode(), &stbuf)); + auto stbuf = fs.getattr(e.inode()); inodes.push_back(stbuf.ino); 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(44444, v->getgid()) << path; - file_stat st; - EXPECT_EQ(0, fs.getattr(*v, &st)) << path; + auto st = fs.getattr(*v); EXPECT_EQ(33333, st.uid) << path; EXPECT_EQ(44444, st.gid) << path; } diff --git a/test/dwarfs_benchmark.cpp b/test/dwarfs_benchmark.cpp index d5176619..c06ab312 100644 --- a/test/dwarfs_benchmark.cpp +++ b/test/dwarfs_benchmark.cpp @@ -224,8 +224,7 @@ class filesystem : public ::benchmark::Fixture { void read_bench(::benchmark::State& state, const char* file) { auto iv = fs->find(file); - file_stat st; - fs->getattr(*iv, &st); + auto st = fs->getattr(*iv); auto i = fs->open(*iv); std::string buf; buf.resize(st.size); @@ -238,8 +237,7 @@ class filesystem : public ::benchmark::Fixture { void readv_bench(::benchmark::State& state, char const* file) { auto iv = fs->find(file); - file_stat st; - fs->getattr(*iv, &st); + auto st = fs->getattr(*iv); auto i = fs->open(*iv); for (auto _ : state) { @@ -251,8 +249,7 @@ class filesystem : public ::benchmark::Fixture { void readv_future_bench(::benchmark::State& state, char const* file) { auto iv = fs->find(file); - file_stat st; - fs->getattr(*iv, &st); + auto st = fs->getattr(*iv); auto i = fs->open(*iv); for (auto _ : state) { @@ -275,8 +272,7 @@ class filesystem : public ::benchmark::Fixture { } for (auto _ : state) { - file_stat buf; - auto r = fs->getattr(ent[i++ % N], &buf); + auto r = fs->getattr(ent[i++ % N]); ::benchmark::DoNotOptimize(r); } } diff --git a/test/dwarfs_test.cpp b/test/dwarfs_test.cpp index c6d742cc..19f755da 100644 --- a/test/dwarfs_test.cpp +++ b/test/dwarfs_test.cpp @@ -246,10 +246,9 @@ void basic_end_to_end_test(std::string const& compressor, EXPECT_GT(dumpss.str().size(), 1000) << dumpss.str(); auto entry = fs.find("/foo.pl"); - file_stat st; ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + auto st = fs.getattr(*entry); EXPECT_EQ(st.size, 23456); EXPECT_EQ(st.uid, set_uid ? 0 : 1337); EXPECT_EQ(st.gid, 0); @@ -268,7 +267,7 @@ void basic_end_to_end_test(std::string const& compressor, entry = fs.find("/somelink"); ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + st = fs.getattr(*entry); EXPECT_EQ(st.size, 16); EXPECT_EQ(st.uid, set_uid ? 0 : 1000); 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"); ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + st = fs.getattr(*entry); EXPECT_EQ(st.size, 6); EXPECT_EQ(fs.readlink(*entry, &link), 0); @@ -296,7 +295,7 @@ void basic_end_to_end_test(std::string const& compressor, if (with_specials) { ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + st = fs.getattr(*entry); EXPECT_EQ(st.size, 0); EXPECT_EQ(st.uid, set_uid ? 0 : 1000); 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) { ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + st = fs.getattr(*entry); EXPECT_EQ(st.size, 0); EXPECT_EQ(st.uid, 0); EXPECT_EQ(st.gid, 0); @@ -327,7 +326,7 @@ void basic_end_to_end_test(std::string const& compressor, if (with_devices) { ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + st = fs.getattr(*entry); EXPECT_EQ(st.size, 0); EXPECT_EQ(st.uid, 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()); - file_stat st1, st2; - ASSERT_EQ(0, fs.getattr(*entry, &st1)); - ASSERT_EQ(0, fs.getattr(*e2, &st2)); + auto st1 = fs.getattr(*entry); + auto st2 = fs.getattr(*e2); EXPECT_EQ(st1.ino, st2.ino); if (enable_nlink) { @@ -413,14 +411,14 @@ void basic_end_to_end_test(std::string const& compressor, entry = fs.find(0, "baz.pl"); ASSERT_TRUE(entry); EXPECT_GT(entry->inode_num(), 0); - ASSERT_EQ(0, fs.getattr(*entry, &st1)); + st1 = fs.getattr(*entry); EXPECT_EQ(23456, st1.size); e2 = fs.find(0, "somedir"); ASSERT_TRUE(e2); - ASSERT_EQ(0, fs.getattr(*e2, &st2)); + st2 = fs.getattr(*e2); entry = fs.find(st2.ino, "ipsum.py"); ASSERT_TRUE(entry); - ASSERT_EQ(0, fs.getattr(*entry, &st1)); + st1 = fs.getattr(*entry); EXPECT_EQ(access_fail ? 0 : 10000, st1.size); EXPECT_EQ(0, fs.access(*entry, R_OK, 1000, 100)); entry = fs.find(0, "baz.pl"); @@ -432,8 +430,7 @@ void basic_end_to_end_test(std::string const& compressor, std::vector inodes; (fs.*mp)([&](dir_entry_view e) { - file_stat stbuf; - ASSERT_EQ(0, fs.getattr(e.inode(), &stbuf)); + auto stbuf = fs.getattr(e.inode()); inodes.push_back(stbuf.ino); auto path = e.path(); if (!path.empty()) { @@ -647,8 +644,7 @@ TEST_P(packing_test, regression_empty_fs) { fs.walk([&](dir_entry_view e) { ++num; - file_stat stbuf; - ASSERT_EQ(0, fs.getattr(e.inode(), &stbuf)); + auto stbuf = fs.getattr(e.inode()); 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 entry = fs.find(name); - file_stat st; ASSERT_TRUE(entry); - EXPECT_EQ(fs.getattr(*entry, &st), 0); + auto st = fs.getattr(*entry); EXPECT_EQ(st.size, file_size); int inode = fs.open(*entry); @@ -1087,10 +1082,8 @@ TEST(filesystem, uid_gid_32bit) { EXPECT_TRUE(iv16); EXPECT_TRUE(iv32); - file_stat st16, st32; - - EXPECT_EQ(0, fs.getattr(*iv16, &st16)); - EXPECT_EQ(0, fs.getattr(*iv32, &st32)); + auto st16 = fs.getattr(*iv16); + auto st32 = fs.getattr(*iv32); EXPECT_EQ(60000, st16.uid); EXPECT_EQ(65535, st16.gid); @@ -1125,11 +1118,9 @@ TEST(filesystem, uid_gid_count) { EXPECT_TRUE(iv50000); EXPECT_TRUE(iv99999); - file_stat st00000, st50000, st99999; - - EXPECT_EQ(0, fs.getattr(*iv00000, &st00000)); - EXPECT_EQ(0, fs.getattr(*iv50000, &st50000)); - EXPECT_EQ(0, fs.getattr(*iv99999, &st99999)); + auto st00000 = fs.getattr(*iv00000); + auto st50000 = fs.getattr(*iv50000); + auto st99999 = fs.getattr(*iv99999); EXPECT_EQ(50000, st00000.uid); EXPECT_EQ(250000, st00000.gid); @@ -1203,8 +1194,7 @@ TEST(section_index_regression, github183) { ASSERT_TRUE(entry); - file_stat st; - EXPECT_EQ(fs.getattr(*entry, &st), 0); + auto st = fs.getattr(*entry); int inode{-1}; @@ -1266,10 +1256,8 @@ TEST(file_scanner, file_start_hash) { EXPECT_TRUE(link1); EXPECT_TRUE(link2); - file_stat st1, st2; - - EXPECT_EQ(0, fs.getattr(*link1, &st1)); - EXPECT_EQ(0, fs.getattr(*link2, &st2)); + auto st1 = fs.getattr(*link1); + auto st2 = fs.getattr(*link2); EXPECT_EQ(st1.ino, st2.ino); EXPECT_EQ(st1.nlink, 2); diff --git a/test/tool_main_test.cpp b/test/tool_main_test.cpp index c540bc9a..a6b10a88 100644 --- a/test/tool_main_test.cpp +++ b/test/tool_main_test.cpp @@ -374,8 +374,7 @@ build_with_args(std::vector opt_args = {}) { std::set get_all_fs_times(filesystem_v2 const& fs) { std::set times; fs.walk([&](auto const& e) { - file_stat st; - fs.getattr(e.inode(), &st); + auto st = fs.getattr(e.inode()); times.insert(st.atime); times.insert(st.ctime); times.insert(st.mtime); @@ -386,8 +385,7 @@ std::set get_all_fs_times(filesystem_v2 const& fs) { std::set get_all_fs_uids(filesystem_v2 const& fs) { std::set uids; fs.walk([&](auto const& e) { - file_stat st; - fs.getattr(e.inode(), &st); + auto st = fs.getattr(e.inode()); uids.insert(st.uid); }); return uids; @@ -396,8 +394,7 @@ std::set get_all_fs_uids(filesystem_v2 const& fs) { std::set get_all_fs_gids(filesystem_v2 const& fs) { std::set gids; fs.walk([&](auto const& e) { - file_stat st; - fs.getattr(e.inode(), &st); + auto st = fs.getattr(e.inode()); gids.insert(st.gid); }); return gids; @@ -878,11 +875,7 @@ TEST(mkdwarfs_test, metadata_path) { std::map entries; fs.walk([&](auto e) { - file_stat stat; - if (fs.getattr(e.inode(), &stat) != 0) { - throw std::runtime_error( - fmt::format("getattr() failed for {}", e.path())); - } + auto stat = fs.getattr(e.inode()); if (stat.is_regular_file()) { entries.emplace(stat.size, e); } @@ -1010,8 +1003,9 @@ TEST(mkdwarfs_test, metadata_specials) { auto iv = fs.find("/block"); ASSERT_TRUE(iv); - file_stat stat; - EXPECT_EQ(0, fs.getattr(*iv, &stat)); + std::error_code ec; + auto stat = fs.getattr(*iv, ec); + EXPECT_FALSE(ec); EXPECT_TRUE(stat.is_device()); EXPECT_EQ(77, stat.rdev); @@ -1035,8 +1029,9 @@ TEST(mkdwarfs_test, metadata_time_resolution) { auto iv = fs.find("/suid"); ASSERT_TRUE(iv); - file_stat stat; - EXPECT_EQ(0, fs.getattr(*iv, &stat)); + std::error_code ec; + auto stat = fs.getattr(*iv, ec); + EXPECT_FALSE(ec); EXPECT_EQ(3300, stat.atime); EXPECT_EQ(2220, stat.mtime); EXPECT_EQ(1080, stat.ctime); @@ -2549,11 +2544,8 @@ TEST_P(map_file_error_test, delayed) { ASSERT_TRUE(small_link2); EXPECT_EQ(large_link1->inode_num(), large_link2->inode_num()); EXPECT_EQ(small_link1->inode_num(), small_link2->inode_num()); - file_stat st; - ASSERT_EQ(0, fs.getattr(*large_link1, &st)); - EXPECT_EQ(0, st.size); - ASSERT_EQ(0, fs.getattr(*small_link1, &st)); - EXPECT_EQ(0, st.size); + EXPECT_EQ(0, fs.getattr(*large_link1).size); + EXPECT_EQ(0, fs.getattr(*small_link1).size); } std::unordered_map actual_files; @@ -2561,8 +2553,7 @@ TEST_P(map_file_error_test, delayed) { auto iv = dev.inode(); if (iv.is_regular_file()) { std::string data; - file_stat stat; - ASSERT_EQ(0, fs.getattr(iv, &stat)); + auto stat = fs.getattr(iv); data.resize(stat.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); @@ -2694,8 +2685,7 @@ TEST(block_cache, sequential_access_detector) { auto iv = fs.find(pstr.c_str()); ASSERT_TRUE(iv); ASSERT_TRUE(iv->is_regular_file()); - file_stat st; - ASSERT_EQ(0, fs.getattr(*iv, &st)); + auto st = fs.getattr(*iv); ASSERT_EQ(data.size(), st.size); std::string buffer; buffer.resize(data.size()); @@ -2799,8 +2789,7 @@ TEST(file_scanner, large_file_handling) { for (size_t i = 0; i < data.size(); ++i) { auto iv = fs.find(fmt::format("f{}", i).c_str()); ASSERT_TRUE(iv) << i; - file_stat st; - ASSERT_EQ(0, fs.getattr(*iv, &st)) << i; + auto st = fs.getattr(*iv); std::string buffer; buffer.resize(st.size); auto nread = fs.read(iv->inode_num(), buffer.data(), st.size);