mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-13 14:27:30 -04:00
metadata_v2: implement opendir
This commit is contained in:
parent
bb66f5180c
commit
fdb8b07b08
@ -111,6 +111,10 @@ class metadata_v2 {
|
||||
return impl_->getattr(de, stbuf);
|
||||
}
|
||||
|
||||
std::optional<directory_view> 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<directory_view> 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;
|
||||
|
@ -94,6 +94,8 @@ class metadata_v2_ : public metadata_v2::impl {
|
||||
|
||||
int getattr(entry_view entry, struct ::stat* stbuf) const override;
|
||||
|
||||
std::optional<directory_view> opendir(entry_view entry) const override;
|
||||
|
||||
#if 0
|
||||
size_t block_size() const override {
|
||||
return static_cast<size_t>(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_<LoggerPolicy>::getattr(entry_view entry,
|
||||
return 0;
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
std::optional<directory_view>
|
||||
metadata_v2_<LoggerPolicy>::opendir(entry_view entry) const {
|
||||
std::optional<directory_view> rv;
|
||||
|
||||
if (S_ISDIR(entry.mode())) {
|
||||
rv = getdir(entry);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
#if 0
|
||||
template <typename LoggerPolicy>
|
||||
int metadata_v2_<LoggerPolicy>::access(entry_view entry, int mode, uid_t uid,
|
||||
@ -374,15 +387,6 @@ int metadata_v2_<LoggerPolicy>::access(entry_view entry, int mode, uid_t uid,
|
||||
return dir_reader_->access(entry, mode, uid, gid);
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
directory_view metadata_v2_<LoggerPolicy>::opendir(entry_view entry) const {
|
||||
if (S_ISDIR(entry->mode)) {
|
||||
return getdir(entry);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <typename LoggerPolicy>
|
||||
int metadata_v2_<LoggerPolicy>::open(entry_view entry) const {
|
||||
if (S_ISREG(entry->mode)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user