From dc4ccadd53fc98bdff7650dd3d1175e7606b1fca Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Fri, 2 Aug 2024 22:37:30 +0200 Subject: [PATCH] refactor: simpler ways to construct filesystem_v2 --- include/dwarfs/filesystem_v2.h | 8 ++++++++ src/dwarfs/filesystem_v2.cpp | 12 ++++++++++++ src/dwarfs_main.cpp | 5 ++--- src/dwarfsbench_main.cpp | 3 +-- src/dwarfsextract_main.cpp | 8 +++----- src/mkdwarfs_main.cpp | 10 +++++----- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/include/dwarfs/filesystem_v2.h b/include/dwarfs/filesystem_v2.h index c1c417a3..c83198cb 100644 --- a/include/dwarfs/filesystem_v2.h +++ b/include/dwarfs/filesystem_v2.h @@ -59,6 +59,14 @@ class filesystem_v2 { public: filesystem_v2() = default; + filesystem_v2(logger& lgr, os_access const& os, + std::filesystem::path const& path); + + filesystem_v2(logger& lgr, os_access const& os, + std::filesystem::path const& path, + filesystem_options const& options, + std::shared_ptr perfmon = nullptr); + filesystem_v2(logger& lgr, os_access const& os, std::shared_ptr mm); filesystem_v2(logger& lgr, os_access const& os, std::shared_ptr mm, diff --git a/src/dwarfs/filesystem_v2.cpp b/src/dwarfs/filesystem_v2.cpp index 95eaacb8..84e1a7db 100644 --- a/src/dwarfs/filesystem_v2.cpp +++ b/src/dwarfs/filesystem_v2.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -1177,6 +1178,17 @@ filesystem_::header() const { } // namespace internal +filesystem_v2::filesystem_v2(logger& lgr, os_access const& os, + std::filesystem::path const& path) + : filesystem_v2(lgr, os, os.map_file(os.canonical(path))) {} + +filesystem_v2::filesystem_v2(logger& lgr, os_access const& os, + std::filesystem::path const& path, + filesystem_options const& options, + std::shared_ptr perfmon) + : filesystem_v2(lgr, os, os.map_file(os.canonical(path)), options, + std::move(perfmon)) {} + filesystem_v2::filesystem_v2(logger& lgr, os_access const& os, std::shared_ptr mm) : filesystem_v2(lgr, os, std::move(mm), filesystem_options()) {} diff --git a/src/dwarfs_main.cpp b/src/dwarfs_main.cpp index d212f1bc..9996e36b 100644 --- a/src/dwarfs_main.cpp +++ b/src/dwarfs_main.cpp @@ -1462,9 +1462,8 @@ void load_filesystem(dwarfs_userdata& userdata) { LOG_DEBUG << "attempting to load filesystem from " << fsimage; - userdata.fs = - filesystem_v2(userdata.lgr, *userdata.iol.os, - std::make_shared(fsimage), fsopts, userdata.perfmon); + userdata.fs = filesystem_v2(userdata.lgr, *userdata.iol.os, fsimage, fsopts, + userdata.perfmon); ti << "file system initialized"; } diff --git a/src/dwarfsbench_main.cpp b/src/dwarfsbench_main.cpp index 0335475f..906f0814 100644 --- a/src/dwarfsbench_main.cpp +++ b/src/dwarfsbench_main.cpp @@ -99,8 +99,7 @@ int dwarfsbench_main(int argc, sys_char** argv, iolayer const& iol) { fsopts.block_cache.num_workers = num_workers; fsopts.block_cache.decompress_ratio = to(decompress_ratio_str); - dwarfs::filesystem_v2 fs( - lgr, *iol.os, std::make_shared(filesystem), fsopts); + dwarfs::filesystem_v2 fs(lgr, *iol.os, filesystem, fsopts); thread_pool pool(lgr, *iol.os, "reader", num_readers); diff --git a/src/dwarfsextract_main.cpp b/src/dwarfsextract_main.cpp index a4067eb7..71cd5dd0 100644 --- a/src/dwarfsextract_main.cpp +++ b/src/dwarfsextract_main.cpp @@ -56,7 +56,7 @@ constexpr std::string_view kDash{"-"}; } // namespace int dwarfsextract_main(int argc, sys_char** argv, iolayer const& iol) { - sys_string filesystem, output, trace_file; + sys_string fs_image, output, trace_file; std::string format, cache_size_str, image_offset; logger_options logopts; #if DWARFS_PERFMON_ENABLED @@ -70,7 +70,7 @@ int dwarfsextract_main(int argc, sys_char** argv, iolayer const& iol) { po::options_description opts("Command line options"); opts.add_options() ("input,i", - po_sys_value(&filesystem), + po_sys_value(&fs_image), "input filesystem file") ("output,o", po_sys_value(&output), @@ -164,9 +164,7 @@ int dwarfsextract_main(int argc, sys_char** argv, iolayer const& iol) { std::shared_ptr perfmon = performance_monitor::create( perfmon_enabled, iol.file, perfmon_trace_file); - auto fs_path = iol.os->canonical(filesystem); - - filesystem_v2 fs(lgr, *iol.os, iol.os->map_file(fs_path), fsopts, perfmon); + filesystem_v2 fs(lgr, *iol.os, fs_image, fsopts, perfmon); filesystem_extractor fsx(lgr, *iol.os); if (format.empty()) { diff --git a/src/mkdwarfs_main.cpp b/src/mkdwarfs_main.cpp index 656b9d84..7eaffd25 100644 --- a/src/mkdwarfs_main.cpp +++ b/src/mkdwarfs_main.cpp @@ -1159,14 +1159,14 @@ int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol) { } } - std::unique_ptr input_filesystem; + std::optional input_filesystem; std::shared_ptr cat_resolver; if (recompress) { - filesystem_options fsopts; - fsopts.image_offset = filesystem_options::IMAGE_OFFSET_AUTO; - input_filesystem = std::make_unique( - lgr, *iol.os, iol.os->map_file(path), fsopts); + input_filesystem.emplace( + lgr, *iol.os, path, + filesystem_options{.image_offset = + filesystem_options::IMAGE_OFFSET_AUTO}); LOG_INFO << "checking input filesystem...";