ISO: optimize byteswap and utf16 string conversion

This commit is contained in:
Megamouse
2026-01-10 12:36:33 +01:00
parent 36bce33684
commit 9faf9a6145
+8 -15
View File
@@ -102,24 +102,17 @@ std::optional<iso_fs_metadata> iso_read_directory_entry(fs::file& file, bool nam
}
else if (names_in_ucs2) // for strings in joliet descriptor
{
std::string new_file_name;
int read = 0;
const u8* raw_str = reinterpret_cast<const u8*>(file_name.c_str());
while (read < file_name_length)
// characters are stored in big endian format.
std::u16string utf16;
utf16.resize(file_name_length / 2);
const u16* raw = reinterpret_cast<const u16*>(file_name.data());
for (size_t i = 0; i < utf16.size(); ++i, raw++)
{
// characters are stored in big endian format.
const u16 upper = raw_str[read];
const u8 lower = raw_str[read + 1];
const u16 code_point = (upper << 8) + lower;
std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> convert;
new_file_name += convert.to_bytes(code_point);
read += 2;
utf16[i] = *reinterpret_cast<const be_t<u16>*>(raw);
}
file_name = new_file_name;
file_name = utf16_to_utf8(utf16);
}
if (file_name.ends_with(";1"))