| // Copyright 2019 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SMBFS_FILESYSTEM_H_ |
| #define SMBFS_FILESYSTEM_H_ |
| |
| #include <fuse_lowlevel.h> |
| |
| #include <memory> |
| #include <string> |
| |
| #include <base/macros.h> |
| #include <base/optional.h> |
| |
| #include "smbfs/request.h" |
| |
| namespace smbfs { |
| |
| // Base class for FUSE filesystems. Functions not overridden will respond to |
| // requests with the ENOSYS error. |
| class Filesystem { |
| public: |
| virtual ~Filesystem(); |
| |
| virtual void StatFs(std::unique_ptr<StatFsRequest> request, fuse_ino_t inode); |
| virtual void Lookup(std::unique_ptr<EntryRequest> request, |
| fuse_ino_t parent_inode, |
| const std::string& name); |
| virtual void Forget(fuse_ino_t inode, uint64_t count); |
| virtual void GetAttr(std::unique_ptr<AttrRequest> request, fuse_ino_t inode); |
| virtual void SetAttr(std::unique_ptr<AttrRequest> request, |
| fuse_ino_t inode, |
| base::Optional<uint64_t> file_handle, |
| const struct stat& attr, |
| int to_set); |
| |
| // File operations. |
| virtual void Open(std::unique_ptr<OpenRequest> request, |
| fuse_ino_t inode, |
| int flags); |
| virtual void Create(std::unique_ptr<CreateRequest> request, |
| fuse_ino_t parent_inode, |
| const std::string& name, |
| mode_t mode, |
| int flags); |
| virtual void Read(std::unique_ptr<BufRequest> request, |
| fuse_ino_t inode, |
| uint64_t file_handle, |
| size_t size, |
| off_t offset); |
| virtual void Write(std::unique_ptr<WriteRequest> request, |
| fuse_ino_t inode, |
| uint64_t file_handle, |
| const char* buf, |
| size_t size, |
| off_t offset); |
| virtual void Release(std::unique_ptr<SimpleRequest> request, |
| fuse_ino_t inode, |
| uint64_t file_handle); |
| virtual void Rename(std::unique_ptr<SimpleRequest> request, |
| fuse_ino_t old_parent_inode, |
| const std::string& old_name, |
| fuse_ino_t new_parent_inode, |
| const std::string& new_name); |
| virtual void Unlink(std::unique_ptr<SimpleRequest> request, |
| fuse_ino_t parent_inode, |
| const std::string& name); |
| |
| // Directory operations. |
| virtual void OpenDir(std::unique_ptr<OpenRequest> request, |
| fuse_ino_t inode, |
| int flags); |
| virtual void ReadDir(std::unique_ptr<DirentryRequest> request, |
| fuse_ino_t inode, |
| uint64_t file_handle, |
| off_t offset); |
| virtual void ReleaseDir(std::unique_ptr<SimpleRequest> request, |
| fuse_ino_t inode, |
| uint64_t file_handle); |
| virtual void MkDir(std::unique_ptr<EntryRequest> request, |
| fuse_ino_t parent_inode, |
| const std::string& name, |
| mode_t mode); |
| virtual void RmDir(std::unique_ptr<SimpleRequest> request, |
| fuse_ino_t parent_inode, |
| const std::string& name); |
| |
| protected: |
| Filesystem(); |
| Filesystem(const Filesystem&) = delete; |
| Filesystem& operator=(const Filesystem&) = delete; |
| }; |
| |
| } // namespace smbfs |
| |
| #endif // SMBFS_FILESYSTEM_H_ |