mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-12 17:37:53 +03:00
Kernel: Add KParams class for accessing kernel cmdline parameters (#188)
This commit is contained in:
parent
042895317d
commit
738f9de9a9
Notes:
sideshowbarker
2024-07-19 13:44:52 +09:00
Author: https://github.com/deoxxa Commit: https://github.com/SerenityOS/serenity/commit/738f9de9a9e Pull-request: https://github.com/SerenityOS/serenity/pull/188 Reviewed-by: https://github.com/awesomekling
34
Kernel/KParams.cpp
Normal file
34
Kernel/KParams.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
#include <Kernel/KParams.h>
|
||||
|
||||
static KParams* s_the;
|
||||
|
||||
KParams& KParams::the()
|
||||
{
|
||||
return *s_the;
|
||||
}
|
||||
|
||||
KParams::KParams(const String& cmdline)
|
||||
: m_cmdline(cmdline)
|
||||
{
|
||||
s_the = this;
|
||||
|
||||
for (auto str : m_cmdline.split(' ')) {
|
||||
auto pair = str.split_limit('=', 2);
|
||||
|
||||
if (pair.size() == 1) {
|
||||
m_params.set(pair[0], "");
|
||||
} else {
|
||||
m_params.set(pair[0], pair[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String KParams::get(const String& key) const
|
||||
{
|
||||
return m_params.get(key);
|
||||
}
|
||||
|
||||
bool KParams::has(const String& key) const
|
||||
{
|
||||
return m_params.contains(key);
|
||||
}
|
19
Kernel/KParams.h
Normal file
19
Kernel/KParams.h
Normal file
@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include <AK/AKString.h>
|
||||
#include <AK/HashMap.h>
|
||||
|
||||
class KParams {
|
||||
AK_MAKE_ETERNAL
|
||||
public:
|
||||
static KParams& the();
|
||||
|
||||
KParams(const String& cmdline);
|
||||
|
||||
const String& cmdline() const { return m_cmdline; }
|
||||
String get(const String& key) const;
|
||||
bool has(const String& key) const;
|
||||
private:
|
||||
String m_cmdline;
|
||||
HashMap<String, String> m_params;
|
||||
};
|
@ -32,6 +32,7 @@ KERNEL_OBJS = \
|
||||
Scheduler.o \
|
||||
DoubleBuffer.o \
|
||||
KSyms.o \
|
||||
KParams.o \
|
||||
SharedMemory.o \
|
||||
FileSystem/DevPtsFS.o \
|
||||
Devices/BXVGADevice.o \
|
||||
|
@ -2,5 +2,5 @@ timeout=0
|
||||
|
||||
menuentry 'Serenity' {
|
||||
root=hd0,1
|
||||
multiboot /boot/kernel Hello from grub!
|
||||
multiboot /boot/kernel root=hd0,1
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <Kernel/Net/NetworkTask.h>
|
||||
#include <Kernel/Devices/DebugLogDevice.h>
|
||||
#include <Kernel/Multiboot.h>
|
||||
#include <Kernel/KParams.h>
|
||||
|
||||
//#define STRESS_TEST_SPAWNING
|
||||
|
||||
@ -123,13 +124,14 @@ multiboot_info_t* multiboot_info_ptr;
|
||||
|
||||
extern "C" [[noreturn]] void init()
|
||||
{
|
||||
kprintf("Kernel command line: '%s'\n", multiboot_info_ptr->cmdline);
|
||||
|
||||
sse_init();
|
||||
|
||||
kmalloc_init();
|
||||
init_ksyms();
|
||||
|
||||
// must come after kmalloc_init because we use AK_MAKE_ETERNAL in KParams
|
||||
new KParams(String(reinterpret_cast<const char*>(multiboot_info_ptr->cmdline)));
|
||||
|
||||
vfs = new VFS;
|
||||
dev_debuglog = new DebugLogDevice;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user