diff options
author | Jaromir Wysoglad | 2019-07-29 21:37:18 +0200 |
---|---|---|
committer | Filippos Karapetis | 2019-08-24 18:12:45 +0300 |
commit | 8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36 (patch) | |
tree | 28f04bf20020b77488b9c15b37ea5a01d8fd0e7a /backends/platform/sdl | |
parent | 0db194eed47bfd30a0ac830d7aa0375969caaae5 (diff) | |
download | scummvm-rg350-8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36.tar.gz scummvm-rg350-8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36.tar.bz2 scummvm-rg350-8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36.zip |
WIN32: Add Win32 implementation of convertEncoding
Diffstat (limited to 'backends/platform/sdl')
-rw-r--r-- | backends/platform/sdl/win32/win32.cpp | 26 | ||||
-rw-r--r-- | backends/platform/sdl/win32/win32.h | 2 |
2 files changed, 28 insertions, 0 deletions
diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index cb65fa813a..82b21ae7cb 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -43,6 +43,7 @@ #include "backends/platform/sdl/win32/win32.h" #include "backends/platform/sdl/win32/win32-window.h" #include "backends/platform/sdl/win32/win32_wrapper.h" +#include "backends/platform/sdl/win32/codepage.h" #include "backends/saves/windows/windows-saves.h" #include "backends/fs/windows/windows-fs-factory.h" #include "backends/taskbar/win32/win32-taskbar.h" @@ -384,4 +385,29 @@ AudioCDManager *OSystem_Win32::createAudioCDManager() { return createWin32AudioCDManager(); } +char *OSystem_Win32::convertEncoding(const char* to, const char *from, const char *string, size_t length) { + char *result = OSystem_SDL::convertEncoding(to, from, string, length); + if (result != nullptr) + return result; + if (Common::String(from).equalsIgnoreCase("utf-32")) + return nullptr; + + WCHAR *tmpStr; + if (Common::String(from).equalsIgnoreCase("utf-16")) { + // Allocate space for string and 2 ending zeros + tmpStr = (WCHAR *) calloc(sizeof(char), length + 2); + memcpy(tmpStr, string, length); + } else { + tmpStr = Win32::ansiToUnicode(string, Win32::getCodePageId(from)); + } + + if (Common::String(to).equalsIgnoreCase("utf-16")) + return (char *) tmpStr; + else { + char *result = Win32::unicodeToAnsi(tmpStr, Win32::getCodePageId(to)); + free(tmpStr); + return result; + } +} + #endif diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h index 050137ffe1..2a496f5b22 100644 --- a/backends/platform/sdl/win32/win32.h +++ b/backends/platform/sdl/win32/win32.h @@ -54,6 +54,8 @@ protected: virtual AudioCDManager *createAudioCDManager(); HWND getHwnd() { return ((SdlWindow_Win32*)_window)->getHwnd(); } + + virtual char *convertEncoding(const char *to, const char *from, const char *string, size_t length); }; #endif |