diff options
| author | Anthony <Helios747@users.noreply.github.com> | 2017-05-02 11:41:53 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-02 11:41:53 -0700 |
| commit | d4e424fad55d46a5c627b88c3d61f6c9137f6ac1 (patch) | |
| tree | 808ad3f5f21a7046841a5fcaf6fb24458086d6a6 /Source/Core/DiscIO/VolumeDirectory.cpp | |
| parent | 252bb4471d41027aa5a06984a433f861a2e0e5e6 (diff) | |
| parent | e66ad018f40c1d7076989f3a5069404757d5479c (diff) | |
Merge pull request #5272 from spycrab/master
Convert VolumeDirectory names back to SHIFT-JIS (issue #9988)
Diffstat (limited to 'Source/Core/DiscIO/VolumeDirectory.cpp')
| -rw-r--r-- | Source/Core/DiscIO/VolumeDirectory.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/VolumeDirectory.cpp b/Source/Core/DiscIO/VolumeDirectory.cpp index 35970f7d02..249c6f520d 100644 --- a/Source/Core/DiscIO/VolumeDirectory.cpp +++ b/Source/Core/DiscIO/VolumeDirectory.cpp @@ -17,6 +17,7 @@ #include "Common/CommonTypes.h" #include "Common/FileUtil.h" #include "Common/Logging/Log.h" +#include "Common/StringUtil.h" #include "DiscIO/Blob.h" #include "DiscIO/Enums.h" #include "DiscIO/Volume.h" @@ -26,6 +27,7 @@ namespace DiscIO { static u32 ComputeNameSize(const File::FSTEntry& parent_entry); static std::string ASCIIToUppercase(std::string str); +static void ConvertUTF8NamesToSHIFTJIS(File::FSTEntry& parent_entry); const size_t CVolumeDirectory::MAX_NAME_LENGTH; const size_t CVolumeDirectory::MAX_ID_LENGTH; @@ -350,6 +352,9 @@ void CVolumeDirectory::BuildFST() m_fst_data.clear(); File::FSTEntry rootEntry = File::ScanDirectoryTree(m_root_directory, true); + + ConvertUTF8NamesToSHIFTJIS(rootEntry); + u32 name_table_size = Common::AlignUp(ComputeNameSize(rootEntry), 1ull << m_address_shift); u64 total_entries = rootEntry.size + 1; // The root entry itself isn't counted in rootEntry.size @@ -501,6 +506,17 @@ static u32 ComputeNameSize(const File::FSTEntry& parent_entry) return name_size; } +static void ConvertUTF8NamesToSHIFTJIS(File::FSTEntry& parent_entry) +{ + for (File::FSTEntry& entry : parent_entry.children) + { + if (entry.isDirectory) + ConvertUTF8NamesToSHIFTJIS(entry); + + entry.virtualName = UTF8ToSHIFTJIS(entry.virtualName); + } +} + static std::string ASCIIToUppercase(std::string str) { std::transform(str.begin(), str.end(), str.begin(), |
