From 342c64293f8dbeda9bbbadd6783b5a1cfe0d9165 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 10 Apr 2015 09:11:46 -0700 Subject: [PATCH] Improve handling of Windows system paths --- project/src/backend/sdl/SDLSystem.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/project/src/backend/sdl/SDLSystem.cpp b/project/src/backend/sdl/SDLSystem.cpp index a0bc02dac..1168796b5 100644 --- a/project/src/backend/sdl/SDLSystem.cpp +++ b/project/src/backend/sdl/SDLSystem.cpp @@ -17,6 +17,13 @@ #define SHGFP_TYPE_CURRENT 0 #endif #endif +#if UNICODE +#define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "UTF-16LE", (char *)(S), (SDL_wcslen(S)+1)*sizeof(WCHAR)) +#define WIN_UTF8ToString(S) (WCHAR *)SDL_iconv_string("UTF-16LE", "UTF-8", (char *)(S), SDL_strlen(S)+1) +#else +#define WIN_StringToUTF8(S) SDL_iconv_string("UTF-8", "ASCII", (char *)(S), (SDL_strlen(S)+1)) +#define WIN_UTF8ToString(S) SDL_iconv_string("ASCII", "UTF-8", (char *)(S), SDL_strlen(S)+1) +#endif #endif #include @@ -55,7 +62,7 @@ namespace lime { char result[MAX_PATH] = ""; SHGetFolderPath (NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, result); - return std::string (result).c_str (); + return WIN_StringToUTF8 (result); #else @@ -80,7 +87,7 @@ namespace lime { char result[MAX_PATH] = ""; SHGetFolderPath (NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, result); - return std::string (result).c_str (); + return WIN_StringToUTF8 (result); #else @@ -102,7 +109,7 @@ namespace lime { char result[MAX_PATH] = ""; SHGetFolderPath (NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, result); - return std::string (result).c_str (); + return WIN_StringToUTF8 (result); #elif defined (HX_MACOS) @@ -142,7 +149,7 @@ namespace lime { char result[MAX_PATH] = ""; SHGetFolderPath (NULL, CSIDL_PROFILE, NULL, SHGFP_TYPE_CURRENT, result); - return std::string (result).c_str (); + return WIN_StringToUTF8 (result); #else