use UTF8/16 conversion functions instead of codepage ones

This commit is contained in:
Brad Parker 2016-11-29 12:53:38 -05:00
parent 495deae31b
commit 8adafa9249
4 changed files with 13 additions and 23 deletions

View File

@ -208,8 +208,7 @@ void fill_pathname_application_path(char *s, size_t len)
#endif
#ifdef _WIN32
DWORD ret;
wchar_t ws[len];
size_t ws_size = 0;
wchar_t ws[PATH_MAX_LENGTH] = {0};
#endif
#ifdef __HAIKU__
image_info info;
@ -221,7 +220,7 @@ void fill_pathname_application_path(char *s, size_t len)
return;
#ifdef _WIN32
mbstowcs_s(&ws_size, ws, len, s, len - 1);
MultiByteToWideChar(CP_UTF8, 0, s, -1, ws, sizeof(ws) / sizeof(ws[0]));
ret = GetModuleFileName(GetModuleHandle(NULL), ws, len - 1);
s[ret] = '\0';

View File

@ -47,6 +47,8 @@
extern "C" {
#endif
#include <encodings/utf.h>
LRESULT win32_menu_loop(HWND owner, WPARAM wparam);
#ifndef _MSC_VER
@ -269,11 +271,10 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam)
content_ctx_info_t content_info = {0};
core_info_list_t *core_info_list = NULL;
const core_info_t *core_info = NULL;
size_t file_len = 0;
DragQueryFile((HDROP)wparam, 0, wszFilename, 1024);
DragQueryFile((HDROP)wparam, 0, wszFilename, sizeof(wszFilename) / sizeof(wszFilename[0]));
wcstombs_s(&file_len, szFilename, sizeof(szFilename), wszFilename, sizeof(szFilename) - 1);
utf16_to_char_string((const uint16_t*)wszFilename, szFilename, sizeof(szFilename));
core_info_get_list(&core_info_list);
@ -582,9 +583,7 @@ static bool win32_monitor_set_fullscreen(unsigned width, unsigned height,
{
#ifndef _XBOX
DEVMODE devmode;
wchar_t dev_name_wide[1024];
size_t dev_name_size = strlen(dev_name) + 1;
size_t dev_name_wide_size = 0;
wchar_t dev_name_wide[1024] = {0};
memset(&devmode, 0, sizeof(devmode));
devmode.dmSize = sizeof(DEVMODE);
@ -596,7 +595,7 @@ static bool win32_monitor_set_fullscreen(unsigned width, unsigned height,
RARCH_LOG("Setting fullscreen to %ux%u @ %uHz on device %s.\n",
width, height, refresh, dev_name);
mbstowcs_s(&dev_name_wide_size, dev_name_wide, dev_name_size, dev_name, dev_name_size - 1);
MultiByteToWideChar(CP_UTF8, 0, dev_name, -1, dev_name_wide, sizeof(dev_name_wide) / sizeof(dev_name_wide[0]));
return ChangeDisplaySettingsEx(dev_name_wide, &devmode,
NULL, CDS_FULLSCREEN, NULL) == DISP_CHANGE_SUCCESSFUL;
@ -716,10 +715,9 @@ void win32_set_style(MONITORINFOEXW *current_mon, HMONITOR *hm_to_use,
else
{
char dev_name[CCHDEVICENAME] = {0};
size_t name_len = 0;
*style = WS_POPUP | WS_VISIBLE;
wcstombs_s(&name_len, dev_name, sizeof(dev_name), current_mon->szDevice, sizeof(dev_name) - 1);
utf16_to_char_string((const uint16_t*)current_mon->szDevice, dev_name, sizeof(dev_name));
if (!win32_monitor_set_fullscreen(*width, *height,
refresh, dev_name))

View File

@ -35,8 +35,6 @@ struct RDIR *retro_opendir(const char *name)
#if defined(_WIN32)
char path_buf[1024] = {0};
wchar_t pathW[1024] = {0};
size_t path_size = 0;
size_t out_size = 0;
#endif
struct RDIR *rdir = (struct RDIR*)calloc(1, sizeof(*rdir));
@ -45,8 +43,7 @@ struct RDIR *retro_opendir(const char *name)
#if defined(_WIN32)
snprintf(path_buf, sizeof(path_buf), "%s\\*", name);
path_size = strlen(path_buf) + 1;
mbstowcs_s(&out_size, pathW, sizeof(pathW) / sizeof(wchar_t), path_buf, utf8len(path_buf));
MultiByteToWideChar(CP_UTF8, 0, path_buf, -1, pathW, sizeof(pathW) / sizeof(pathW[0]));
rdir->directory = FindFirstFile(pathW, &rdir->entry);
#elif defined(VITA) || defined(PSP)
rdir->directory = sceIoDopen(name);

View File

@ -24,6 +24,7 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <retro_miscellaneous.h>
#if defined(_WIN32)
#ifdef _MSC_VER
@ -33,9 +34,6 @@
#include <xtl.h>
#define INVALID_FILE_ATTRIBUTES -1
#else
#define UNICODE
#include <tchar.h>
#include <wchar.h>
#include <io.h>
#include <fcntl.h>
#include <direct.h>
@ -105,11 +103,9 @@ static bool path_stat(const char *path, enum stat_mode mode, int32_t *size)
#elif defined(_WIN32)
WIN32_FILE_ATTRIBUTE_DATA file_info;
GET_FILEEX_INFO_LEVELS fInfoLevelId = GetFileExInfoStandard;
size_t path_len = strlen(path);
wchar_t path_wide[path_len + 1];
size_t path_wide_size = 0;
wchar_t path_wide[PATH_MAX_LENGTH] = {0};
mbstowcs_s(&path_wide_size, path_wide, path_len + 1, path, path_len);
MultiByteToWideChar(CP_UTF8, 0, path, -1, path_wide, sizeof(path_wide) / sizeof(path_wide[0]));
DWORD ret = GetFileAttributesEx(path_wide, fInfoLevelId, &file_info);
if (ret == 0)