metadata_v2: implement dirsize

This commit is contained in:
Marcus Holland-Moritz 2020-11-27 02:24:15 +01:00
parent bd33fbd0eb
commit 236b28da3c
2 changed files with 13 additions and 10 deletions

View File

@ -126,10 +126,12 @@ class metadata_v2 {
} }
std::optional<std::pair<entry_view, std::string_view>> std::optional<std::pair<entry_view, std::string_view>>
readdir(directory_view d, size_t offset) const { readdir(directory_view dir, size_t offset) const {
return impl_->readdir(d, offset); return impl_->readdir(dir, offset);
} }
size_t dirsize(directory_view dir) const { return impl_->dirsize(dir); }
#if 0 #if 0
size_t block_size() const { return impl_->block_size(); } size_t block_size() const { return impl_->block_size(); }
@ -139,8 +141,6 @@ class metadata_v2 {
return impl_->access(de, mode, uid, gid); 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 { int readlink(entry_view de, char* buf, size_t size) const {
return impl_->readlink(de, buf, size); return impl_->readlink(de, buf, size);
} }
@ -181,14 +181,15 @@ class metadata_v2 {
virtual std::optional<directory_view> opendir(entry_view de) const = 0; virtual std::optional<directory_view> opendir(entry_view de) const = 0;
virtual std::optional<std::pair<entry_view, std::string_view>> virtual std::optional<std::pair<entry_view, std::string_view>>
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 #if 0
virtual size_t block_size() const = 0; virtual size_t block_size() const = 0;
virtual unsigned block_size_bits() const = 0; virtual unsigned block_size_bits() const = 0;
virtual int virtual int
access(entry_view de, int mode, uid_t uid, gid_t gid) const = 0; 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, char* buf, size_t size) const = 0;
virtual int readlink(entry_view de, std::string* buf) const = 0; virtual int readlink(entry_view de, std::string* buf) const = 0;
virtual int statvfs(struct ::statvfs* stbuf) const = 0; virtual int statvfs(struct ::statvfs* stbuf) const = 0;

View File

@ -110,6 +110,10 @@ class metadata_v2_ : public metadata_v2::impl {
std::optional<std::pair<entry_view, std::string_view>> std::optional<std::pair<entry_view, std::string_view>>
readdir(directory_view dir, size_t offset) const override; 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 #if 0
size_t block_size() const override { size_t block_size() const override {
return static_cast<size_t>(1) << cfg_->block_size_bits; return static_cast<size_t>(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, int access(entry_view entry, int mode, uid_t uid,
gid_t gid) const override; 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, char* buf, size_t size) const override;
int readlink(entry_view entry, std::string* buf) const override; int readlink(entry_view entry, std::string* buf) const override;
int statvfs(struct ::statvfs* stbuf) 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, void dump(std::ostream& os, const std::string& indent, directory_view dir,
std::function<void(const std::string&, uint32_t)> const& icb) const; std::function<void(const std::string&, uint32_t)> const& icb) const;
std::optional<entry_view> find(directory_view d, std::string_view name) const; std::optional<entry_view>
find(directory_view dir, std::string_view name) const;
std::string modestring(uint16_t mode) const; std::string modestring(uint16_t mode) const;