mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 13:04:15 -04:00
Cleanup entry code
This commit is contained in:
parent
28c6dd6b7a
commit
8d6734bdaf
@ -82,9 +82,7 @@ class entry : public file_interface {
|
|||||||
virtual void accept(entry_visitor& v, bool preorder = false) = 0;
|
virtual void accept(entry_visitor& v, bool preorder = false) = 0;
|
||||||
virtual uint32_t inode_num() const = 0;
|
virtual uint32_t inode_num() const = 0;
|
||||||
virtual void scan(os_access& os, progress& prog) = 0;
|
virtual void scan(os_access& os, progress& prog) = 0;
|
||||||
|
const struct ::stat& status() const { return stat_; }
|
||||||
protected:
|
|
||||||
void scan_stat(os_access& os, std::string const& p);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string name_;
|
std::string name_;
|
||||||
@ -155,7 +153,7 @@ class link : public entry {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::string link_;
|
std::string link_;
|
||||||
uint32_t inode_ = 0;
|
uint32_t inode_{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
class entry_factory {
|
class entry_factory {
|
||||||
|
@ -44,10 +44,6 @@ entry::entry(const std::string& name, std::shared_ptr<entry> parent,
|
|||||||
, parent_(std::move(parent))
|
, parent_(std::move(parent))
|
||||||
, stat_(st) {}
|
, stat_(st) {}
|
||||||
|
|
||||||
void entry::scan_stat(os_access& os, std::string const& p) {
|
|
||||||
os.lstat(p, &stat_);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool entry::has_parent() const {
|
bool entry::has_parent() const {
|
||||||
if (parent_.lock()) {
|
if (parent_.lock()) {
|
||||||
return true;
|
return true;
|
||||||
@ -130,12 +126,9 @@ void file::accept(entry_visitor& v, bool) { v.visit(this); }
|
|||||||
void file::scan(os_access& os, progress& prog) {
|
void file::scan(os_access& os, progress& prog) {
|
||||||
static_assert(SHA_DIGEST_LENGTH == sizeof(hash_type));
|
static_assert(SHA_DIGEST_LENGTH == sizeof(hash_type));
|
||||||
|
|
||||||
auto p = path();
|
|
||||||
scan_stat(os, p);
|
|
||||||
|
|
||||||
if (size_t s = size(); s > 0) {
|
if (size_t s = size(); s > 0) {
|
||||||
prog.original_size += s;
|
prog.original_size += s;
|
||||||
auto mm = os.map_file(p, s);
|
auto mm = os.map_file(path(), s);
|
||||||
::SHA1(mm->as<unsigned char>(), s,
|
::SHA1(mm->as<unsigned char>(), s,
|
||||||
reinterpret_cast<unsigned char*>(&hash_[0]));
|
reinterpret_cast<unsigned char*>(&hash_[0]));
|
||||||
|
|
||||||
@ -190,7 +183,7 @@ void dir::sort() {
|
|||||||
|
|
||||||
void dir::set_inode(uint32_t inode) { inode_ = inode; }
|
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,
|
void dir::pack_entry(thrift::metadata::metadata& mv2,
|
||||||
global_entry_data const& data) const {
|
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::accept(entry_visitor& v, bool) { v.visit(this); }
|
||||||
|
|
||||||
void link::scan(os_access& os, progress& prog) {
|
void link::scan(os_access& os, progress& prog) {
|
||||||
auto p = path();
|
link_ = os.readlink(path(), size());
|
||||||
scan_stat(os, p);
|
|
||||||
link_ = os.readlink(p, size());
|
|
||||||
prog.original_size += size();
|
prog.original_size += size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user