diff --git a/include/dwarfs/metadata_v2.h b/include/dwarfs/metadata_v2.h index b959c434..eb68ac34 100644 --- a/include/dwarfs/metadata_v2.h +++ b/include/dwarfs/metadata_v2.h @@ -111,6 +111,10 @@ class metadata_v2 { return impl_->getattr(de, stbuf); } + std::optional opendir(entry_view de) const { + return impl_->opendir(de); + } + #if 0 size_t block_size() const { return impl_->block_size(); } @@ -120,10 +124,6 @@ class metadata_v2 { return impl_->access(de, mode, uid, gid); } - directory_view opendir(entry_view de) const { - return impl_->opendir(de); - } - entry_view readdir(directory_view d, size_t offset, std::string* name) const { return impl_->readdir(d, offset, name); @@ -167,12 +167,14 @@ class metadata_v2 { find(int inode, const char* name) const = 0; virtual int getattr(entry_view de, struct ::stat* stbuf) const = 0; + + virtual std::optional opendir(entry_view de) 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 directory_view opendir(entry_view de) const = 0; virtual entry_view readdir(directory_view d, size_t offset, std::string* name) const = 0; virtual size_t dirsize(directory_view d) const = 0; diff --git a/src/dwarfs/metadata_v2.cpp b/src/dwarfs/metadata_v2.cpp index 9ea4dbf2..492e304e 100644 --- a/src/dwarfs/metadata_v2.cpp +++ b/src/dwarfs/metadata_v2.cpp @@ -94,6 +94,8 @@ class metadata_v2_ : public metadata_v2::impl { int getattr(entry_view entry, struct ::stat* stbuf) const override; + std::optional opendir(entry_view entry) const override; + #if 0 size_t block_size() const override { return static_cast(1) << cfg_->block_size_bits; @@ -103,7 +105,6 @@ class metadata_v2_ : public metadata_v2::impl { int access(entry_view entry, int mode, uid_t uid, gid_t gid) const override; - directory_view opendir(entry_view entry) const override; entry_view readdir(directory_view d, size_t offset, std::string* name) const override; size_t dirsize(directory_view d) const override { @@ -367,6 +368,18 @@ int metadata_v2_::getattr(entry_view entry, return 0; } +template +std::optional +metadata_v2_::opendir(entry_view entry) const { + std::optional rv; + + if (S_ISDIR(entry.mode())) { + rv = getdir(entry); + } + + return rv; +} + #if 0 template int metadata_v2_::access(entry_view entry, int mode, uid_t uid, @@ -374,15 +387,6 @@ int metadata_v2_::access(entry_view entry, int mode, uid_t uid, return dir_reader_->access(entry, mode, uid, gid); } -template -directory_view metadata_v2_::opendir(entry_view entry) const { - if (S_ISDIR(entry->mode)) { - return getdir(entry); - } - - return nullptr; -} - template int metadata_v2_::open(entry_view entry) const { if (S_ISREG(entry->mode)) {