Kernel: Fix multiple bugs with terminal
This commit is contained in:
parent
2576bdbd14
commit
3748f0304f
|
@ -155,7 +155,7 @@ namespace Kernel
|
||||||
ExitStatus m_exit_status;
|
ExitStatus m_exit_status;
|
||||||
|
|
||||||
BAN::UniqPtr<PageTable> m_page_table;
|
BAN::UniqPtr<PageTable> m_page_table;
|
||||||
TTY* m_tty { nullptr };
|
BAN::RefPtr<TTY> m_tty;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -26,7 +26,7 @@ namespace Kernel
|
||||||
// for kprint
|
// for kprint
|
||||||
static void putchar_current(uint8_t ch);
|
static void putchar_current(uint8_t ch);
|
||||||
static bool is_initialized();
|
static bool is_initialized();
|
||||||
static TTY* current();
|
static BAN::RefPtr<TTY> current();
|
||||||
|
|
||||||
void initialize_device();
|
void initialize_device();
|
||||||
|
|
||||||
|
@ -108,10 +108,6 @@ namespace Kernel
|
||||||
TerminalDriver* m_terminal_driver { nullptr };
|
TerminalDriver* m_terminal_driver { nullptr };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// FIXME: these should be crw------- with the owner being user
|
|
||||||
virtual Mode mode() const override { return { Mode::IFCHR | Mode::IRUSR | Mode::IWUSR | Mode::IRGRP | Mode::IWGRP | Mode::IROTH | Mode::IWOTH }; }
|
|
||||||
virtual uid_t uid() const override { return 0; }
|
|
||||||
virtual gid_t gid() const override { return 0; }
|
|
||||||
virtual dev_t rdev() const override { return m_rdev; }
|
virtual dev_t rdev() const override { return m_rdev; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -167,7 +167,7 @@ namespace Kernel
|
||||||
BAN::ErrorOr<long> Process::sys_gettermios(::termios* termios)
|
BAN::ErrorOr<long> Process::sys_gettermios(::termios* termios)
|
||||||
{
|
{
|
||||||
LockGuard _(m_lock);
|
LockGuard _(m_lock);
|
||||||
if (m_tty == nullptr)
|
if (!m_tty)
|
||||||
return BAN::Error::from_errno(ENOTTY);
|
return BAN::Error::from_errno(ENOTTY);
|
||||||
|
|
||||||
Kernel::termios ktermios = m_tty->get_termios();
|
Kernel::termios ktermios = m_tty->get_termios();
|
||||||
|
@ -183,7 +183,7 @@ namespace Kernel
|
||||||
BAN::ErrorOr<long> Process::sys_settermios(const ::termios* termios)
|
BAN::ErrorOr<long> Process::sys_settermios(const ::termios* termios)
|
||||||
{
|
{
|
||||||
LockGuard _(m_lock);
|
LockGuard _(m_lock);
|
||||||
if (m_tty == nullptr)
|
if (!m_tty)
|
||||||
return BAN::Error::from_errno(ENOTTY);
|
return BAN::Error::from_errno(ENOTTY);
|
||||||
|
|
||||||
Kernel::termios ktermios;
|
Kernel::termios ktermios;
|
||||||
|
@ -748,15 +748,17 @@ namespace Kernel
|
||||||
BAN::ErrorOr<long> Process::sys_termid(char* buffer) const
|
BAN::ErrorOr<long> Process::sys_termid(char* buffer) const
|
||||||
{
|
{
|
||||||
LockGuard _(m_lock);
|
LockGuard _(m_lock);
|
||||||
if (m_tty == nullptr)
|
if (!m_tty)
|
||||||
buffer[0] = '\0';
|
buffer[0] = '\0';
|
||||||
ASSERT(minor(m_tty->rdev()) < 10);
|
else
|
||||||
strcpy(buffer, "/dev/tty1");
|
{
|
||||||
buffer[8] += minor(m_tty->rdev());
|
ASSERT(minor(m_tty->rdev()) < 10);
|
||||||
|
strcpy(buffer, "/dev/tty0");
|
||||||
|
buffer[8] += minor(m_tty->rdev());
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BAN::ErrorOr<long> Process::sys_clock_gettime(clockid_t clock_id, timespec* tp) const
|
BAN::ErrorOr<long> Process::sys_clock_gettime(clockid_t clock_id, timespec* tp) const
|
||||||
{
|
{
|
||||||
switch (clock_id)
|
switch (clock_id)
|
||||||
|
|
|
@ -33,10 +33,10 @@ namespace Kernel
|
||||||
return makedev(major, minor++);
|
return makedev(major, minor++);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TTY* s_tty = nullptr;
|
static BAN::RefPtr<TTY> s_tty;
|
||||||
|
|
||||||
TTY::TTY(TerminalDriver* driver)
|
TTY::TTY(TerminalDriver* driver)
|
||||||
: CharacterDevice(0444, 0, 0)
|
: CharacterDevice(0666, 0, 0)
|
||||||
, m_terminal_driver(driver)
|
, m_terminal_driver(driver)
|
||||||
{
|
{
|
||||||
m_width = m_terminal_driver->width();
|
m_width = m_terminal_driver->width();
|
||||||
|
@ -45,11 +45,11 @@ namespace Kernel
|
||||||
m_buffer = new Cell[m_width * m_height];
|
m_buffer = new Cell[m_width * m_height];
|
||||||
ASSERT(m_buffer);
|
ASSERT(m_buffer);
|
||||||
|
|
||||||
if (s_tty == nullptr)
|
if (!s_tty)
|
||||||
s_tty = this;
|
s_tty = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
TTY* TTY::current()
|
BAN::RefPtr<TTY> TTY::current()
|
||||||
{
|
{
|
||||||
return s_tty;
|
return s_tty;
|
||||||
}
|
}
|
||||||
|
@ -58,11 +58,10 @@ namespace Kernel
|
||||||
{
|
{
|
||||||
m_rdev = next_tty_rdev();
|
m_rdev = next_tty_rdev();
|
||||||
|
|
||||||
char name[5] { 't', 't', 'y', '1', '\0'};
|
|
||||||
name[3] += minor(m_rdev);
|
|
||||||
ASSERT(minor(m_rdev) < 10);
|
ASSERT(minor(m_rdev) < 10);
|
||||||
|
char name[5] { 't', 't', 'y', (char)('0' + minor(m_rdev)), '\0' };
|
||||||
|
|
||||||
DevFileSystem::get().add_device(name, this);
|
DevFileSystem::get().add_device(name, BAN::RefPtr<TTY>::adopt(this));
|
||||||
|
|
||||||
if (s_input_process)
|
if (s_input_process)
|
||||||
return;
|
return;
|
||||||
|
@ -676,7 +675,7 @@ flush:
|
||||||
|
|
||||||
bool TTY::is_initialized()
|
bool TTY::is_initialized()
|
||||||
{
|
{
|
||||||
return s_tty != nullptr;
|
return s_tty;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue