From f6ab7cbf539c441f5f9d141e12288c34ef7a5e56 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Fri, 27 Nov 2020 11:04:06 +0100 Subject: [PATCH] metadata_v2: implement open --- include/dwarfs/metadata_v2.h | 38 +++++++++++++++++++----------------- src/dwarfs/metadata_v2.cpp | 9 +++++---- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/include/dwarfs/metadata_v2.h b/include/dwarfs/metadata_v2.h index 1b83ad02..cc33aad1 100644 --- a/include/dwarfs/metadata_v2.h +++ b/include/dwarfs/metadata_v2.h @@ -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 opendir(entry_view de) const { - return impl_->opendir(de); + std::optional opendir(entry_view entry) const { + return impl_->opendir(entry); } std::optional> @@ -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 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 opendir(entry_view de) const = 0; + virtual std::optional opendir(entry_view entry) const = 0; virtual std::optional> 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 }; diff --git a/src/dwarfs/metadata_v2.cpp b/src/dwarfs/metadata_v2.cpp index b5a784af..bd0852b2 100644 --- a/src/dwarfs/metadata_v2.cpp +++ b/src/dwarfs/metadata_v2.cpp @@ -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(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_::access(entry_view entry, int mode, uid_t uid, return (access_mode & mode) == mode ? 0 : EACCES; } -#if 0 template int metadata_v2_::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 int metadata_v2_::readlink(entry_view entry, char* buf, size_t size) const {