PTYMultiplexer.cpp 683 B

123456789101112131415161718192021222324252627
  1. #include "PTYMultiplexer.h"
  2. #include "MasterPTY.h"
  3. #include <LibC/errno_numbers.h>
  4. PTYMultiplexer::PTYMultiplexer()
  5. : CharacterDevice(5, 2)
  6. {
  7. m_freelist.ensure_capacity(4);
  8. for (int i = 4; i > 0; --i)
  9. m_freelist.unchecked_append(adopt(*new MasterPTY(i - 1)));
  10. }
  11. PTYMultiplexer::~PTYMultiplexer()
  12. {
  13. }
  14. RetainPtr<FileDescriptor> PTYMultiplexer::open(int& error, int options)
  15. {
  16. LOCKER(m_lock);
  17. if (m_freelist.is_empty()) {
  18. error = -EBUSY;
  19. return nullptr;
  20. }
  21. auto master = m_freelist.take_last();
  22. dbgprintf("PTYMultiplexer::open: Vending master %u\n", master->index());
  23. return VFS::the().open(move(master), error, options);
  24. }