mirror of
https://github.com/RGBCube/serenity
synced 2025-07-06 04:07:35 +00:00

This simplifies the DevPtsFS implementation somewhat, as it no longer requires SlavePTY to register itself with it, since it can now simply use the list of SlavePTY instances.
59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
/*
|
|
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/FileSystem/InodeIdentifier.h>
|
|
#include <Kernel/TTY/TTY.h>
|
|
|
|
namespace Kernel {
|
|
|
|
class MasterPTY;
|
|
|
|
class SlavePTY final : public TTY {
|
|
public:
|
|
virtual bool unref() const override;
|
|
virtual ~SlavePTY() override;
|
|
|
|
void on_master_write(const UserOrKernelBuffer&, size_t);
|
|
unsigned index() const { return m_index; }
|
|
|
|
time_t time_of_last_write() const { return m_time_of_last_write; }
|
|
|
|
virtual FileBlockCondition& block_condition() override;
|
|
|
|
private:
|
|
// ^TTY
|
|
virtual String const& tty_name() const override;
|
|
virtual KResultOr<size_t> on_tty_write(const UserOrKernelBuffer&, size_t) override;
|
|
virtual void echo(u8) override;
|
|
|
|
// ^CharacterDevice
|
|
virtual bool can_read(const FileDescription&, size_t) const override;
|
|
virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override;
|
|
virtual bool can_write(const FileDescription&, size_t) const override;
|
|
virtual StringView class_name() const override { return "SlavePTY"; }
|
|
virtual KResult close() override;
|
|
|
|
// ^Device
|
|
virtual String device_name() const override;
|
|
|
|
friend class MasterPTY;
|
|
SlavePTY(MasterPTY&, unsigned index);
|
|
|
|
RefPtr<MasterPTY> m_master;
|
|
time_t m_time_of_last_write { 0 };
|
|
unsigned m_index { 0 };
|
|
String m_tty_name;
|
|
|
|
mutable IntrusiveListNode<SlavePTY> m_list_node;
|
|
|
|
public:
|
|
using List = IntrusiveList<SlavePTY, RawPtr<SlavePTY>, &SlavePTY::m_list_node>;
|
|
static SpinLockProtectedValue<SlavePTY::List>& all_instances();
|
|
};
|
|
|
|
}
|