aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-07-29 21:37:18 +0200
committerFilippos Karapetis2019-08-24 18:12:45 +0300
commit8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36 (patch)
tree28f04bf20020b77488b9c15b37ea5a01d8fd0e7a /backends/platform
parent0db194eed47bfd30a0ac830d7aa0375969caaae5 (diff)
downloadscummvm-rg350-8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36.tar.gz
scummvm-rg350-8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36.tar.bz2
scummvm-rg350-8c284c0917adb3ac3e724c0c5bfc0c86d61a9c36.zip
WIN32: Add Win32 implementation of convertEncoding
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/sdl/win32/win32.cpp26
-rw-r--r--backends/platform/sdl/win32/win32.h2
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