Browse Source

AK: Add support for Kernel Log Stream

Liav A 5 years ago
parent
commit
9440c45d6e
2 changed files with 45 additions and 0 deletions
  1. 25 0
      AK/LogStream.cpp
  2. 20 0
      AK/LogStream.h

+ 25 - 0
AK/LogStream.cpp

@@ -126,6 +126,31 @@ DebugLogStream dbg()
     return stream;
     return stream;
 }
 }
 
 
+#if defined(KERNEL)
+KernelLogStream klog()
+{
+    KernelLogStream stream;
+    if (Kernel::Thread::current)
+        stream << "\033[34;1m[" << *Kernel::Thread::current << "]\033[0m: ";
+    else
+        stream << "\033[36;1m[Kernel]\033[0m: ";
+    return stream;
+}
+#elif !defined(BOOTSTRAPPER)
+DebugLogStream klog()
+{
+    return dbg();
+}
+#endif
+
+#if defined(KERNEL)
+KernelLogStream::~KernelLogStream()
+{
+    char newline = '\n';
+    write(&newline, 1);
+}
+#endif
+
 DebugLogStream::~DebugLogStream()
 DebugLogStream::~DebugLogStream()
 {
 {
     char newline = '\n';
     char newline = '\n';

+ 20 - 0
AK/LogStream.h

@@ -70,6 +70,19 @@ public:
     }
     }
 };
 };
 
 
+#if !defined(BOOTSTRAPPER) && defined(KERNEL)
+class KernelLogStream final : public LogStream {
+public:
+    KernelLogStream() {}
+    virtual ~KernelLogStream() override;
+
+    virtual void write(const char* characters, int length) const override
+    {
+        kernelputstr(characters, length);
+    }
+};
+#endif
+
 inline const LogStream& operator<<(const LogStream& stream, const char* value)
 inline const LogStream& operator<<(const LogStream& stream, const char* value)
 {
 {
     int length = 0;
     int length = 0;
@@ -103,7 +116,14 @@ inline const LogStream& operator<<(const LogStream& stream, bool value)
 
 
 DebugLogStream dbg();
 DebugLogStream dbg();
 
 
+#if defined(KERNEL)
+KernelLogStream klog();
+#elif !defined(BOOTSTRAPPER)
+DebugLogStream klog();
+#endif
+
 }
 }
 
 
 using AK::dbg;
 using AK::dbg;
+using AK::klog;
 using AK::LogStream;
 using AK::LogStream;