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 Retained<InodeFile> create(Retained<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(FileDescriptor&) const override { return true; }
  14. virtual bool can_write(FileDescriptor&) const override { return true; }
  15. virtual ssize_t read(FileDescriptor&, byte*, ssize_t) override;
  16. virtual ssize_t write(FileDescriptor&, const byte*, ssize_t) override;
  17. virtual KResultOr<Region*> mmap(Process&, LinearAddress preferred_laddr, size_t offset, size_t size, int prot) override;
  18. virtual String absolute_path(const FileDescriptor&) 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(Retained<Inode>&&);
  25. Retained<Inode> m_inode;
  26. };