1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:17:34 +00:00

Kernel: Convert ProcessorInfo::build_brand_string() to StringBuilder

This commit is contained in:
Linus Groh 2022-04-03 18:11:58 +01:00 committed by Andreas Kling
parent 4f35c206e4
commit b0f701d053
2 changed files with 15 additions and 11 deletions

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */

View file

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -75,19 +76,21 @@ NonnullOwnPtr<KString> ProcessorInfo::build_brand_string()
if (max_extended_leaf < 0x80000004) if (max_extended_leaf < 0x80000004)
return KString::must_create({}); return KString::must_create({});
alignas(u32) char buffer[48]; StringBuilder builder;
u32* bufptr = reinterpret_cast<u32*>(buffer); auto append_brand_string_part_to_builder = [&](u32 i) {
auto copy_brand_string_part_to_buffer = [&](u32 i) {
CPUID cpuid(0x80000002 + i); CPUID cpuid(0x80000002 + i);
*bufptr++ = cpuid.eax(); emit_u32(builder, cpuid.eax());
*bufptr++ = cpuid.ebx(); emit_u32(builder, cpuid.ebx());
*bufptr++ = cpuid.ecx(); emit_u32(builder, cpuid.ecx());
*bufptr++ = cpuid.edx(); emit_u32(builder, cpuid.edx());
}; };
copy_brand_string_part_to_buffer(0); append_brand_string_part_to_builder(0);
copy_brand_string_part_to_buffer(1); append_brand_string_part_to_builder(1);
copy_brand_string_part_to_buffer(2); append_brand_string_part_to_builder(2);
return KString::must_create(buffer); auto string_view = builder.string_view();
// NOTE: Unlike the vendor ID strings, the brand string isn't necessarily fixed length and might have a null terminator in it.
// Try to find it and use a substring from 0 to that index, or the full length as a fallback.
return KString::must_create(string_view.substring_view(0, string_view.find('\0').value_or(string_view.length())));
} }
NonnullOwnPtr<KString> ProcessorInfo::build_features_string(Processor const& processor) NonnullOwnPtr<KString> ProcessorInfo::build_features_string(Processor const& processor)