DevPtsFS.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2019-2020, Sergey Bugaev <bugaevc@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. #include <Kernel/FileSystem/FileSystem.h>
  9. #include <Kernel/FileSystem/Inode.h>
  10. namespace Kernel {
  11. class SlavePTY;
  12. class DevPtsFSInode;
  13. class DevPtsFS final : public FS {
  14. friend class DevPtsFSInode;
  15. public:
  16. virtual ~DevPtsFS() override;
  17. static NonnullRefPtr<DevPtsFS> create();
  18. virtual bool initialize() override;
  19. virtual const char* class_name() const override { return "DevPtsFS"; }
  20. virtual NonnullRefPtr<Inode> root_inode() const override;
  21. static void register_slave_pty(SlavePTY&);
  22. static void unregister_slave_pty(SlavePTY&);
  23. private:
  24. DevPtsFS();
  25. RefPtr<Inode> get_inode(InodeIdentifier) const;
  26. RefPtr<DevPtsFSInode> m_root_inode;
  27. };
  28. class DevPtsFSInode final : public Inode {
  29. friend class DevPtsFS;
  30. public:
  31. virtual ~DevPtsFSInode() override;
  32. private:
  33. DevPtsFSInode(DevPtsFS&, InodeIndex, SlavePTY*);
  34. // ^Inode
  35. virtual KResultOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer& buffer, FileDescription*) const override;
  36. virtual InodeMetadata metadata() const override;
  37. virtual KResult traverse_as_directory(Function<bool(const FS::DirectoryEntryView&)>) const override;
  38. virtual RefPtr<Inode> lookup(StringView name) override;
  39. virtual void flush_metadata() override;
  40. virtual KResultOr<size_t> write_bytes(off_t, size_t, const UserOrKernelBuffer& buffer, FileDescription*) override;
  41. virtual KResultOr<NonnullRefPtr<Inode>> create_child(const String& name, mode_t, dev_t, uid_t, gid_t) override;
  42. virtual KResult add_child(Inode&, const StringView& name, mode_t) override;
  43. virtual KResult remove_child(const StringView& name) override;
  44. virtual KResultOr<size_t> directory_entry_count() const override;
  45. virtual KResult chmod(mode_t) override;
  46. virtual KResult chown(uid_t, gid_t) override;
  47. WeakPtr<SlavePTY> m_pty;
  48. InodeMetadata m_metadata;
  49. };
  50. }