Kernel: Add KString::must_{..} factory methods

There are a bunch of places like drivers which for all intense and
purposes can't really fail allocation during boot, and if they do
fail we should crash immediately.

This change adds `KString::must_create_uninitialized(..)` as well as
`KString::must_create(..)` for use during early boot initialization of
the Kernel. They enforce that they are only used during early boot.
This commit is contained in:
Brian Gianforcaro 2021-05-31 01:51:09 -07:00 committed by Ali Mohammad Pur
parent de0aa44bb6
commit d838a02e74
Notes: sideshowbarker 2024-07-18 17:08:00 +09:00
3 changed files with 27 additions and 0 deletions

View file

@ -6,6 +6,8 @@
#include <Kernel/KString.h>
extern bool g_in_early_boot;
namespace Kernel {
OwnPtr<KString> KString::try_create(StringView const& string)
@ -21,6 +23,15 @@ OwnPtr<KString> KString::try_create(StringView const& string)
return new_string;
}
NonnullOwnPtr<KString> KString::must_create(StringView const& string)
{
// We can only enforce success during early boot.
VERIFY(g_in_early_boot);
auto kstring = KString::try_create(string);
VERIFY(kstring != nullptr);
return kstring.release_nonnull();
}
OwnPtr<KString> KString::try_create_uninitialized(size_t length, char*& characters)
{
size_t allocation_size = sizeof(KString) + (sizeof(char) * length) + sizeof(char);
@ -32,6 +43,15 @@ OwnPtr<KString> KString::try_create_uninitialized(size_t length, char*& characte
return adopt_own_if_nonnull(new_string);
}
NonnullOwnPtr<KString> KString::must_create_uninitialized(size_t length, char*& characters)
{
// We can only enforce success during early boot.
VERIFY(g_in_early_boot);
auto kstring = KString::try_create_uninitialized(length, characters);
VERIFY(kstring != nullptr);
return kstring.release_nonnull();
}
OwnPtr<KString> KString::try_clone() const
{
return try_create(view());