diff --git a/include/dwarfs/metadata_v2.h b/include/dwarfs/metadata_v2.h index 79a5f216..2a80109c 100644 --- a/include/dwarfs/metadata_v2.h +++ b/include/dwarfs/metadata_v2.h @@ -126,10 +126,12 @@ class metadata_v2 { } std::optional> - readdir(directory_view d, size_t offset) const { - return impl_->readdir(d, offset); + readdir(directory_view dir, size_t offset) const { + return impl_->readdir(dir, offset); } + size_t dirsize(directory_view dir) const { return impl_->dirsize(dir); } + #if 0 size_t block_size() const { return impl_->block_size(); } @@ -139,8 +141,6 @@ class metadata_v2 { return impl_->access(de, mode, uid, gid); } - size_t dirsize(directory_view d) const { return impl_->dirsize(d); } - int readlink(entry_view de, char* buf, size_t size) const { return impl_->readlink(de, buf, size); } @@ -181,14 +181,15 @@ class metadata_v2 { virtual std::optional opendir(entry_view de) const = 0; virtual std::optional> - readdir(directory_view d, size_t offset) const = 0; + readdir(directory_view dir, size_t offset) const = 0; + + virtual size_t dirsize(directory_view dir) const = 0; #if 0 virtual size_t block_size() const = 0; virtual unsigned block_size_bits() const = 0; virtual int access(entry_view de, int mode, uid_t uid, gid_t gid) const = 0; - virtual size_t dirsize(directory_view d) const = 0; virtual int readlink(entry_view de, char* buf, size_t size) const = 0; virtual int readlink(entry_view de, std::string* buf) const = 0; virtual int statvfs(struct ::statvfs* stbuf) const = 0; diff --git a/src/dwarfs/metadata_v2.cpp b/src/dwarfs/metadata_v2.cpp index d51c0628..5abbaeee 100644 --- a/src/dwarfs/metadata_v2.cpp +++ b/src/dwarfs/metadata_v2.cpp @@ -110,6 +110,10 @@ class metadata_v2_ : public metadata_v2::impl { std::optional> readdir(directory_view dir, size_t offset) const override; + size_t dirsize(directory_view dir) const override { + return 2 + dir.entry_count(); // adds '.' and '..', which we fake in ;-) + } + #if 0 size_t block_size() const override { return static_cast(1) << cfg_->block_size_bits; @@ -119,9 +123,6 @@ class metadata_v2_ : public metadata_v2::impl { int access(entry_view entry, int mode, uid_t uid, gid_t gid) const override; - size_t dirsize(directory_view d) const override { - return d->count + 2; // adds '.' and '..', which we fake in ;-) - } int readlink(entry_view entry, char* buf, size_t size) const override; int readlink(entry_view entry, std::string* buf) const override; int statvfs(struct ::statvfs* stbuf) const override; @@ -148,7 +149,8 @@ class metadata_v2_ : public metadata_v2::impl { void dump(std::ostream& os, const std::string& indent, directory_view dir, std::function const& icb) const; - std::optional find(directory_view d, std::string_view name) const; + std::optional + find(directory_view dir, std::string_view name) const; std::string modestring(uint16_t mode) const;