mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
60d25f0f4a
The scheduler now operates on threads, rather than on processes. Each process has a main thread, and can have any number of additional threads. The process exits when the main thread exits. This patch doesn't actually spawn any additional threads, it merely does all the plumbing needed to make it possible. :^)
55 lines
1.0 KiB
C++
55 lines
1.0 KiB
C++
#include "kprintf.h"
|
|
#include "Console.h"
|
|
#include "IO.h"
|
|
#include <LibC/stdarg.h>
|
|
#include "Process.h"
|
|
#include <AK/Types.h>
|
|
#include <AK/printf.cpp>
|
|
|
|
static void console_putch(char*&, char ch)
|
|
{
|
|
if (!current) {
|
|
IO::out8(0xe9, ch);
|
|
return;
|
|
}
|
|
Console::the().write(current->process(), (byte*)&ch, 1);
|
|
}
|
|
|
|
int kprintf(const char* fmt, ...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, fmt);
|
|
int ret = printf_internal(console_putch, nullptr, fmt, ap);
|
|
va_end(ap);
|
|
return ret;
|
|
}
|
|
|
|
static void buffer_putch(char*& bufptr, char ch)
|
|
{
|
|
*bufptr++ = ch;
|
|
}
|
|
|
|
int ksprintf(char* buffer, const char* fmt, ...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, fmt);
|
|
int ret = printf_internal(buffer_putch, buffer, fmt, ap);
|
|
buffer[ret] = '\0';
|
|
va_end(ap);
|
|
return ret;
|
|
}
|
|
|
|
static void debugger_putch(char*&, char ch)
|
|
{
|
|
IO::out8(0xe9, ch);
|
|
}
|
|
|
|
extern "C" int dbgprintf(const char* fmt, ...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, fmt);
|
|
int ret = printf_internal(debugger_putch, nullptr, fmt, ap);
|
|
va_end(ap);
|
|
return ret;
|
|
}
|