Selaa lähdekoodia

Kernel: Ensure there are all VirtualConsoles properly initialized

It is possible to switch to VirtualConsoles 1 to 4 via the shortcut
ALT + [1-4]. Therefor the array of VirtualConsoles should be guaranteed
to be initialized.

Also add an constant for the maximum number of VirtualConsoles to
guarantee consistency.
Florian Angermeier 5 vuotta sitten
vanhempi
commit
d8fa8c5f82
3 muutettua tiedostoa jossa 9 lisäystä ja 3 poistoa
  1. 4 2
      Kernel/TTY/VirtualConsole.cpp
  2. 2 0
      Kernel/TTY/VirtualConsole.h
  3. 3 1
      Kernel/init.cpp

+ 4 - 2
Kernel/TTY/VirtualConsole.cpp

@@ -36,7 +36,7 @@
 namespace Kernel {
 
 static u8* s_vga_buffer;
-static VirtualConsole* s_consoles[6];
+static VirtualConsole* s_consoles[s_max_virtual_consoles];
 static int s_active_console;
 static RecursiveSpinLock s_lock;
 
@@ -68,6 +68,8 @@ VirtualConsole::VirtualConsole(const unsigned index)
     , m_index(index)
     , m_terminal(*this)
 {
+    ASSERT(index < s_max_virtual_consoles);
+
     m_tty_name = String::format("/dev/tty%u", m_index);
     m_terminal.set_size(80, 25);
 
@@ -83,7 +85,7 @@ void VirtualConsole::switch_to(unsigned index)
 {
     if ((int)index == s_active_console)
         return;
-    ASSERT(index < 6);
+    ASSERT(index < s_max_virtual_consoles);
     ASSERT(s_consoles[index]);
 
     ScopedSpinLock lock(s_lock);

+ 2 - 0
Kernel/TTY/VirtualConsole.h

@@ -33,6 +33,8 @@
 
 namespace Kernel {
 
+static constexpr unsigned s_max_virtual_consoles = 6;
+
 class VirtualConsole final : public TTY
     , public KeyboardClient
     , public VT::TerminalClient {

+ 3 - 1
Kernel/init.cpp

@@ -144,7 +144,9 @@ extern "C" [[noreturn]] void init()
 
     VirtualConsole::initialize();
     tty0 = new VirtualConsole(0);
-    new VirtualConsole(1);
+    for (unsigned i = 1; i < s_max_virtual_consoles; i++) {
+        new VirtualConsole(i);
+    }
     VirtualConsole::switch_to(0);
 
     Process::initialize();