From 7f44e54ad6b898923f3b602e311c3dac404533ad Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Tue, 15 Feb 2022 20:55:53 +0200 Subject: [PATCH] AK+Kernel: Return KString from UUID::to_string() in the Kernel This lets us safely handle allocation failure. --- AK/UUID.cpp | 17 +++++++++++++++++ AK/UUID.h | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/AK/UUID.cpp b/AK/UUID.cpp index ac76da14646..8353c49c1ec 100644 --- a/AK/UUID.cpp +++ b/AK/UUID.cpp @@ -76,6 +76,22 @@ UUID::UUID(StringView uuid_string_view, Endianness endianness) VERIFY_NOT_REACHED(); } +#ifdef KERNEL +ErrorOr> UUID::to_string() const +{ + StringBuilder builder(36); + TRY(builder.try_append(encode_hex(m_uuid_buffer.span().trim(4)).view())); + TRY(builder.try_append('-')); + TRY(builder.try_append(encode_hex(m_uuid_buffer.span().slice(4).trim(2)).view())); + TRY(builder.try_append('-')); + TRY(builder.try_append(encode_hex(m_uuid_buffer.span().slice(6).trim(2)).view())); + TRY(builder.try_append('-')); + TRY(builder.try_append(encode_hex(m_uuid_buffer.span().slice(8).trim(2)).view())); + TRY(builder.try_append('-')); + TRY(builder.try_append(encode_hex(m_uuid_buffer.span().slice(10).trim(6)).view())); + return Kernel::KString::try_create(builder.string_view()); +} +#else String UUID::to_string() const { StringBuilder builder(36); @@ -90,6 +106,7 @@ String UUID::to_string() const builder.append(encode_hex(m_uuid_buffer.span().slice(10).trim(6)).view()); return builder.to_string(); } +#endif bool UUID::operator==(const UUID& other) const { diff --git a/AK/UUID.h b/AK/UUID.h index 066d3010912..c859cf3729d 100644 --- a/AK/UUID.h +++ b/AK/UUID.h @@ -11,6 +11,12 @@ #include #include +#ifdef KERNEL +# include +#else +# include +#endif + namespace AK { class UUID { @@ -32,7 +38,11 @@ public: bool operator<(const UUID&) const = delete; bool operator>(const UUID&) const = delete; +#ifdef KERNEL + ErrorOr> to_string() const; +#else String to_string() const; +#endif bool is_zero() const; private: