2023-09-16 11:46:52 +02:00
|
|
|
#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;
|
2023-12-04 20:42:17 +01:00
|
|
|
m_metadata.initialize_times();
|
2023-09-16 11:46:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|