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