diff options
| author | hyperiris <hyperiris@gmail.com> | 2009-02-06 16:53:22 +0000 |
|---|---|---|
| committer | hyperiris <hyperiris@gmail.com> | 2009-02-06 16:53:22 +0000 |
| commit | 825919aaf8e50a8a28ae3c798438c29dcbb0d270 (patch) | |
| tree | 72801246d101255837337fef18b81aaba5c16b7d /Source/Core/DiscIO/Src/BannerLoader.cpp | |
| parent | 5df69d0384e166cf7736cec4aba9db0b3c136a6b (diff) | |
fix display wii game name and description (only WIN32 working).
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2125 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DiscIO/Src/BannerLoader.cpp')
| -rw-r--r-- | Source/Core/DiscIO/Src/BannerLoader.cpp | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/Source/Core/DiscIO/Src/BannerLoader.cpp b/Source/Core/DiscIO/Src/BannerLoader.cpp index 02242d5b29..8a1931db1e 100644 --- a/Source/Core/DiscIO/Src/BannerLoader.cpp +++ b/Source/Core/DiscIO/Src/BannerLoader.cpp @@ -94,31 +94,44 @@ bool IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* return(bResult); } -bool IBannerLoader::CopyUnicodeToString( std::string& _rDestination, const u16* _src ) +bool IBannerLoader::CopyBeUnicodeToString( std::string& _rDestination, const u16* _src, int length ) { + + bool returnCode = false; #ifdef WIN32 if (_src) { - u32 ansiNameSize = WideCharToMultiByte(CP_ACP, 0, - (LPCWSTR)_src, (int)wcslen((const wchar_t*)_src), - NULL, NULL, NULL, NULL); - if (ansiNameSize > 0) + u16* buffer = new u16[length]; + if (buffer) { - char* pAnsiStrBuffer = new char[ansiNameSize + 1]; - if (pAnsiStrBuffer) + memcpy(buffer, _src, sizeof(u16)*length); + for (int i = 0; i < length; i++) + { + buffer[i] = swap16(buffer[i]); + } + + u32 ansiNameSize = WideCharToMultiByte(CP_ACP, 0, + (LPCWSTR)buffer, (int)wcslen((const wchar_t*)buffer), + NULL, NULL, NULL, NULL); + if (ansiNameSize > 0) { - memset(pAnsiStrBuffer, 0, (ansiNameSize + 1) * sizeof(char)); - if (WideCharToMultiByte(CP_ACP, 0, - (LPCWSTR)_src, (int)wcslen((const wchar_t*)_src), - pAnsiStrBuffer, ansiNameSize, NULL, NULL)) + char* pAnsiStrBuffer = new char[ansiNameSize + 1]; + if (pAnsiStrBuffer) { - _rDestination = pAnsiStrBuffer; - returnCode = true; + memset(pAnsiStrBuffer, 0, (ansiNameSize + 1) * sizeof(char)); + if (WideCharToMultiByte(CP_ACP, 0, + (LPCWSTR)buffer, (int)wcslen((const wchar_t*)buffer), + pAnsiStrBuffer, ansiNameSize, NULL, NULL)) + { + _rDestination = pAnsiStrBuffer; + returnCode = true; + } + delete pAnsiStrBuffer; } - delete pAnsiStrBuffer; - } - } + } + delete buffer; + } } #else // FIXME: Horribly broke on non win32 |
