metadata_v2: implement open

This commit is contained in:
Marcus Holland-Moritz 2020-11-27 11:04:06 +01:00
parent 924f7d2bf5
commit f6ab7cbf53
2 changed files with 25 additions and 22 deletions

View File

@ -117,12 +117,12 @@ class metadata_v2 {
return impl_->find(inode, name);
}
int getattr(entry_view de, struct ::stat* stbuf) const {
return impl_->getattr(de, stbuf);
int getattr(entry_view entry, struct ::stat* stbuf) const {
return impl_->getattr(entry, stbuf);
}
std::optional<directory_view> opendir(entry_view de) const {
return impl_->opendir(de);
std::optional<directory_view> opendir(entry_view entry) const {
return impl_->opendir(entry);
}
std::optional<std::pair<entry_view, std::string_view>>
@ -132,27 +132,27 @@ class metadata_v2 {
size_t dirsize(directory_view dir) const { return impl_->dirsize(dir); }
int access(entry_view de, int mode, uid_t uid, gid_t gid) const {
return impl_->access(de, mode, uid, gid);
int access(entry_view entry, int mode, uid_t uid, gid_t gid) const {
return impl_->access(entry, mode, uid, gid);
}
int open(entry_view entry) const { return impl_->open(entry); }
#if 0
size_t block_size() const { return impl_->block_size(); }
unsigned block_size_bits() const { return impl_->block_size_bits(); }
int readlink(entry_view de, char* buf, size_t size) const {
return impl_->readlink(de, buf, size);
int readlink(entry_view entry, char* buf, size_t size) const {
return impl_->readlink(entry, buf, size);
}
int readlink(entry_view de, std::string* buf) const {
return impl_->readlink(de, buf);
int readlink(entry_view entry, std::string* buf) const {
return impl_->readlink(entry, buf);
}
int statvfs(struct ::statvfs* stbuf) const { return impl_->statvfs(stbuf); }
int open(entry_view de) const { return impl_->open(de); }
const chunk_type* get_chunks(int inode, size_t& num) const {
return impl_->get_chunks(inode, num);
}
@ -176,24 +176,26 @@ class metadata_v2 {
virtual std::optional<entry_view>
find(int inode, const char* name) const = 0;
virtual int getattr(entry_view de, struct ::stat* stbuf) const = 0;
virtual int getattr(entry_view entry, struct ::stat* stbuf) const = 0;
virtual std::optional<directory_view> opendir(entry_view de) const = 0;
virtual std::optional<directory_view> opendir(entry_view entry) const = 0;
virtual std::optional<std::pair<entry_view, std::string_view>>
readdir(directory_view dir, size_t offset) const = 0;
virtual size_t dirsize(directory_view dir) const = 0;
virtual int access(entry_view de, int mode, uid_t uid, gid_t gid) const = 0;
virtual int
access(entry_view entry, int mode, uid_t uid, gid_t gid) const = 0;
virtual int open(entry_view entry) const = 0;
#if 0
virtual size_t block_size() const = 0;
virtual unsigned block_size_bits() 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 entry, char* buf, size_t size) const = 0;
virtual int readlink(entry_view entry, std::string* buf) const = 0;
virtual int statvfs(struct ::statvfs* stbuf) const = 0;
virtual int open(entry_view de) const = 0;
virtual const chunk_type* get_chunks(int inode, size_t& num) const = 0;
#endif
};

View File

@ -116,6 +116,8 @@ class metadata_v2_ : public metadata_v2::impl {
int access(entry_view entry, int mode, uid_t uid, gid_t gid) const override;
int open(entry_view entry) const override;
#if 0
size_t block_size() const override {
return static_cast<size_t>(1) << cfg_->block_size_bits;
@ -126,7 +128,6 @@ class metadata_v2_ : public metadata_v2::impl {
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;
int open(entry_view entry) const override;
const chunk_type* get_chunks(int inode, size_t& num) const override;
#endif
@ -459,16 +460,16 @@ int metadata_v2_<LoggerPolicy>::access(entry_view entry, int mode, uid_t uid,
return (access_mode & mode) == mode ? 0 : EACCES;
}
#if 0
template <typename LoggerPolicy>
int metadata_v2_<LoggerPolicy>::open(entry_view entry) const {
if (S_ISREG(entry->mode)) {
return entry->inode;
if (S_ISREG(entry.mode())) {
return entry.inode();
}
return -1;
}
#if 0
template <typename LoggerPolicy>
int metadata_v2_<LoggerPolicy>::readlink(entry_view entry, char* buf,
size_t size) const {