Kernel: Use KResultOr and TRY() for MasterPTY

This commit is contained in:
Andreas Kling 2021-09-07 13:57:33 +02:00
parent 01993d0af3
commit 631b8e90cd
Notes: sideshowbarker 2024-07-18 04:31:41 +09:00
3 changed files with 6 additions and 18 deletions

View file

@ -16,22 +16,12 @@
namespace Kernel {
RefPtr<MasterPTY> MasterPTY::try_create(unsigned int index)
KResultOr<NonnullRefPtr<MasterPTY>> MasterPTY::try_create(unsigned int index)
{
auto buffer_or_error = DoubleBuffer::try_create();
if (buffer_or_error.is_error())
return {};
auto master_pty = adopt_ref_if_nonnull(new (nothrow) MasterPTY(index, buffer_or_error.release_value()));
if (!master_pty)
return {};
auto slave_pty = adopt_ref_if_nonnull(new (nothrow) SlavePTY(*master_pty, index));
if (!slave_pty)
return {};
auto buffer = TRY(DoubleBuffer::try_create());
auto master_pty = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) MasterPTY(index, move(buffer))));
auto slave_pty = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) SlavePTY(*master_pty, index)));
master_pty->m_slave = slave_pty;
return master_pty;
}

View file

@ -16,7 +16,7 @@ class SlavePTY;
class MasterPTY final : public CharacterDevice {
public:
[[nodiscard]] static RefPtr<MasterPTY> try_create(unsigned index);
static KResultOr<NonnullRefPtr<MasterPTY>> try_create(unsigned index);
virtual ~MasterPTY() override;
unsigned index() const { return m_index; }

View file

@ -42,9 +42,7 @@ KResultOr<NonnullRefPtr<OpenFileDescription>> PTYMultiplexer::open(int options)
return EBUSY;
auto master_index = freelist.take_last();
auto master = MasterPTY::try_create(master_index);
if (!master)
return ENOMEM;
auto master = TRY(MasterPTY::try_create(master_index));
dbgln_if(PTMX_DEBUG, "PTYMultiplexer::open: Vending master {}", master->index());
auto description = TRY(OpenFileDescription::try_create(*master));
description->set_rw_mode(options);