Kernel: Fix pseudo terminal writability
This commit is contained in:
@@ -27,10 +27,12 @@ namespace Kernel
|
||||
BAN::ErrorOr<size_t> write_impl(off_t, BAN::ConstByteSpan) override;
|
||||
|
||||
bool can_read_impl() const override { SpinLockGuard _(m_buffer_lock); return m_buffer_size > 0; }
|
||||
bool can_write_impl() const override { SpinLockGuard _(m_buffer_lock); return m_buffer_size < m_buffer->size(); }
|
||||
bool can_write_impl() const override { return true; }
|
||||
bool has_error_impl() const override { return false; }
|
||||
bool has_hungup_impl() const override { return !m_slave.valid(); }
|
||||
|
||||
void on_close(int) override;
|
||||
|
||||
BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
||||
|
||||
private:
|
||||
@@ -48,6 +50,7 @@ namespace Kernel
|
||||
|
||||
const dev_t m_rdev;
|
||||
|
||||
friend class PseudoTerminalSlave;
|
||||
friend class BAN::RefPtr<PseudoTerminalMaster>;
|
||||
};
|
||||
|
||||
@@ -62,8 +65,11 @@ namespace Kernel
|
||||
void clear() override;
|
||||
|
||||
protected:
|
||||
bool master_has_closed() const override { return !m_master.valid(); }
|
||||
|
||||
bool putchar_impl(uint8_t ch) override;
|
||||
|
||||
bool can_write_impl() const override;
|
||||
bool has_hungup_impl() const override { return !m_master.valid(); }
|
||||
|
||||
BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
||||
|
||||
@@ -42,18 +42,19 @@ namespace Kernel
|
||||
public:
|
||||
static BAN::ErrorOr<BAN::RefPtr<SerialTTY>> create(Serial);
|
||||
|
||||
virtual uint32_t width() const override;
|
||||
virtual uint32_t height() const override;
|
||||
uint32_t width() const override;
|
||||
uint32_t height() const override;
|
||||
|
||||
virtual void clear() override { putchar_impl('\e'); putchar_impl('['); putchar_impl('2'); putchar_impl('J'); }
|
||||
void clear() override { putchar_impl('\e'); putchar_impl('['); putchar_impl('2'); putchar_impl('J'); }
|
||||
|
||||
virtual void update() override;
|
||||
void update() override;
|
||||
|
||||
virtual void handle_irq() override;
|
||||
void handle_irq() override;
|
||||
|
||||
protected:
|
||||
virtual BAN::StringView name() const override { return m_name; }
|
||||
virtual bool putchar_impl(uint8_t) override;
|
||||
BAN::StringView name() const override { return m_name; }
|
||||
bool putchar_impl(uint8_t) override;
|
||||
bool can_write_impl() const override { return true; }
|
||||
|
||||
private:
|
||||
SerialTTY(Serial);
|
||||
|
||||
@@ -66,18 +66,19 @@ namespace Kernel
|
||||
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
||||
|
||||
virtual bool can_read_impl() const override { return m_output.flush; }
|
||||
virtual bool can_write_impl() const override { return true; }
|
||||
virtual bool has_error_impl() const override { return false; }
|
||||
virtual bool has_hungup_impl() const override { return false; }
|
||||
|
||||
virtual bool master_has_closed() const { return false; }
|
||||
|
||||
protected:
|
||||
TTY(termios termios, mode_t mode, uid_t uid, gid_t gid);
|
||||
|
||||
virtual bool putchar_impl(uint8_t ch) = 0;
|
||||
virtual void update_cursor() {}
|
||||
virtual void after_write() {}
|
||||
|
||||
virtual BAN::ErrorOr<size_t> read_impl(off_t, BAN::ByteSpan) override;
|
||||
virtual BAN::ErrorOr<size_t> write_impl(off_t, BAN::ConstByteSpan) override;
|
||||
virtual BAN::ErrorOr<size_t> read_impl(off_t, BAN::ByteSpan) final override;
|
||||
virtual BAN::ErrorOr<size_t> write_impl(off_t, BAN::ConstByteSpan) final override;
|
||||
|
||||
private:
|
||||
bool putchar(uint8_t ch);
|
||||
@@ -110,6 +111,7 @@ namespace Kernel
|
||||
|
||||
protected:
|
||||
RecursiveSpinLock m_write_lock;
|
||||
ThreadBlocker m_write_blocker;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -17,17 +17,18 @@ namespace Kernel
|
||||
public:
|
||||
static BAN::ErrorOr<BAN::RefPtr<VirtualTTY>> create(BAN::RefPtr<TerminalDriver>);
|
||||
|
||||
virtual BAN::ErrorOr<void> set_font(LibFont::Font&&) override;
|
||||
BAN::ErrorOr<void> set_font(LibFont::Font&&) override;
|
||||
|
||||
virtual uint32_t height() const override { return m_height; }
|
||||
virtual uint32_t width() const override { return m_width; }
|
||||
uint32_t height() const override { return m_height; }
|
||||
uint32_t width() const override { return m_width; }
|
||||
|
||||
virtual void clear() override;
|
||||
void clear() override;
|
||||
|
||||
protected:
|
||||
virtual BAN::StringView name() const override { return m_name; }
|
||||
virtual bool putchar_impl(uint8_t ch) override;
|
||||
void update_cursor() override;
|
||||
BAN::StringView name() const override { return m_name; }
|
||||
bool putchar_impl(uint8_t ch) override;
|
||||
bool can_write_impl() const override { return true; }
|
||||
void after_write() override;
|
||||
|
||||
private:
|
||||
VirtualTTY(BAN::RefPtr<TerminalDriver>);
|
||||
|
||||
Reference in New Issue
Block a user