diff --git a/Kernel/KString.cpp b/Kernel/KString.cpp index d20fd6e374..dbfad78d4c 100644 --- a/Kernel/KString.cpp +++ b/Kernel/KString.cpp @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include +#include #include extern bool g_in_early_boot; @@ -21,6 +23,13 @@ ErrorOr> KString::try_create(StringView string) return new_string; } +ErrorOr> KString::vformatted(StringView fmtstr, AK::TypeErasedFormatParams& params) +{ + StringBuilder builder; + TRY(AK::vformat(builder, fmtstr, params)); + return try_create(builder.string_view()); +} + NonnullOwnPtr KString::must_create(StringView string) { // We can only enforce success during early boot. diff --git a/Kernel/KString.h b/Kernel/KString.h index e5ec4d0f79..ab4bc16b5d 100644 --- a/Kernel/KString.h +++ b/Kernel/KString.h @@ -21,6 +21,15 @@ public: [[nodiscard]] static ErrorOr> try_create(StringView); [[nodiscard]] static NonnullOwnPtr must_create(StringView); + [[nodiscard]] static ErrorOr> vformatted(StringView fmtstr, AK::TypeErasedFormatParams&); + + template + [[nodiscard]] static ErrorOr> formatted(CheckedFormatString&& fmtstr, const Parameters&... parameters) + { + AK::VariadicFormatParams variadic_format_parameters { parameters... }; + return vformatted(fmtstr.view(), variadic_format_parameters); + } + void operator delete(void*); ErrorOr> try_clone() const;