# HG changeset patch # User Chris Cannam # Date 1477653054 -3600 # Node ID 51229bd6c24bb56e99aa71d9998525081376fb95 # Parent 45ad9f91f97768f0559baeea78305d78e347bbd9 Correct use of multibyte/widechar conversion routines on Windows diff -r 45ad9f91f977 -r 51229bd6c24b src/helper.cpp --- a/src/helper.cpp Fri Oct 28 11:32:12 2016 +0100 +++ b/src/helper.cpp Fri Oct 28 12:10:54 2016 +0100 @@ -63,8 +63,10 @@ #ifdef UNICODE static HMODULE LoadLibraryUTF8(std::string name) { int n = name.size(); - wchar_t *wname = new wchar_t[n*2+1]; - MultiByteToWideChar(CP_UTF8, 0, name.c_str(), n, wname, n*2); + int wn = MultiByteToWideChar(CP_UTF8, 0, name.c_str(), n, 0, 0); + wchar_t *wname = new wchar_t[wn+1]; + wn = MultiByteToWideChar(CP_UTF8, 0, name.c_str(), n, wname, wn); + wname[wn] = L'\0'; HMODULE h = LoadLibraryW(wname); delete[] wname; return h; @@ -81,9 +83,11 @@ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buffer, 0, NULL ); - int n = wcslen(buffer); - char *text = new char[n*8 + 1]; - WideCharToMultiByte(CP_UTF8, 0, buffer, n, text, n*8, 0, 0); + int wn = wcslen(buffer); + int n = WideCharToMultiByte(CP_UTF8, 0, buffer, wn, 0, 0, 0, 0); + char *text = new char[n+1]; + n = WideCharToMultiByte(CP_UTF8, 0, buffer, wn, text, n, 0, 0); + text[n] = '\0'; std::string s(text); LocalFree(&buffer); delete[] text;