Kernel: Fix ACPI name formatting functions

This commit is contained in:
Bananymous 2024-09-14 19:39:13 +03:00
parent 57e76a65a4
commit b41738b47b
1 changed files with 21 additions and 18 deletions

View File

@ -215,26 +215,29 @@ namespace BAN
} }
}; };
template<typename F> namespace Formatter
void Formatter::print_argument(F putc, const Kernel::ACPI::AML::NameSeg& name_seg, const ValueFormat&)
{ {
size_t len = 4; template<typename F>
while (len > 0 && name_seg.chars[len - 1] == '_') void print_argument(F putc, const Kernel::ACPI::AML::NameSeg& name_seg, const ValueFormat&)
len--;
for (size_t i = 0; i < len; i++)
putc(name_seg.chars[i]);
}
template<typename F>
void Formatter::print_argument(F putc, const Kernel::ACPI::AML::NameString& name_string, const ValueFormat&)
{
print_argument(putc, name_string.prefix, {});
if (!name_string.path.empty())
print_argument(putc, name_string.path.front(), {});
for (size_t i = 1; i < name_string.path.size(); i++)
{ {
putc('.'); size_t len = 4;
print_argument(putc, name_string.path[i], {}); while (len > 0 && name_seg.chars[len - 1] == '_')
len--;
for (size_t i = 0; i < len; i++)
putc(name_seg.chars[i]);
}
template<typename F>
void print_argument(F putc, const Kernel::ACPI::AML::NameString& name_string, const ValueFormat&)
{
print_argument(putc, name_string.prefix, {});
if (!name_string.path.empty())
print_argument(putc, name_string.path.front(), {});
for (size_t i = 1; i < name_string.path.size(); i++)
{
putc('.');
print_argument(putc, name_string.path[i], {});
}
} }
} }