blob: 872398e33ce0ffe0d3d9a22d933073be9122894e [file] [log] [blame]
// 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_