summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/VolumeDirectory.cpp
diff options
context:
space:
mode:
authorAnthony <Helios747@users.noreply.github.com>2017-05-02 11:41:53 -0700
committerGitHub <noreply@github.com>2017-05-02 11:41:53 -0700
commitd4e424fad55d46a5c627b88c3d61f6c9137f6ac1 (patch)
tree808ad3f5f21a7046841a5fcaf6fb24458086d6a6 /Source/Core/DiscIO/VolumeDirectory.cpp
parent252bb4471d41027aa5a06984a433f861a2e0e5e6 (diff)
parente66ad018f40c1d7076989f3a5069404757d5479c (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.cpp16
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(),