Browse Source

Kernel: Use KResultOr and TRY() for MasterPTY

Andreas Kling 3 years ago
parent
commit
631b8e90cd
3 changed files with 6 additions and 18 deletions
  1. 4 14
      Kernel/TTY/MasterPTY.cpp
  2. 1 1
      Kernel/TTY/MasterPTY.h
  3. 1 3
      Kernel/TTY/PTYMultiplexer.cpp

+ 4 - 14
Kernel/TTY/MasterPTY.cpp

@@ -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;
 }
 

+ 1 - 1
Kernel/TTY/MasterPTY.h

@@ -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; }

+ 1 - 3
Kernel/TTY/PTYMultiplexer.cpp

@@ -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);