mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-14 06:48:39 -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);
|
return impl_->getattr(de, stbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::optional<directory_view> opendir(entry_view de) const {
|
||||||
|
return impl_->opendir(de);
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
size_t block_size() const { return impl_->block_size(); }
|
size_t block_size() const { return impl_->block_size(); }
|
||||||
|
|
||||||
@ -120,10 +124,6 @@ class metadata_v2 {
|
|||||||
return impl_->access(de, mode, uid, gid);
|
return impl_->access(de, mode, uid, gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
directory_view opendir(entry_view de) const {
|
|
||||||
return impl_->opendir(de);
|
|
||||||
}
|
|
||||||
|
|
||||||
entry_view
|
entry_view
|
||||||
readdir(directory_view d, size_t offset, std::string* name) const {
|
readdir(directory_view d, size_t offset, std::string* name) const {
|
||||||
return impl_->readdir(d, offset, name);
|
return impl_->readdir(d, offset, name);
|
||||||
@ -167,12 +167,14 @@ class metadata_v2 {
|
|||||||
find(int inode, const char* name) const = 0;
|
find(int inode, const char* name) const = 0;
|
||||||
|
|
||||||
virtual int getattr(entry_view de, struct ::stat* stbuf) 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
|
#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 directory_view opendir(entry_view de) const = 0;
|
|
||||||
virtual entry_view
|
virtual entry_view
|
||||||
readdir(directory_view d, size_t offset, std::string* name) const = 0;
|
readdir(directory_view d, size_t offset, std::string* name) const = 0;
|
||||||
virtual size_t dirsize(directory_view d) 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;
|
int getattr(entry_view entry, struct ::stat* stbuf) const override;
|
||||||
|
|
||||||
|
std::optional<directory_view> opendir(entry_view entry) const override;
|
||||||
|
|
||||||
#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;
|
||||||
@ -103,7 +105,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;
|
||||||
directory_view opendir(entry_view entry) const override;
|
|
||||||
entry_view
|
entry_view
|
||||||
readdir(directory_view d, size_t offset, std::string* name) const override;
|
readdir(directory_view d, size_t offset, std::string* name) const override;
|
||||||
size_t dirsize(directory_view d) const override {
|
size_t dirsize(directory_view d) const override {
|
||||||
@ -367,6 +368,18 @@ int metadata_v2_<LoggerPolicy>::getattr(entry_view entry,
|
|||||||
return 0;
|
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
|
#if 0
|
||||||
template <typename LoggerPolicy>
|
template <typename LoggerPolicy>
|
||||||
int metadata_v2_<LoggerPolicy>::access(entry_view entry, int mode, uid_t uid,
|
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);
|
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>
|
template <typename LoggerPolicy>
|
||||||
int metadata_v2_<LoggerPolicy>::open(entry_view entry) const {
|
int metadata_v2_<LoggerPolicy>::open(entry_view entry) const {
|
||||||
if (S_ISREG(entry->mode)) {
|
if (S_ISREG(entry->mode)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user