diff --git a/include/dwarfs/entry.h b/include/dwarfs/entry.h index 92ab42de..5ee91e41 100644 --- a/include/dwarfs/entry.h +++ b/include/dwarfs/entry.h @@ -82,9 +82,7 @@ class entry : public file_interface { virtual void accept(entry_visitor& v, bool preorder = false) = 0; virtual uint32_t inode_num() const = 0; virtual void scan(os_access& os, progress& prog) = 0; - - protected: - void scan_stat(os_access& os, std::string const& p); + const struct ::stat& status() const { return stat_; } private: std::string name_; @@ -155,7 +153,7 @@ class link : public entry { private: std::string link_; - uint32_t inode_ = 0; + uint32_t inode_{0}; }; class entry_factory { diff --git a/src/dwarfs/entry.cpp b/src/dwarfs/entry.cpp index 612ea3b4..9e7c591c 100644 --- a/src/dwarfs/entry.cpp +++ b/src/dwarfs/entry.cpp @@ -44,10 +44,6 @@ entry::entry(const std::string& name, std::shared_ptr parent, , parent_(std::move(parent)) , stat_(st) {} -void entry::scan_stat(os_access& os, std::string const& p) { - os.lstat(p, &stat_); -} - bool entry::has_parent() const { if (parent_.lock()) { return true; @@ -130,12 +126,9 @@ void file::accept(entry_visitor& v, bool) { v.visit(this); } void file::scan(os_access& os, progress& prog) { static_assert(SHA_DIGEST_LENGTH == sizeof(hash_type)); - auto p = path(); - scan_stat(os, p); - if (size_t s = size(); s > 0) { prog.original_size += s; - auto mm = os.map_file(p, s); + auto mm = os.map_file(path(), s); ::SHA1(mm->as(), s, reinterpret_cast(&hash_[0])); @@ -190,7 +183,7 @@ void dir::sort() { void dir::set_inode(uint32_t inode) { inode_ = inode; } -void dir::scan(os_access& os, progress&) { scan_stat(os, path()); } +void dir::scan(os_access&, progress&) {} void dir::pack_entry(thrift::metadata::metadata& mv2, global_entry_data const& data) const { @@ -223,9 +216,7 @@ void link::set_inode(uint32_t inode) { inode_ = inode; } void link::accept(entry_visitor& v, bool) { v.visit(this); } void link::scan(os_access& os, progress& prog) { - auto p = path(); - scan_stat(os, p); - link_ = os.readlink(p, size()); + link_ = os.readlink(path(), size()); prog.original_size += size(); }