diff --git a/AK/Format.h b/AK/Format.h index f71f05ad1f..ff31d69b4c 100644 --- a/AK/Format.h +++ b/AK/Format.h @@ -100,4 +100,7 @@ String format(StringView fmtstr, const Parameters&... parameters) return Detail::Format::format(fmtstr, formatters); } -} +template +void StringBuilder::appendff(StringView fmtstr, const Parameters&... parameters) { AK::format(*this, fmtstr, parameters...); } + +} // namespace AK diff --git a/AK/StringBuilder.h b/AK/StringBuilder.h index 0bd2dde47d..cd67475cb2 100644 --- a/AK/StringBuilder.h +++ b/AK/StringBuilder.h @@ -28,6 +28,7 @@ #include #include +#include #include namespace AK { @@ -37,7 +38,7 @@ public: using OutputType = String; explicit StringBuilder(size_t initial_capacity = 16); - ~StringBuilder() {} + ~StringBuilder() { } void append(const StringView&); void append(const Utf32View&); @@ -47,6 +48,10 @@ public: void appendf(const char*, ...); void appendvf(const char*, va_list); + // Implemented in to break circular dependency. + template + void appendff(StringView fmtstr, const Parameters&...); + String build() const; String to_string() const; ByteBuffer to_byte_buffer() const; diff --git a/Kernel/UserOrKernelBuffer.cpp b/Kernel/UserOrKernelBuffer.cpp index 8d311b5a62..e99f6a215e 100644 --- a/Kernel/UserOrKernelBuffer.cpp +++ b/Kernel/UserOrKernelBuffer.cpp @@ -46,7 +46,7 @@ String UserOrKernelBuffer::copy_into_string(size_t size) const return data_copy; } - return String({ m_buffer, size }); + return String(ReadonlyBytes { m_buffer, size }); } bool UserOrKernelBuffer::write(const void* src, size_t offset, size_t len) @@ -80,7 +80,7 @@ bool UserOrKernelBuffer::memset(int value, size_t offset, size_t len) if (is_user_address(VirtualAddress(m_buffer))) return memset_user(m_buffer + offset, value, len); - + ::memset(m_buffer + offset, value, len); return true; }