Luna/kernel/src/fs/devices/PTYMultiplexer.cpp

38 lines
781 B
C++
Raw Normal View History

#include "fs/devices/PTYMultiplexer.h"
Bitset<u64> PTYMultiplexer::m_available_indexes = 0;
PTYMultiplexer::PTYMultiplexer()
{
m_metadata.devid = luna_dev_makedev(DeviceRegistry::Terminal, 0);
m_metadata.mode = 0666;
m_metadata.initialize_times();
}
Result<SharedPtr<VFS::Inode>> PTYMultiplexer::open()
{
int index = -1;
for (int i = 0; i < 64; i++)
{
if (!m_available_indexes.get(i))
{
index = i;
m_available_indexes.set(i, true);
break;
}
}
if (index == -1) return err(ENOSPC);
return MasterPTY::create_pair(index);
}
void PTYMultiplexer::init()
{
m_available_indexes.clear();
}
void PTYMultiplexer::did_remove_pty(int index)
{
m_available_indexes.set(index, false);
}