InodeFile.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include <Kernel/File.h>
  3. class Inode;
  4. class InodeFile final : public File {
  5. public:
  6. static NonnullRefPtr<InodeFile> create(NonnullRefPtr<Inode>&& inode)
  7. {
  8. return adopt(*new InodeFile(move(inode)));
  9. }
  10. virtual ~InodeFile() override;
  11. const Inode& inode() const { return *m_inode; }
  12. Inode& inode() { return *m_inode; }
  13. virtual bool can_read(FileDescription&) const override { return true; }
  14. virtual bool can_write(FileDescription&) const override { return true; }
  15. virtual ssize_t read(FileDescription&, u8*, ssize_t) override;
  16. virtual ssize_t write(FileDescription&, const u8*, ssize_t) override;
  17. virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t size, int prot) override;
  18. virtual String absolute_path(const FileDescription&) const override;
  19. virtual KResult truncate(off_t) override;
  20. virtual const char* class_name() const override { return "InodeFile"; }
  21. virtual bool is_seekable() const override { return true; }
  22. virtual bool is_inode() const override { return true; }
  23. private:
  24. explicit InodeFile(NonnullRefPtr<Inode>&&);
  25. NonnullRefPtr<Inode> m_inode;
  26. };