#pragma once #include #include #include class MasterPTY; class PTYMultiplexer final : public CharacterDevice { AK_MAKE_ETERNAL public: PTYMultiplexer(); virtual ~PTYMultiplexer() override; static PTYMultiplexer& the(); // ^CharacterDevice virtual KResultOr> open(int options) override; virtual ssize_t read(FileDescription&, u8*, ssize_t) override { return 0; } virtual ssize_t write(FileDescription&, const u8*, ssize_t) override { return 0; } virtual bool can_read(const FileDescription&) const override { return true; } virtual bool can_write(const FileDescription&) const override { return true; } void notify_master_destroyed(Badge, unsigned index); private: // ^CharacterDevice virtual const char* class_name() const override { return "PTYMultiplexer"; } Lock m_lock { "PTYMultiplexer" }; Vector m_freelist; };